부시기 시리즈/취업 부시기 시리즈

CS 면접 부시기 - 네트워크

Benn.dev 2021. 7. 5. 19:44

웹 통신의 큰 흐름 : https://www.google.com/ 을 접속할 때 일어나는 일은

더보기

⭐️ OSI 7 계층과도 연관 지어 설명하라는 질문을 받을 수도 있음

 

브라우저가 URL에 적힌 값을 파싱 해서 HTTP Request Message를 만들고, OS에 전송을 합니다.

이때, Domain으로 요청을 보낼 수 없기 때문DNS Lockup을 수행합니다.

DNS Lockup 과정은 크롬의 경우 브라우저 → hosts 파일 → DNS Cache의 순서로 도메인에 매칭 되는 ip를 찾습니다.

일반적으로 설명하는 DNS Lockup은 루트 도메인 서버에서부터 서브 도메인 서버 순으로 찾게 됩니다.

이 요청은 프로토콜 스택이라는 OS에 내장된 네트워크 제어용 소프트웨어에 의해 패킷에 담기고

패킷에 제어정보를 덧붙여 LAN 어댑터에 전송하고, LAN 어댑터는 이를 전기신호로 변환시켜 송출합니다.

패킷은 스위칭 허브 등을 경유하여 인터넷 접속용 라우터에서 ISP로 전달되고 인터넷으로 이동합니다.

액세스 회선에 의해 통신사용 라우터로 운반되고 인터넷의 핵심부로 전달됩니다.

고속 라우터들 사이로 목적지까지 패킷이 흘러들어 가게 됩니다.

핵심부를 통과한 패킷은 목적지의 LAN에 도착하고, 방화벽이 패킷을 검사한 후 캐시 서버로 보내 웹 서버에 갈 필요가 있는지 검사합니다.

웹 서버에 도착한 패킷은 프로토콜 스택이 패킷을 추출하여 메시지를 복원하고 웹 애플리케이션에 넘깁니다.

애플리케이션은 요청에 대한 응답 데이터를 작성하여 클라이언트로 회송하고, 이는 전달된 방식 그대로 전송됩니다.

 

✅ ISP란? Internet Service Provider : 인터넷 서비스 제공자, 인터넷 회사

 

TCP와 UDP의 차이점에 대해서 설명해보세요

더보기

TCP는 연결 지향형 프로토콜이고 UDP는 데이터를 데이터 그램 단위로 전송하는 프로토콜입니다.

TCP는 가상 회선을 만들어 신뢰성을 보장하도록(흐름 제어, 혼잡 제어, 오류 제어) 하는 프로토콜로 따로 신뢰성을 보장하기 위한 절차가 없는 UDP에 비해 속도가 느린 편입니다.

TCP는 그래서 파일 전송과 같은 신뢰성이 중요한 서비스에 사용되고,

UDP는 스트리밍, RTP와 같이 연속성이 더 중요한 서비스에 사용됩니다.

하지만 UDP도 신뢰성을 UDP 자체에서 보장하지 않는 것뿐이지, 개발자가 직접 신뢰성을 보장하도록 할 수 있습니다.

그래서 HTTP/3은 QUIC이라는 프로토콜을 기반으로 하는데, QUIC는 UDP를 기반으로 합니다.

즉, UDP 자체는 신뢰성을 보장하지 않지만, 추가적인 정의를 통해 신뢰성을 보장받을 수 있습니다.

 

✅ RTP란? Real-Time Transport Protocol : 실시간 전송 프로토콜, IP 네트워크 상에서 오디오와 비디오를 전달하기 위한 통신 프로토콜

✅ QUIC란? Quick UDP Internet Connections : 범용 목적의 전송계층 통신 프로토콜

 

TCP 3, 4 way Handshake에 대해서 설명해보세요

더보기

⭐️ TCP가 가상 회선을 만들고 제거하는 과정에 대해서 묻는 질문이다. 실제 면접 자리에서는 보통 네트워크에 대해 설명할 때 직접 설명하는 편이라고 함

 

TCP 3way Handshake가상회선을 수립하는 단계입니다.

클라이언트는 서버에 요청을 전송할 수 있는지, 서버는 클라이언트에게 응답을 전송할 수 있는지 확인하는 과정입니다.

SYN, ACK 패킷을 주고받으며, 임의의 난수로 SYN 플래그를 전송하고, ACK 플래그에는 1을 더한 값으로 전송합니다.

정확한 순서는 SYN(n) → ACK(n + 1), SYN(m) → ACK(m + 1) 순으로 일어납니다.

