티스토리 뷰

1. 교착상태 발생조건에 대해 설명하시오. 

👉🏻 교착상태 발생 조건으로는 4가지가 있습니다.

1. 상호배제(Mutual exclusion) : 프로세스들이 필요로 하는 자원에 대해 배타적인 통제권을 요구한다. 
----> 공유하지 않고 오로지 나만 쓰는 상황이라고 할 수 있습니다. 
2. 점유대기(Hold and wait) : 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다린다.
----> 내가 어떤 공유된 자원을 가진 상태에서 또 다른 것을 요구할 때 발생합니다. 
3. 비선점(No preemption) : 프로세스가 어떤 자원의 사용을 끝낼 때까지 그 자원을 빼앗을 수 없다. 
----> 내가 가진 공유 자원을 양보하지 않아서 더이상 진행되지 않을 때 발생합니다. 
4. 순환대기(Circular wait) : 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다. 
----> 실제로 교착상태(DeadLock)는 일직선일 때 발생하지 않습니다. 

이렇게 4가지 필요조건이 있습니다. 이 조건 중에서 한 가지라도 만족하지 않으면 교착 상태는 발생하지 않습니다. 이 중 순환대기 조건은 점유대기 조건과 비선점 조건을 만족해야 성립되는 조건이므로, 위 4가지 조건은 서로 완전히 독립적인 것은 아닙니다. 

교착 상태(Dead Lock)를 처리할 수 있는 방법으로는 4가지가 있습니다. 

1. 교착상태 예방(Prevention) : 교착상태의 필요조건을 부정함으로써 교착상태가 발생하지 않도록 미리 예방하는 방법이다. (예시-순환대기, 비선점, 점유와 대기, 상호배제 4가지 필요조건 부정) 

2. 교착상태 회피(Avoidance) : 교착상태 가능성을 배제하지 않고 적절하게 피해나가는 방법이다.
(예시-은행원 알고리즘)

3. 교착상태 탐지(Detection) : 교착상태 발생을 허용하고, 발생 시 원인을 규명하여 해결하는 방법이다.
(예시-자원할당 그래프) 

4. 교착상태 회복(Recovery) : 교착상태 발견 후, 선형대기를 배제시키거나 자원을 중단하는 메모리 할당 기법이다.
(예시-선점(희생자 선택, 롤백, 기아 상태 사항 고려), 프로세스 중지(회생자 선택))

 

 

2. HTTP 응답코드를 5개로 분류하여 설명하시오. 

👉🏻 HTTP 응답 코드는 100번대, 200번대, 300번대, 400번대, 500번대로 나눌 수 있습니다. 

1. 100 - 199 : 정보성 상태 코드 

정보성 상태 코드는 HTTP/1.1에서 도입되어 비교적 새로운 것이며, 복잡함을 감수할 만큼 가치가 있는지에 대해 논란이 되고있다고 합니다. 

100 : 요청의 시작 부분의 일부가 받아들여졌으며, 클라이언트는 나머지를 계속 이어서 보내야함을 의미한다. 

101 : 요청자가 서버에 프로토콜 전환을 요청했으며, 서버에서 이를 승인하는 중임을 의미한다. 

 

2. 200 - 299 : 성공 상태 코드 

클라이언트가 요청을 보내면, 요청은 대게 성공합니다. 서버는 대응하는 성공을 의미하는 각각의 요청에 대응합니다. 

200 : 요청은 정상이고, 본문은 요청된 리소스를 포함하고 있다.

201 : 어떠한 생성 작업을 요청받았으며, 생성 작업을 성공하였다.

202 : 요청은 받아들여졌으나, 아직 동작을 수행하지 않은 상태로 요청이 적절함을 의미한다.

203 : 요청은 성공했지만, 요청에 대한 검증이 되지 않은 상태를 의미한다.

204 : 요청은 성공했지만, 제공할 내용이 없음을 의미한다.

