ㅇㅇㅇ

김상욱·2024년 8월 18일

[네트워크]
💡 HTTP 프로토콜에 대해 설명해주세요.
💡 HTTP와 HTTPS의 차이점은 무엇인가요?
💡 쿠키(Cookie)와 세션(Session)의 차이점에 대해 말해주세요.
💡 http://www.naver.com에 접속할 때 생기는 과정에 대해 설명해주세요. (웹 동작 방식 이해)
💡 TCP와 UDP의 차이를 설명해주세요.

💡 HTTP Method와 각각이 사용되는 경우에 대해서 설명해주세요.
💡 GET과 POST의 차이에 대해 설명해주세요
💡 세션 기반 인증과 토큰 기반 인증의 차이에 대해 얘기해주세요.
   - 그렇다면 Stateful한 세션 기반의 인증 방식을 사용하게 된다면 어떠한 단점이 있을까요?
   - 그렇다면 세션 기반 인증과 토큰 기반 인증은 각각 어느 경우에 적합한가요?
💡 JWT 토큰에 대해 설명해주세요.
💡 Connection Timeout과 Read Timeout의 차이에 대해 설명해주세요.
💡 공인(public) IP와 사설(private) IP의 차이에 대해 설명해주세요.


💡 Socket 으로 바로 통신하는 것 대비 HTTP 는 비효율적인데도 왜 많은 앱들은 HTTP 를 쓰는 걸까요?

💡 OSI Layer 7 또는 TCP Model 에 대해 설명해주세요.

💡차세대 프로토콜로 논의중인 HTTP/3 은 UDP 기반의 QUIC 이라는 기술로 구현되어 있습니다. UDP 는 TCP 대비 안정성이 떨어지는 프로토콜이라고 하는데, 그럼에도 왜 UDP 를 채택한 걸까요?

💡SSL (또는 TLS) 가 어떻게 동작하는지 말씀해주세요.

💡 HTTP 는 Stateless (상태가 없는) 통신 프로토콜이라고 합니다. 따라서, 상태가 없다면 가령 HTTP 를 쓰는 서비스는 매번 로그인을 해 줘야 하거나 사용자 정보를 저장하는 일이 불가능합니다. 그런데 실제론 그렇지 않죠. 어떻게 이런 불편함을 해소했을까요?

