2023. 3. 23. 16:38ㆍ기술 면접 준비
1편에 이어서 작성해 보도록 하겠습니다.
😎 웹 동작방식 / www.google.com에 접속할 때 생기는 과정을 네트워크 관점에서 설명해 주세요.
- 사용자가 브라우저에 URL을 입력
- 브라우저는 DNS를 통해 서버의 진짜 주소(IP)를 찾음
- HTTP 프로토콜을 사용하여 HTTP 요청 메시지를 생성함
- TCP/IP 연결을 통해 HTTP요청이 서버로 전송됨
- 서버는 HTTP 프로토콜을 활용해 HTTP 응답 메시지를 생성함
- TCP/IP 연결을 통해 요청한 컴퓨터로 전송
- 도착한 HTTP 응답 메시지는 웹페이지 데이터로 변환되고, 웹 브라우저에 의해 출력되어 사용자가 볼 수 있게 됨
😎 OSI 7 계층에 대해 설명해 주세요.
- 7 계층(응용 계층): 사용자와 직접 상호작용하는 응용 프로그램들이 포함된 계층
- 6 계층(표현 계층): 데이터의 형식(Format)을 정의하는 계층
- 5 계층(세션 계층): 컴퓨터끼리 통신을 하기 위해 TCP/IP 세션을 만들고 없애는 계층
- 4 계층(전송 계층): TCP와 UDP 프로토콜을 통해 통신을 활성화한다. 최종 수신 프로세스로 데이터의 전송을 담당하는 계층
- 3 계층(네트워크 계층): 패킷을 목적지까지 가장 빠른 길로 전송하기 위한 계층
- 2 계층(데이터링크 계층): 물리 계층으로 송수신되는 정보를 관리하여 안전하게 전달되도록 도와주는 역할
- 1 계층(물리 계층): 데이터를 전기 신호로 바꾸어주는 계층
😎 HTTP와 HTTPS의 차이점에 대해 설명해 주세요
HTTP는 평문 데이터를 전송하는 프로토콜이기 때문에, HTTP로 중요한 정보를 주고받으면 제 3자에 의해 조회될 수 있습니다. 이러한 문제를 해결하기 위해 HTTP에 암호화가 추가된 프로토콜이 HTTPS입니다.
HTTPS는 SSL의 껍질을 덮어쓴 HTTP라고 할 수 있습니다.
* SSL(Secure Socket Layer) : 인터넷을 통해 전달되는 정보를 보호하기 위해 개발한 통신 규약
HTTP는 원래 TCP와 직접 통신했지만, HTTPS에서 HTTP는 SSL과 통신하고 SSL이 TCP와 통신함으로써 암호화와 증명서, 안전성 보호를 이용할 수 있게 됩니다.
HTTPS에는 대칭키 암호화와 비대칭키 암호화가 모두 사용됩니다. 비대칭키 암/복호화는 비용이 매우 크기 때문에 서버와 클라이언트가 주고받는 모든 메시지를 비대칭키로 암호화하면 오버헤드가 발생할 수 있습니다.
그래서 서버와 클라이언트가 최초 1회로 서로 대칭키를 공유하기 위한 과정에서 비대칭키 암호화를 사용하고, 이후에 메시지를 주고받을 때에는 대칭키 암호화를 사용합니다. 이러한 과정을 정리하면 다음과 같습니다.
- 클라이언트(브라우저)가 서버로 최초 연결 시도를 함
- 서버는 공개키(엄밀히는 인증서, 비대칭키)를 브라우저에게 넘겨줌
- 브라우저는 인증서의 유효성을 검사하고 세션키를 발급함
- 브라우저는 세션키를 보관하며 추가로 서버의 공개키로 세션키를 암호화하여 서버로 전송함
- 서버는 개인키로 암호화된 세션키를 복호화하여 세션키를 얻음
- 클라이언트와 서버는 동일한 세션키를 공유하므로 데이터를 전달할 때 세션키로 암호화/복호화를 진행함
공개키로 암호화된 메시지는 개인키를 가지고 있어야만 복호화가 가능하기 때문에, 서버(기업)를 제외한 누구도 원본 데이터를 얻을 수 없습니다.
▶ 대칭키, 비대칭키 암호화 방식에 대해 설명해 주세요.
대칭키와 비대칭키는 양방향 암호화 방식이며,
대칭키는 암호화와 복호화에 같은 암호 키를 쓰는 알고리즘입니다.
이는 중간에 누군가 암호 키를 가로채면 암호화된 정보가 유출될 수 있다는 단점이 있는데,
이런 문제를 보완한 새로운 방식이 비대칭키(공개키)입니다.
비대칭키(공개키)는 암호화와 복호화할 때 키를 서로 다른 키로 사용하는 암호화 알고리즘입니다.
타인에게 절대 노출되어서는 안 되는 개인키(private key)와 공개적으로 개방되어 있는 공개키(public key)를 쌍으로 이룬 형태입니다.
😎 HTTP 1 vs HTTP 2
HTTP1은 기본적으로 연결당 하나의 요청/응답을 처리하여 다음과 같은 문제를 가지고 있었습니다.
- HOL(Head Of Line) Blocking (특정 응답 지연): 클라이언트의 요청과 서버의 응답이 동기화되어 지연 발생
- RTT(Round Trip TIme) 증가 (양방향 지연): 패킷 왕복 시간의 지연 발생
- 헤더 크기의 비대: 쿠키 등과 같은 메타데이터에 의해 헤더가 비대해짐
그리고 HTTP2는 다음과 같은 기술을 사용하여 HTTP1의 성능 문제를 해결하였습니다.
- Multiplexed Streams: 하나의 커넥션으로 여러 개의 메시지를 동시에 주고받을 수 있음
- Stream Prioritization: 요청 온 리소스 간의 의존관계를 설정하여 먼저 응답해야 하는 리소스를 우선적으로 반환함
- Header Compression: 헤더 정보를 HPACK 압축 방식을 이용하여 압축 전송함
- Server Push: HTML문서상에 필요한 리소스를 클라이언트 요청 없이 보내줄 수 있음
😎 GET과 POST의 차이
▶ 멱등이란?
멱등의 사전적 정의는 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미합니다.
GET은 리소스를 조회한다는 점에서 여러 번 요청하더라도 응답이 똑같을 것이고, 반대로
POST는 리소스를 새로 생성하거나 업데이트할 때 사용되기 때문에 멱등이 아니라고 볼 수 있습니다.
😎 Connection Timeout과 Read Timeout의 차이에 대해 설명해 주세요.
서버 자체에 클라이언트가 어떤 사유로 접근을 실패했을 시 적용되는 것이 Connection Timeout입니다.
즉, 접근을 시도하는 시간제한이 Connection Timeout 되는 것을 말합니다.
클라이언트가 서버에 접속을 성공했으나 서버가 로직을 수행하는 시간이 너무 길어 제대로 응답을 못 준 상태에서 클라이언트가 연결을 해제하는 것이 Read Timeout입니다.
이 경우는 클라이언트는 해당 상황을 오류로 인지하고, 서버는 계속 로직을 수행하고 있어 성공으로 인지해
양 사이드 간 싱크가 맞지 않아 문제가 발생할 확률이 높습니다.
😎 공인(public) IP와 사설(private) IP의 차이에 대해 설명해 주세요.
- 공인 IP는 ISP(인터넷 서비스 공급자)가 제공하는 IP 주소이며, 외부에 공개되어 있는 IP주소입니다.
- 사설 IP는 일반 가정이나 회사 내 등에 할당된 네트워크 IP 주소입니다.
- 사설 IP 주소만으로는 인터넷에 직접 연결할 수 없고, 라우터를 통해 1개의 공인 IP를 할당하고, 라우터에 연결된 개인 PC는 사설 IP를 각각 할당받아 인터넷에 접속할 수 있습니다.
😎 TCP와 UDP는 왜 나오게 됐는가?
- IP의 역할은 Host to Host (장치 to 장치)만을 지원한다. 장치에서 장치로 이동은 IP로 해결되지만, 하나의 장비 안에서 수많은 프로그램들이 통신을 할 경우에는 IP만으로는 한계가 있다.
- 또한, IP에서 오류가 발생한다면 ICMP에서 알려준다. 하지만 ICMP는 알려주기만 할 뿐 대처를 못하기 때문에 IP보다 위에서 처리를 해줘야 한다.
* ICMP : 인터넷 제어 메시지 프로토콜로 네트워크 컴퓨터 위에서 돌아가는 운영체제에서 오류 메시지를 전송받는데 주로 쓰임
- 1번을 해결하기 위하여 포트 번호가 나오게 됐고, 2번을 해결하기 위해 상위 프로토콜인 TCP와 UDP가 나오게 되었다.
▶그렇다면 TCP와 UDP가 어떻게 오류를 해결하는가?
- TCP
- 데이터의 분실, 중복, 순서가 뒤바뀜 등을 자동으로 보정해 줘서 송수신 데이터의 정확한 전달을 할 수 있도록 해준다.
- UDP
- IP가 제공하는 정도의 수준만을 제공하는 간단한 IP 상위 계층의 프로토콜이다. TCP와는 다르게 에러가 날 수도 있고, 재전송이나 순서가 뒤바뀔 수도 있어서 이 경우, 애플리케이션에서 처리하는 번거로움이 존재한다.
▶ 그럼, UDP는 왜 사용할까?
- UDP의 결정적인 장점은 데이터의 신속성이다. 데이터의 처리가 TCP보다 빠르다.
- 주로 실시간 방송과 온라인 게임에서 사용된다. 네트워크 환경이 안 좋을 때, 끊기는 현상을 생각하면 된다.
▶ DNS(Domain Name Service)에서 UDP를 사용하는 이유
DNS는 데이터를 교환하는 경우다.
이때, TCP를 사용하게 되면, 데이터를 송신할 때까지 세션 확립을 위한 처리를 하고, 송신한 데이터가 수신되었는지 점검하는 과정이 필요하므로, Protocol overhead가 UDP에 비해서 큼.
DNS는 Application layer protocol임.
모든 Application layer protocol은 TCP, UDP 중 하나의 Transport layer protocol을 사용해야 함.
(TCP는 reliable, UDP는 not reliable임)
DNS는 reliable 해야 할 것 같은데 왜 UDP를 사용할까?
- TCP가 3-way handshake를 사용하는 반면, UDP는 connection을 유지할 필요가 없음.
- DNS request는 UDP segment에 꼭 들어갈 정도로 작음.
- UDP는 not reliable이나, reliability는 application layer에 추가될 수 있음. (Timeout 추가나, resend 작업을 통해)
DNS는 UDP를 53번 port에서 사용함.
그러나 TCP를 사용할 때가 있다!
크기가 512 bytes(UDP 제한)이 넘을 때나 응답을 못 받은 경우, TCP를 사용해야 한다.
😎 로드 밸런싱(Load Balancing)
둘 이상의 CPU or 저장장치와 같은 컴퓨터 자원들에게 작업을 나누는 것을 말합니다.
모든 트래픽을 감당하기엔 1대의 서버로는 부족하다. 대응 방안으로 하드웨어의 성능을 올리거나(Scale-up) 여러 대의 서버가 나눠서 일하도록 만드는 것(Scale-out)이 있다.
하드웨어 향상 비용이 더욱 비싸기도 하고, 서버가 여러 대면 무중단 서비스를 제공하는 환경 구성이 용이하므로 Scale-out이 효과적이다. 이때 여러 서버에게 균등하게 트래픽을 분산시켜 주는 것이 바로 로드 밸런싱이다.
▶ 로드 밸런서란?
클라이언트와 서버 사이에 두고, 부하가 일어나지 않도록 여러 서버에 분산시켜 주는 방식이다. 서비스를 운영하는 사이트의 규모에 따라 웹 서버를 추가로 증설하면서 로드 밸런서로 관리해 주면 웹 서버의 부하를 해결할 수 있다.
▶ 로드 밸런서 장애 대비 방법
서버를 분배하는 로드 밸런서에 문제가 생길 수 있기 때문에 로드 밸런서를 이중화하여 대비한다.
😎 Blocking/Non-blocking & Synchronous/Asynchronous
Blocking/Non-blocking
블록/논블록은 간단히 말해서 호출된 함수가 호출한 함수에게 제어권을 건네주는 유무의 차이라고 볼 수 있다.
함수 A, B가 있고, A 안에서 B를 호출했다고 가정해 보자. 이때 호출한 함수는 A고, 호출된 함수는 B가 된다. 현재 B가 호출되면서 B는 자신의 일을 진행해야 한다. (제어권이 B에게 주어진 상황)
- Blocking : 함수 B는 내 할 일을 다 마칠 때까지 제어권을 가지고 있는다. A는 B가 다 마칠 때까지 기다려야 한다.
- Non-blocking : 함수 B는 할 일을 마치지 않았어도 A에게 제어권을 바로 넘겨준다. A는 B를 기다리면서도 다른 일을 진행할 수 있다.
즉, 호출된 함수에서 일을 시작할 때 바로 제어권을 리턴해주느냐, 할 일을 마치고 리턴해주느냐에 따라 블록과 논블록으로 나누어진다고 볼 수 있다.
Synchronous/Asynchronous
동기/비동기는 일을 수행 중인 동시성에 주목하자
아까처럼 함수 A와 B라고 똑같이 생각했을 때, B의 수행 결과나 종료 상태를 A가 신경 쓰고 있는 유무의 차이라고 생각하면 된다.
- Synchronous : 함수 A는 함수 B가 일을 하는 중에 기다리면서, 현재 상태가 어떤지 계속 체크한다.
- Asynchronous : 함수 B의 수행 상태를 B 혼자 직접 신경 쓰면서 처리한다. (Callback, Callback 오기 전까지 A는 신경 쓰지 않고 다른 일 수행 가능 )
즉, 호출된 함수(B)를 호출한 함수(A)가 신경 쓰는지, 호출된 함수(B) 스스로 신경 쓰는지를 동기/비동기라고 생각하면 된다.
비동기는 호출 시 Callback을 전달하여 작업의 완료 여부를 호출한 함수에게 답하게 된다. (Callback이 오기 전까지 호출한 함수는 신경 쓰지 않고 다른 일을 할 수 있음)
예) 햄버거집에 직접 가서 포장하고자 함
1) Blocking & Synchronous
나 : 사장님 햄버거 1번 세트 포장해 주세요
사장님 : 네 금방 되니까 잠시만요!
나 : 네
-- 사장님 작업 중--
나 : (아 언제 되지?.. 그냥 멀뚱히 서서 감자 튀기는 거 보면서 기다림)
2) Blocking & Asynchronous
나 : 사장님 햄버거 1번 세트 포장해 주세요
사장님 : 네 금방 되니까 잠시만요!
나 : 네
-- 사장님 작업 중--
나 : (언제 되는지 안 궁금함, 잠시만 이래서 다 될 때까지 서서 붙잡힌 상황이고 다른 일 수행 가능)
3) Non-blocking & Synchronous
나 : 사장님 햄버거 1번 세트 포장해 주세요
사장님 : 네~ 주문 밀려서 시간 좀 걸리니까 볼일 보시다 오세요
나 : 네
-- 사장님 작업 중--
(5분 뒤) 나 : 제 것 나왔나요?
사장님 : 아직이요
(10분 뒤) 나 : 제 것 나왔나요?
사장님 : 아직이요ㅠ
(15분 뒤) 나 : 제 것 나왔나요?
사장님 : 아직이요ㅠㅠ
4) Non-blocking & Asynchronous
나 : 사장님 햄버거 1번 세트 포장해 주세요
사장님 : 네~ 주문 밀려서 시간 좀 걸리니까 볼일 보시다 오세요
나 : 네
-- 사장님 작업 중--
나 : (앉아서 다른 일 하는 중)...
사장님 : 주문하신 햄버거 1번 세트 나왔습니다
나 : 잘 먹겠습니다!
관련 포스팅
[기술면접] 네트워크 - 2/2
참고:
https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Network
https://gyoogle.dev/blog/computer-science/network/OSI%207%EA%B3%84%EC%B8%B5.html
'기술 면접 준비' 카테고리의 다른 글
[운영체제] 프로세스와 스레드 - 2/5 (0) | 2023.04.02 |
---|---|
[운영체제] 운영체제는 프로그램이다?! - 1/5 (0) | 2023.03.31 |
[기술면접] 네트워크 - 1/2 (0) | 2023.03.23 |
[기술면접] 데이터베이스 (0) | 2023.03.23 |
[기술면접] JAVA - 4/4 (0) | 2023.03.03 |