205 : 204와 동일하지만 새로고침 등을 통해 새로운 내용을 확인할 것을 의미한다.

206 : 요청의 이루분만 성공하였음을 의미한다.

 

3. 300 - 399 : 리다이렉션 상태 코드 

클라이언트의 요청에 대해 적절한 다른 위치를 제공하거나, 대안의 응답을 제공하는 코드입니다. 

300 : 클라이언트가 동시에 여러 응답을 가리키는 URL을 요청한 경우 응답 목록과 함께 반환된다. 
(예시 - 어떤 HTML 문서에 대한 영문 페이지와 불어 페이지를 요청) 

301 : 요청한 URL이 옮겨졌을 때 사용한다. 옮겨진 URL에 대한 정보와 함께 응답되어야 한다. 

302 : 301과 동일하나, 클라이언트는 여전히 옮겨지기 전 URL로 요청할 것을 의미한다. 

303 : 요청받은 행동을 수행하기 위해서는 다른 URL로 요청해야함을 의미한다. 

304 : 이전의 동일한 요청과 비교하여 변화가 없음을 의미한다. (단시간에 반복된 동일 요청에 대한 대응 코드)

305 : 직접적인 요청이 아니라 반드시 proxy(우회경로)를 통해 요청되어야 함을 의미한다. 

307 : 302와 동일하며, HTTP Method도 변경 없이 요청하여야 함을 의미한다. 

 

4. 400 - 499 : 클라이언트 에러 상태 코드 

클라이언트의 잘못된 요청에 대한 대응 코드입니다. 

400 : 클라이언트가 올바르지 못한 요청을 보내고 있음을 의미한다. 

401 : 요청을 위해서는 권한 인증 등을 요구함을 의미한다. 

403 : 요청이 서버에 의해 거부 되었음을 의미한다. 서버는 거부 이유를 포함하여 응답할 수 있지만, 보통은 거부 이유를 숨기고 싶을 때 사용된다. 

404 : 요청한 URL을 찾을 수 없음을 의미한다. 

405 : 요청한 URL이 Method를 지원하지 않음을 의미한다. (예시 - POST 요청에 대한 응답을 하는 URL에 GET으로 요청) 

406 : 클라이언트 요청에 대해 적잘한 컨텐츠가 없음을 의미한다. 

407 : 401과 동일하나, proxy(우회 경로)를 통하여 인증할 것을 요구한다. 

408 : 요청에 응답하는 시간에 너무 많은 시간이 걸림을 의미한다. (이 때, 서버는 요청을 끊을 수 있다.) 

409 : 클라이언트 요청에 대해 서버에서 충돌 요소가 발생할 수 있음을 의미한다. 

410 : 요청한 URL이 더이상 사용되지 않고 사라졌음을 의미한다. 

411 : 클라이언트 요청에 Content-length 헤더가 포함되어야 함을 의미한다. 

412 : 클라이언트가 조건부 요청을 했는데 그중 하나가 실패했음을 의미한다. 

413 : 요청이 너무 커서 서버가 처리할 수 없음을 의미한다. 

414 : 요청 URL이 너무 길어 처리할 수 없음을 의미한다. 

415 : 서버가 이해하지 못하는 유형의 컨텐츠를 요청 하였음을 의미한다. 

416 : 클라이언트의 요청 내용의 범위가 잘못되었음을 의미한다. 

417 : 클라이언트 요청 헤더의 Expect에 대해 서버가 만족하지 않음을 의미한다. 

 

5. 500 - 599 : 서버 에러 상태 코드 

올바른 클라이언트 요청에 대해 서버의 문제로 응답할 수 없음을 의미합니다. 

500 : 서버에 오류가 발생하여 응답할 수 없음을 의미한다. 

501 : 클라이언트 요청에 대한 서버의 응답 수행 기능이 없음을 의미한다. 
(예시 - 서버가 지원하지 않는 새로운 Method를 사용하여 요청한다. GET2, POST2 등) 