💡웹 브라우저에 [https://www.google.com](https://www.google.com/) URL 을 입력 후 enter 를 쳤을 때 일어나는 과정을 최대한 상세하게 설명해주세요.

💡HTTP(s) 프로토콜에서 바이너리 데이터를 전송하는 방식에 대해 설명해주세요.

💡Socket 으로 웹 페이지를 크롤링하는 HTTP 클라이언트를 직접 구현해야 한다면, 어떻게 하시겠습니까?

[운영체제]

💡 프로세스와 쓰레드의 차이에 대해 설명해주세요.

프로세스는 프로그램을 메모리 상에서 실행하는 작업이며 쓰레드는 프로세스 안에서 실행되는 여러 흐름 단위이다.

프로세스는 자신만의 고유 공간과 자원을 할당받아 사용하는데 반해, 쓰레드는 다른 쓰레드와 공간, 자원을 공유하면서 사용하는 차이가 존재한다.

💡 멀티 프로세스와 멀티 쓰레드의 특징에 대해 설명해주세요.

멀티프로세스는 하나의 프로그램을 여러개의 프로세스로 구성하여 각 프로세스가 병렬적으로 작업을 수행하는 것이다. 이 때 각 프로세스는 독립적이기 때문에 서로가 침범되지 않도록 하며 이것이 OS에 의해 관리되며 보호되기 때문에 안정성을 지닙니다. 하지만 이 때문에, 작업량이 Context Switching 등이 늘어나면 오버헤드가 발생할 수 있습니다.

멀티쓰레드란 쓰레드들이 공유 메모리를 통하여 다수의 작업을 동시에 처리하도록 하는 것이다. 프로세스가 독립적인 것에 비해 멀티쓰레드는 공유 메모리만큼의 시간, 자원에 대한 손실이 적다. 이 때, 공유 가능한 내용은 Code Segment에 있는 전역 변수와 정적 변수라고 할 수 있다. 하지만 메모리를 공유하기 때문에 하나의 쓰레드가 데이터 공간을 망가뜨리면, 모든 쓰레드가 작동 불능 상태가 되기 때문에 안정성이 떨어진다고 할 수 있다.

💡 멀티 쓰레드의 동시성과 병렬성을 설명해주세요.

동시성은 프로그램이 여러 작업을 동시에 처리하는 것처럼 보이게 하는 능력이다. 실제로 동시에 실행되는 것이 아니라 빠르게 전환되면서 동시에 실행되는 것처럼 보이는 것이다. 동시성의 주요 목표는 응답성을 높이고, 자원을 효율적으로 사용하는 것이다.

병렬성은 여러 작업이 실제로 동시에 실행되는 것으로 주요 목표는 작업을 빠르게 완료 하는 것이다.

💡 멀티 쓰레드 환경에서의 주의사항을 설명해주세요.

여러 쓰레드가 동시에 공유 자원에 접근할 수 있기 때문에 동기화 시 주의해야 한다. 대표적인 문제로는 Race Condition(경쟁 조건), 즉, 여러 쓰레드가 공유 자원에 대해 동시에 접근이 가능하기 때문에 자료의 일관성을 해치는 결과값이 나타나는 상태가 있고 또, 서로 자원을 얻지 못해서 다음 처리로 넘어가지못하고 무한히 다음 자원을 기다리는 상태인 DeadLock(교착 상태)가 있다.

💡 데드락에 대해 설명해주세요.

DeadLock이란 두 개 이상의 프로세스나 스레드가 서로 자원을 얻지 못해서 다음 처리를 하지 못하는 상태로 무한히 다음 자원을 기다리게 되는 상태를 말한다. 시스템적으로 한정된 자원을 여러 곳에서 사용하려고 할 때 발생한다.

예를 들면, 프로세스가 2개 있을 때 하나의 프로세스가 자원을 하나씩 얻었을때, 각 다른 프로세스가 서로가 얻고 있는 자원에 접근하여 wait 상태에 무한정 빠지는 경우가 발생한다.

💡 콘보이 현상(convoy effect)이란 무엇이고, 콘보이 현상이 발생될 수 있는 CPU 스케줄러 알고리즘은 무엇인지 설명해주세요.

Convoy effect는 한 프로세스나 스레드가 오랫동안 자원을 점유하면, 다른 프로세스나 스레드들이 해당 자원을 기다리며 줄을 서게 되어 전체 시스템의 성능이 저하되는 현상이다.

이 현상은 보통 자원을 오랜시간 점유하면서 다른 프로세스나 스레드들이 접근하지 못하는데에서 발생하므로 자원을 독점적으로 점유하는 lock을 사용하는 멀티스레드 환경이나 특정 CPU 알고리즘에서 자주 발생한다.

FIFO 스케줄링에서 CPU를 오랫동안 차지하는 프로세스가 앞에 있다면 뒤에 있는 프로세스들이 오래 기다리게 되면서 콘보이 현상이 발생할 수 있다.

비선점형 스케줄링의 경우도 OS가 CPU의 사용권을 강제 회수하는 것이 아닌 프로세스가 자발적으로 반환할 때까지 기다려야 하므로, 긴 작업을 수행하는 프로세스가 CPU를 점유하면 콘보이 현상이 발생할 수 있다.

선점 스케줄링 중 하나인 Priority Scheduling 또한 높은 우선순위의 프로세스가 길어지면 낮은 우선순위 프로세스가 길게 대기하게 되면서 콘보이 현상이 발생할 수 있다. 이때에 높은 우선순위가 쌓이면서 낮은 우선순위 프로세스에 대해 콘보이 현상이 심화될 수 있다.

💡 선점형 스케줄링과 비선점형 스케줄링의 차이를 설명해주세요.

Preemptive Scheduling은 OS가 현재 실행 중인 프로세스로부터 CPU 사용권을 강제로 회수하여 다른 프로세스에게 할당할 수 있는 방식이다. 이는 긴급한 작업에 대해 바로 응답할 수 있으며 여러 프로세스가 공정하게 CPU 시간을 나눠 가지게 할 수 있다. 상황에 따라 주어진 시간과 다르게 CPU를 회수하고 할당하기 때문에 시간을 예측하기가 어렵다.

Non-Preemptive Scheduling은 현재 실행중인 프로세스가 종료되거나 I/O 등의 이벤트 처리를 위해 자발적으로 CPU 사용권을 반납할 때까지 실행을 보장하는 방식으로 다른 프로세스는 대기한다. 이로 인해 주어진 처리시간과 일치하므로 처리시간의 예측이 보다 쉽다.

💡 동기와 비동기의 차이에 대해 설명해주세요.

Synchronous는 작업이 완료될 때까지 호출한 프로세스나 스레드가 기다리다가 작업이 끝나면 작업을 수행한다. 이는 순차적 실행을 보장하지만 대기 시간 동안의 CPU 자원을 활용하지 못하기 때문에 비효율적일 수 있다.

Asynchronous는 작업을 요청한 후, 해당 작업의 완료 여부와 상관없이 다음 작업을 진행한다. 작업이 완료되면, 완료된 시점에서 별도로 통지하거나 처리를 수행한다. 이는 CPU 자원의 효율성이 높지만 작업 완료 시점을 처리하기 위해 추가적인 메커니즘이 필요할 수 있어 제어 흐름이 복잡해 질 수 있다.

💡 Critical Section(임계영역)에 대해 설명해주세요.

멀티스레드에서 동기화 시 공유된 자원에 대해 일관성이 깨질 수 있는 Race Condition(경쟁 조건)을 해결하기 위한 방법 중 하나가 Critical Section(임계 영역)이다.

Critical Section이란 여러 프로세스가 데이터를 공유하며 수행될 때, 각 프로세스에서 공유데이터에 접근하는 프로그램 코드 블록 부분이다. 이때, 동시 접근 시, 잘못된 결과, 즉 일관성을 깨트릴 수 있기 때문에 한 프로세스가 임계 구역을 수행할 때는 다른 프로세스가 접근하지 못하도록 해야 한다.

💡 뮤텍스(Mutex)와 세마포어(Semaphore)의 차이에 대해 설명해주세요.

Mutex와 Semaphore는 둘 다 멀티프로세스 환경에서 동기화 시 공유된 자원의 일관성 유지를 위한 Race Condition에서 Critical Section, 즉 프로세스가 공유데이터에 접근하는 프로그램 코드 블록 부분을 보호하기 위한 메커니즘이다.

Mutex의 경우는 상호 배제(Mutual Exclusion)을 목적으로 하나의 스레드만이 Critical Section에 접근할 수 있도록 한다. 이 때 락을 사용하여 통제 하며 락을 거는 쓰레드와 락을 푸는 쓰레드는 동일해야 하므로 통제가 가능하다. 즉, 하나의 쓰레드가 잠그고 들어가서 나올 때 잠금을 푼다고 생각하면 된다.

Semaphore는 자원에 대해 접근을 제한하여 자원의 최대 접근 가능 수를 제어하기 위한 것이다. Mutex의 락을 통한 소유권 개념처럼이 아니라 Semaphore를 얻은 쓰레드가 해제하는 것이 아니다. 공유된 자원의 수를 통해 자원에 접근하면 wait상태로 Semaphore의수를 낮추고 끝나면 높여 반납한다.

💡 페이지 교체 알고리즘에 대해 설명해주세요.

페이지의 부재가 발생할 시, 운영체제는 디스크에서 해당 페이지를 메모리로 로드해야 하는데 메모리가 가득차서 새롭게 페이지를 로드할 공간이 없으면 현재 메모리에 있는 페이지 중 하나를 제거해야 한다. 이 때, 희생되는 페이지를 (victim page)라 하며 이 victim page를 제거할 때 선택할 때 최대한 수정이 되지 않은 페이지를 골라 선택해야 다시 수정되는 상황을 피하므로 이러한 상황 속 제거할 페이지 판단을 하는 알고리즘이 페이지 교체 알고리즘이다.

FIFO 알고리즘의 경우는 선입선출이므로 보통 초기화 코드에서 적절한 방법이다. 초기화 코드의 경우 처음 프로세스 실행시에는 무조건 필요한 코드이지만 그 이후에는 다른 역할을 수행하지 않기 때문에 내보내도 괜찮기 때문이다.

OPT(Optimal Page Replacement)는 앞으로 가장 사용하지 않을 페이지를 가장 우선적으로 내보내는 알고리즘으로 사실상 미래에 대한 정보를 알기 어렵기 때문에 어렵다.

LRU(Least-Recenly-Used)는 최근에 사용하지 않은 페이지를 가장 먼저 내보내는 알고리즘으로 과거를 보고 판단하므로 실질적으로 가장 좋은 방법 중 하나이다.

💡 컨텍스트 스위칭(Context Switching)이 무엇인지 설명해주세요.

멀티프로세스에서 수행 중인 프로세스를 변경하는 일이 생기는데, 이 때, CPU의 레지스터 정보가 변경되는 것을 Context Switching이라고 한다. 즉, 동작 중인 프로세스가 대기하면서 해당 프로세스의 상태를 PCB에 보관하고, 대기하고 있던 다음 순번의 프로세스가 동작하면서 이전에 보관했던 프로세스 상태를 복구(레지스터에 적재)하는 과정이다.

보통 인터럽트가 발생하거나, 실행 중인 CPU를 사용 허가시간을 허가하거나, 입출력을 위해 CPU 사용권을 넘겨 대기해야 하는 경우에 Context Switching이 이루어진다.

💡 Thread 간의 데이터 공유와 Process 간의 데이터 공유의 공통점과 차이점을 설명해주세요.

💡 운영체제가 여러 프로그램을 동시에 실행하는 원리에 대해 설명해주세요.

💡 System call 이 뭔가요? System call 에 대해 설명해주세요.

💡 Thread safety 란 뭔가요? 어떻게 구현해야 Thread safe 한 코드를 만들 수 있나요?

💡 파이프(|) 란 무엇이고, 어떻게 동작하는지 설명해주세요.

주요 질문
  1. 데드락(교착 상태)가 뭔가요? 발생 조건에 대해 말해보세요.
  2. 회피 기법인 은행원 알고리즘이 뭔지 설명해보세요.
  3. 기아상태를 설명하는 식사하는 철학자 문제에 대해 설명해보세요

0개의 댓글