EnjoyCSStudy / CS-Knowledge-Source

0 stars 0 forks source link

240214 Network Interview Question #16

Open BaeYoungSuk opened 7 months ago

BaeYoungSuk commented 7 months ago

네트워크 면접 질문 올려주세요!

이전 질문들

skydreamer21 commented 7 months ago

CORS에 대해서 설명하고 이 문제를 어떻게 해결할 수 있는지 설명해주세요.

soun997 commented 7 months ago

WebSocket과 SSE(Server-Sent Events)에 대해 설명해주세요, 각각은 어떤 곳에서 활용할 수 있을까요?

BaeYoungSuk commented 7 months ago

HTTP를 버전 별로 설명해주세요.

rt3310 commented 7 months ago

hls에 대해 설명해주세요

BaeYoungSuk commented 7 months ago

CORS에 대해서 설명하고 이 문제를 어떻게 해결할 수 있는지 설명해주세요.

CORS란 Cross-Origin HTTP 요청을 제한하는 것을 의미합니다. Cross-Origin이란 프로토콜, 도메인, 포트 번호 중 한 가지라도 다른 경우를 의미합니다.

이를 해결하기 위해선 프록시 서버를 이용하거나 서버에서 Access-Control-Allow-Origin 헤더를 세팅할 수 있습니다.

WebSocket과 SSE(Server-Sent Events)에 대해 설명해주세요, 각각은 어떤 곳에서 활용할 수 있을까요?

웹소켓과 SSE 모두 실시간으로 이벤트를 전송하는 웹 기술입니다. SSE는 단방향이며, 웹소켓은 양방향이라는 차이가 있습니다.

SSE는 주가 업데이트나 실시간 알림 메시지에 적합하고, 웹소켓은 실시간 채팅 등에 적합합니다.

HTTP를 버전 별로 설명해주세요.

HTTP/0.9

HTTP/1.0

HTTP/1.1

HTTP/2.0

HTTP/3.0

HLS에 대해 설명해주세요

비디오 스트리밍 프로토콜입니다. 비디오 파일을 다운로드할 수 있는 HTTP 파일 조각으로 나누고 HTTP 프로토콜을 이용하여 전송합니다.

모든 인터넷 연결 장치가 HTTP를 지원하기 때문에 간단하게 실행할 수 있다는 장점이 있습니다.

rt3310 commented 7 months ago

CORS에 대해서 설명하고 이 문제를 어떻게 해결할 수 있는지 설명해주세요.

CORS(Cross-Origin Resource Sharing)는 출처가 다른 자원들을 공유한다는 뜻으로, 한 출처에 있는 자원에서 다른 출처에 있는 자원에 접근하도록 하는 개념입니다. 보통 브라우저는 SOP, 즉 동일 출처 정책, 동일한 출처에서만 리소스를 공유할 수 있도록 하고 있습니다. 때문에 다른 출처에서 리소스를 가져온다면 CORS 정책을 활성화해야 합니다. 사실 출처가 다른 두 애플리케이션이 자유로이 소통할 수 있는 환경은 꽤 위험한 환경입니다. 만일 제약이 없다면, 해커가 CSRF(Cross-Site Request Forgery)나 XSS(Cross-Site Scripting) 등의 방법을 이용해서 우리가 만든 애플리케이션에서 해커가 심어놓은 코드가 실행하여 개인 정보를 가로챌 수 있습니다. 하지만 보안이 중요해도 개발을 하다 보면 기능상 어쩔 수 없이 다른 출처 간의 상호작용을 해야 하는 케이스도 있으며, 또한 실무적으로 다른 회사의 서버 API를 이용해야 하는 상황도 존재합니다. 따라서 이와 같은 예외 사항을 두기 위해 CORS 정책을 허용하는 리소스에 한해 다른 출처라도 받아들인다는 것입니다. 이를 허용하기 위해서는 서버에서 Access-Control-Allow-Origin 헤더에 허용되는 Origin목록을 설정하여 응답하게 해야합니다.

WebSocket과 SSE(Server-Sent Events)에 대해 설명해주세요, 각각은 어떤 곳에서 활용할 수 있을까요?

웹소켓은 하나의 TCP 접속에 전이중 통신 채널을 제공하는 컴퓨터 통신 프로토콜입니다. 웹소켓은 HTTP 포트 80과 443 위에 동작하도록 설계되었으며 HTTP 프록시 및 중간 층을 지원하도록 설계되었으므로 HTTP 프로토콜과 호환이 됩니다. 또한 HTTP 폴링과 같은 반이중방식에 비해 더 낮은 부하를 사용하고 서버와 클라이언트 간의 실시간 데이터 전송을 가능하게 합니다. SSE는 Server Sent Event의 약어로 HTTP 연결을 통해 서버의 데이터를 실시간으로, 지속적으로 푸시하는 기술입니다. 초기에 연결이 수립되면 서버가 클라이언트에 지속적으로 데이터를 전송할 수 있습니다. 보통 연결을 맺고 이벤트 스트림을 수신하기 위해 서버에서 API를 제공합니다. SSE의 MIME 유형은 text/event-stream 유형입니다. SSE는 웹 표준으로 IE를 제외한 모든 브라우저에서 지원됩니다. 이를 살펴보면 WebSocket은 대표적으로 실시간 양방향 채팅, SSE는 알람 기능 구현에 적합하게 활용될 수 있습니다.

HTTP를 버전 별로 설명해주세요.