502 : proxy나 Gateway 등의 서버에서 응답하며, 서버의 모 서버에서 오류가 발생했음을 의미한다. 

503 : 현재 서버가 유지보수 등의 이유로 일시적인 사용이 불가함을 의미한다. 

504 : 서버에서 다른 서버로 요청을 보냈으나, 응답 지연이 발생하여 처리가 불가함을 의미한다. 

505 : 서버가 지원할 수 없거나, 올바르지 못한 프로토콜로 요청을 받았음을 의미한다. 

참고사이트

 

 

3. JDK와 SDK에 대해서 설명하시오. 

👉🏻 JDK는 자바 개발 키트(Java Development Kit)의 약자입니다. 이것은 자바 애플리케이션을 구축하기 위한 핵심 플랫폼 구성 요소입니다. JDK는 자바 가상 머신(Java Virtual Machine, JVM), 그리고 자바 런타임 환경(Java Runtime Environment, JRE)과 함께 자바 프로그래밍에 사용되는 3대 핵심 기술 패키지 가운데 하나 입니다. 

즉 JDK는 개발자들이 JVM과 JRE에 의해 실행되고 구동될 수 있는 자바 프로그램을 생성할 수 있게 해주는 것입니다. JDK는 자바 기반 소프트웨어를 개발하기 위한 도구들로 이뤄진 패키지인 반면, JRE는 자바 코드를 실행하기 위한 도구들로 구성된 패키지입니다. 

자바 프로그램을 구동하는 것이 자바 프로그램 개발의 일환이기 때문에 JDK는 JRE를 필요로 합니다. 즉, JDK는 JVM, JRE가 포함된 패키지입니다. 아래의 그림은 JDK가 자바 애플리케이션 개발 라이프사이클에서 어디에 속하는지를 보여줍니다. 

JDK에 대한 기술적 정의와 일반적 정의는 다음과 같습니다.

✅ 기술적 정의 : JDK는 컴파일러와 클래스 라이브러리(Class Library)를 포함하는, 자바 플랫폼 사양서의 구현이다. 

✅ 일반적인 정의 : JDK는 개발자가 자바 기반 애플리케이션 개발을 위해 다운로드하는 소프트웨어 패키지이다. 

👉🏻 SDK 란 Software Development Kit의 약자입니다. 특정 플랫폼을 대상으로 소프트웨어 응용 프로그램을 개발하는데 사용할 수 있는 일련의 개발 도구의 모음입니다. SDK에는 프로그래머가 응용프로그램을 개발하는데 도움이 되는 도구, 라이브러리, 설명서 및 샘플 코드가 포함되어 있습니다. 대부분의 SDK는 인터넷에서 다운로드 받을 수 있으며, 많은 SDK가 무료로 제공되므로 프로그래머는 SDK의 프로그래밍 언어를 사용할 수 있습니다. 

일부 SDK는 모든 라이브러리, 디버깅 유틸리티, API 등을 포함하는 Java SDK(JDK)로 Java에서 프로그램 작성을 훨씬 쉽게 만들어줍니다. SDK는 서로 호환되는 구성 요소 및 도구를 찾을 필요가 없고, 모든 구성 요소가 설치하기 쉬운 단일 패키지에 통합되므로 소프트웨어 개발자의 프로그램 개발을 수월하게 해줍니다. 

SDK를 설명할 때 API도 같이 나오게 되는데요, API는 Application Programming Interface의 약자입니다. 즉, 응용 프로그램에서 사용할 수 있도록 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 말합니다. API는 프로그램과 또 다른 프로그램을 연결해주는 일종의 다리라고 할 수 있습니다. API는 SDK와 거의 동일한 의미로 사용됩니다. 

정리하자면 SDK안에 JDK가 포함된 구조라고 보면 됩니다. 즉, 자바만 개발할 수 있는 SDK를 JDK라고 부릅니다. 

 

 

4. Wrapper Class를 사용하는 이유에 대해 설명하시오. 