임의의 난수를 지정하는 이유는 기존 요청과 구분하기 위해서입니다.

TCP 4 way HandshakeTCP 연결을 해제하는 단계로, 클라이언트는 서버에게 연결 해제를 통지하고

서버가 이를 확인하고 클라이언트에게 이를 받았음을 전송해주고 최종적으로 연결이 해제됩니다.

단, 서버에서 소켓이 닫혔다고 통지해도 클라이언트 측에서는 일정 시간 대기하는데,

혹시나 패킷이 나중에 도착할 수 있기 때문입니다.

 

✅ SYN이란? Synchronization : 동기화(연결 요청 플래그), TCP에서 세션을 성립할 때 가장 먼저 보내는 패킷. 시퀀스 번호를 임의적으로 설정하여 세션을 연결하는 데에 사용되며 초기에 시퀸스 번호를 보내게 된다.

✅ ACK란? Acknowledgement : 응답, 상대방으로부터 패킷을 받았다는 걸 알려주는 패킷, 다른 플래그와 같이 출력되는 경우도 있다. 받은 사람이 보낸 사람 시퀸스 번호에 TCP 계층에서 길이 또는 데이터 양을 더한 것과 같은 ACK를 보낸다. 일반적으로 + 1 하여 보내며 ACK 응답을 통해 보낸 패킷에 대한 성공, 실패를 판단하여 재전송하거나 다음 패킷을 전송한다.

 

HTTP와 HTTPS의 차이점에 대해서 설명해보세요

더보기

HTTP는 따로 암호화 과정을 거치지 않기 때문중간에 패킷을 가로챌 수 있고, 수정할 수 있습니다. 따라서 보안이 취약해짐을 알 수 있습니다.

이를 보완하기 위해 나온 것이 HTTPS입니다. 중간에 암호화 계층을 거쳐서 패킷을 암호화합니다.

 

HTTPS에 대해서 설명하고 SSL Handshake에 대해서 설명해보세요

더보기

HTTPS는 HTTP보안 계층을 추가한 것입니다. HTTPS는 제삼자 인증, 공개키 암호화, 비밀키 암호화를 사용합니다.

제 3자 인증믿을 수 있는 인증기관에 등록된 인증서만 신뢰하는 것이고,

공개키 암호화비밀키를 공유하기 위해 사용합니다.

비밀키 암호화통신하는 데이터를 암호화하는 데 사용합니다.

클라이언트는 TCP 3 way Handshake를 수행한 이후 Client Hello를 전송합니다.

서버는 인증서를 보냅니다. (다른 정보도 보냄)

클라이언트는 받은 인증서를 신뢰하기 위해서 등록된 인증기관인지 확인합니다.

이 인증서는 인증기관의 개인키로 암호화되어있고, 공개키로 검증할 수 있습니다. (브라우저에 내장되어있음)

클라이언트는 사이트의 정보와, 서버의 공개키를 얻을 수 있습니다.

서버의 공개키로 통신에 사용할 비밀키를 암호화해서 서버에 보냅니다.

서버는 이를 개인키로 확인하고 이후 통신은 공유된 비밀키암호화되어 통신합니다.

 

* 제삼자 인증: 인증서

* 인증기관/공개키 암호화: 인증서

* 비밀키 공유/비밀키 암호화: 통신과정

 

HTTP 메서드 중 GET과 POST의 차이점을 설명해보세요

더보기

GET 요청서버에 존재하는 정보를 요청합니다.

이때 반환되는 정보는 정보 자체가 아니라 정보의 표현입니다.

일반적으로 Request Body는 입력하지 않는 것이 일반적이며, 레거시 시스템의 경우 요청을 받아들이지 않을 수 있습니다.

캐싱을 수행하기 때문에 캐싱되지 않는 요청은 GET 요청이 맞지 않을 수도 있습니다.

POST 요청서버에 정보를 생성하는 것을 요청합니다. 과거 HTTP 통신은 POST 요청으로 데이터 삭제, 수정도 form 요청으로 같이 수행했습니다.

POST 요청은 서버의 상태를 변경시키기 때문멱등성이 유지되지 않습니다.

보통 Request Body에 요청하는 데이터를 담아 전송합니다.

 

✅ 멱등성이란? 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질

 

HTTP 메서드와 이것이 하는 역할에 대해 설명해보세요

더보기

⭐️ 보통 REST API를 설계했다면 이해할 수 있을 정도로 설명하면 된다.