HTTP 초기 버전에는 버전 번호가 없었습니다. HTTP/0.9는 이후 버전과 구별하기 위해 0.9로 불리게 됐습니다. HTTP/0.9는 극히 단순합니다. 요청은 단일 라인으로 구성되며 리소스에 대한 경로로 가능한 메서드는 GET이 유일했습니다. 서버에 연결되면 프로토콜, 서버 및 포트가 필요하지 않으므로 전체 URL은 포함되지 않았습니다.

HTTP/1.0 부터 각 요청 안에 버전 정보가 포함되어 전송되었습니다. 또 상태 코드가 응답의 시작 부분에 붙어 전송되어 브라우저가 요청에 대한 성공과 실패를 알 수 있고 그 결과에 대한 동작을 할 수 있게 되었습니다. HTTP/1.0에서 헤더 개념이 도입되어 메타데이터 전송이 가능해졌고, Content-Type 덕분에 일반 HTML 파일들 외에 다른 문서들을 전송할 수 있었습니다.

HTTP/1.1 부터는 표준화 작업이 진행되었습니다. 연결을 재사용할 수 있도록 하고, 파이프라이닝을 추가하여 첫번째 요청에 대한 응답이 완전히 전송되기 전에 두번째 요청 전송을 가능하게 하여 통신 지연 시간이 단축되었습니다. 또 언어, 인코딩, 타입을 포함한 컨텐츠 협상이 도입되어, 클라이언트와 서버로 하여금 교환하려는 가장 적합한 컨텐츠에 대한 합의를 할 수 있습니다.

HTTP/2 프로토콜부터는 텍스트 프로토콜이 아닌 이진 프로토콜입니다. 읽을 수도 없고 수동으로 만들 수도 없습니다. 이러한 장애물에도 불구하고, 향상된 최적화 기술을 구현할 수 있습니다. 또 다중화 프로토콜이기 때문에 동일한 연결을 통해 병렬 요청을 수행할 수 있습니다. 마지막으로 헤더를 압축하여 전송된 데이터의 중복과 오버헤드가 제거됐습니다.

hls에 대해 설명해주세요

HLS는 Http Live Streaming으로 가장 널리 사용되는 비디오 스트리밍 프로토콜입니다. HTTP 라이브 스트리밍이라 불리지만 주문형 스트리밍이자 동시에 라이브 스트리밍입니다. HLS는 비디오 파일을 다운로드할 수 있는 HTTP 파일 조각으로 나누고 HTTP 프로토콜을 이용하여 전송합니다. 클라이언트 장치는 이러한 HTTP 파일을 로드한 후 비디오로 재생합니다. HLS의 장점 중 하나는 모든 인터넷 연결 장치가 HTTP를 지원하기 때문에 전용 서버가 필요한 스트리밍 프로토콜보다 간단하게 실행할 수 있다는 것입니다. 또 다른 장점은 HLS 스트리밍은 재생에 지장을 주지 않고 네트워크 상태에 따라 비디오 품질을 높이거나 낮출 수 있다는 것입니다. 이 때문에 사용자가 비디오를 보는 중에 품질이 나빠지거나 좋아질 수 있습니다. 이 기능은 적응 비트 전송률 비디오 전송 또는 적응 비트 전송률 스티리밍이라 알려져 있으며 이 기능이 없으면 네트워크가 느려진 경우 비디오 재생이 완전히 멈출 수 있습니다. HLS는 Apple이 자사 제품에 사용하기 위해 개발했지만, 현재 다양한 장치에서 사용되고 있습니다.

soun997 commented 7 months ago

CORS에 대해서 설명하고 이 문제를 어떻게 해결할 수 있는지 설명해주세요.

CORS는 동일 오리진 정책을 유연하게 사용하기 위해 고안되었습니다. CORS는 한 도메인에서 로드된 클라이언트가 또 다른 도메인의 리소스와 상호작용할 수 있는 방법입니다.

이 때 요청을 보내는 클라이언트의 URL이 요청을 받는 서버의 액세스 가능한 Origin 목록에 존재하지 않는다면 CORS 에러가 발생합니다. 이를 해결하기 위해서는, 액세스를 허용하고자 하는 클라이언트의 URL을 서버 응답 헤더의 Access-Control-Allow-Origin 목록에 추가해주어야 합니다.

WebSocket과 SSE(Server-Sent Events)에 대해 설명해주세요, 각각은 어떤 곳에서 활용할 수 있을까요?

WebSocket은 TCP 연결 기반의 실시간 양방향 통신 프로토콜입니다. 클라이언트와 서버 모두 실시간으로 데이터를 주고받을 수 있습니다. HTTP 프로토콜과 호환이 되지만, Upgrade 헤더를 사용하여 websocket 프로토콜로 변경하는 과정이 필요합니다.

SSE는 HTTP 연결 기반의 실시간 단방향 통신 프로토콜입니다. 연결이 성립된 후, 클라이언트는 일방적으로 서버가 보낸 데이터를 받기만 합니다. 만약 연결이 끊어지더라도 프로토콜 자체에서 자동 재접속을 시도합니다.

WebSocket는 양방향 통신이 필요한 실시간 채팅 애플리케이션 등에 활용할 수 있고, SSE는 단방향 통신 만으로 충분한 서버 Push 알림을 구현하는 데에 활용할 수 있습니다.

HTTP를 버전 별로 설명해주세요.

HTTP/1.0

HTTP/1.1

HTTP/2.0

HTTP/3.0

HLS에 대해 설명해주세요

HLS는 비디오 스트리밍 프로토콜로, 비디오 파일을 여러 개의 HTTP 파일 조각으로 나누고 HTTP 프로토콜을 이용하여 전송합니다. HTTP를 이용하는 프로토콜이기 때문에 호환성이 좋고, 네트워크의 상태에 따라 비디오의 품질을 높이거나 낮출 수 있습니다.