👉🏻 프로그램에 따라 기본 타입의 데이터를 객체로 취급해야 하는 경우가 있습니다. 예를 들어, 메소드의 인수로 객체 타입만이 요구되면 기본 타입의 데이터를 그대로 사용할 수 없습니다. 이 때, 기본 타입의 데이터를 먼저 객체로 변환한 후 작업을 수행해야 합니다. 

8개의 기본 타입에 해당하는 데이터를 객체로 포장해주는 클래스를 Wrapper class라고 합니다. Wrapper class는 각각의 타입에 해당하는 데이터를 인수로 전달받아, 해당 값을 가지는 객체로 만들어 줍니다. 이러한 Wrapper class는 java.lang 패키지에 포함되어 제공됩니다. 즉, 기본 자료형에 대해 객체로서 인식되도록 포장하기 위해 Wrapper class를 사용합니다. 래퍼 클래스를 이용하게 되면 참조형 끼리의 연산이 불가능하기 때문에 기본 자료형으로 변환하여 연산합니다.

따라서 Autoboxing, Unboxing 개념을 사용하는데요, 오토박싱의 경우 명시적으로 기본 자료형을 래퍼클래스로 감싸주지 않아도 박싱(Wrapper-포장)해주는 것입니다. 언박싱은 그 반대의 경우입니다. 명시적으로 기본 자료형으로 변환하지 않아도 포장을 풀어줍니다. 

/* Autoboxing */
Integer num = new Integer(3);
Character ch = "X";

/* Unboxing */
int n = num.intValue();
char c = ch;

--> 위의 예제에서 볼 수 있듯이 래퍼 클래스인 Integer 클래스와 Character 클래스에서는 각각 언박싱을 위한 intValue() 메소드와 charValue() 메소드가 포함되어 있습니다. 또한, 오토 박싱을 이용하면 new 키워드를 사용하지 않고도 자동으로 Character 인스턴스를 생성할 수 있습니다. 반대로 charValue() 메소드를 사용하지 않고도, 오토 언박싱을 이용하여 인스턴스에 저장된 값을 바로 참조할 수 있습니다. 

자바의 기본 타입에 대응하여 제공하고 있는 wrapper class는 아래와 같습니다. 래퍼 클래스는 객체이므로 동등 연산자(==)를 사용하게 되면, 두 인스턴스의 값을 비교하는 것이 아니라 두 인스턴스의 주소값을 비교하게 됩니다. 따라서 서로 다른 두 인스턴스를 동등 연사자로 비교하게 되면 언제나 false 값을 반환합니다. 그러므로 인스턴스에 저장된 값의 동등여부를 정확히 판단하려면 equals() 메소드를 사용해야 합니다. 

기본 타입 Wrapper class
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

 

 

5. 컴파일 에러와 런타임 에러를 비교하여 설명하시오. 

👉🏻 컴파일 에러(Compile Error)는 컴파일 시 발생하는 에러입니다. 컴파일러는 구문 오류로 프로그램을 컴파일 할 수 없다는 뜻입니다. 대체로 문법상의 오류로 발생하며 에러가 발생한 부분을 개발자에게 알려줍니다. 

컴파일타임 에러의 유형으로는 대표적으로 아래와 같습니다.

1. Syntax error(구문 에러) - ';'이누락된 문법 에러

2. 괄호가 안 맞는 등 구문 에러

3. classpath에 누락 된 클래스(컴파일 시) 

런타임 에러(Runtime Error)는 프로그램 실행 시 발생하는 에러입니다. 프로그램이 컴파일 된 후 실행하면서 에러가 발생합니다. 대체로 개발 시 설계 미숙(논리적)으로 발생하는 에러이며, 에러 발생 시 개발자가 역추적하여 원인을 확인해야 합니다. 

런타임 에러의 유형으로는 대표적으로 아래와 같습니다. 

1. Nullpointer 

2. 0으로 나눈 경우 

3. 무한루프 등

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30