OPTIONS, HEAD의 존재에 대해서는 알아만 두자.

OPTIONS해당 uri에 대해 서버가 허용하는 메서드를 확인할 때 사용합니다.

HEAD는 GET과 비슷하나 header만 가져온다.

  • GET 요청은 서버에 존재하는 데이터를 요청하는 것입니다. CRUD로 따지면 R입니다.
  • POST 요청은 서버에 데이터를 생성하는 것을 요청합니다. CRUD로 따지면 C입니다.
  • PUT 요청은 서버에 존재하는 데이터를 수정하거나 존재하지 않으면 생성합니다. CRUD로 따지면 C, U입니다.
  • DELETE 요청은 서버에 데이터를 제거할 것을 요청합니다. 존재하지 않아도 동일하게 동작합니다. CRUD로 따지면 D입니다.
  • PATCH 요청은 서버에 존재하는 데이터를 일부 수정합니다. CRUD로 따지면 U입니다.

 

RESTful 이란 무엇이며, 이것에 대해 아는 대로 설명해보세요

더보기

⭐️ REST API를 설계했다면 충분히 물어볼만한 질문이다.

 

HTTP URI를 통해 자원을 표시하고 HTTP Method를 통해 자원에 대한 처리를 표현합니다.

사람이 읽을 수 있는 API라는 것이 특징입니다.

HTTP를 사용하기 때문에 HTTP의 특성을 그대로 반영합니다. 또한 별도의 인프라 구축이 필요 없습니다.

단점으로는 명확한 표준이 존재하지 않는다는 점, RESTful을 완전히 만족하는 API를 만들기는 매우 까다롭다는 점, REST API가 분산 환경에 적합하지 않다는 점이 있습니다. (멱등성을 보장하기 힘들기 때문에)

HATEOAS라는 개념이 있는데, 동적인 API를 제공할 수 있게 됩니다. (모든 관련된 동작을 URI를 통해 알려줍니다.)

즉, 클라이언트가 API의 변화에 일일이 대응하지 않아도 된다는 장점을 가져옵니다.

 

✅ HTTP의 특성이란? https://victorydntmd.tistory.com/286

✅ HATEOAS란? https://pjh3749.tistory.com/260

 

CORS란 무엇이며 이것에 대해서 설명해보세요

더보기

CORS는 웹 개발을 하다가 흔히 만날 수 있는 이슈입니다.

 

대게는 프런트엔드 개발 시로컬에서 API 서버에 요청을 보낼 때 흔하게 발생합니다.

서로 다른 도메인 간 자원을 공유하는 것을 뜻합니다.

대부분의 브라우저에서는 이를 기본적으로 차단하며, 서버 측에서 헤더를 통해 사용 가능한 자원을 알려줍니다.

preflight request실제 요청을 보내도 안전한지 판단하기 위해 사전에 보내는 요청입니다.

OPTIONS 메서드로 요청하며 CORS를 허용하는지 확인합니다.

CORS가 허용된 웹서버라면 사용가능한 리소스를 헤더에 담아 응답합니다.

✅ CORS란? 교차 출처 리소스 공유, https://developer.mozilla.org/ko/docs/Web/HTTP/CORS

✅ Preflight Request란? Actual 요청 전에 인증 헤더를 전송하여 서버의 허용 여부를 미리 체크하는 테스트 요청이다.

 

OSI 7 계층과 그 존재 이유, TCP/IP 4 계층에 대해 설명해보세요

더보기

OSI 7 계층은 네트워크 통신을 구성하는 요소들을 7개의 계층으로 표준화한 것입니다.

물리 계층, 데이터 링크 계층, 네트워크 계층, 전송 계층, 세션 계층, 표현 계층, 응용 계층으로 이뤄져 있습니다.

이렇게 표준화하는 것의 장점은 통신이 일어나는 과정을 단계별로 파악할 수 있어, 문제가 발생하면 해당 문제를 해결하기 용이해집니다.

실제로 우리가 대부분 사용하는 네트워크는 TCP/IP 4 계층입니다.

네트워크 액세스, 인터넷 계층, 전송 계층, 응용 계층으로 이뤄져 있습니다.

통신에 실제로 사용되는 계층이고 1,2 계층이 1 계층, 5,6,7 계층이 4 계층으로 운영됩니다.

 

✅ OSI 7 계층에 대한 자세한 포스트 https://shlee0882.tistory.com/110

✅ TCP/IP 4 계층에 대한 자세한 포스트 https://hahahoho5915.tistory.com/15

 

레퍼런스

더보기