네트워크
1. TCP
1) TCP의 특징을 설명해 주세요.
TCP는 연결형 서비스로, 데이터를 보내기 전에 송신부와 수신부 간 연결을 확인합니다. 이 과정에서 패킷을 어떤 가상 회선으로 보낼 것인지 결정해 가상 회선 방식으로 패킷 교환이 이뤄집니다. 따라서 패킷의 전송 순서가 보장됩니다. 또한 송신부와 수신부 간에 일대일 통신이 이뤄지며 패킷 수신 여부를 확인합니다. 이는 데이터의 신뢰성을 보장하지만, 속도가 느리다는 단점이 있습니다. 이러한 특징 때문에 데이터의 신뢰성을 보장하는 HTTP 통신, 이메일 전송, 파일 전송 등에 사용됩니다.
2) TCP의 연결 및 해제 과정을 설명해 주세요.
TCP의 연결은 3-way 핸드셰이킹으로, 연결 해제는 4-way 핸드 셰이킹으로 이뤄집니다.
3-way 핸드셰이킹하면
1) 클라이언트에서 서버에 연결 요청을 위해 SYN 메시지를 보내게 됩니다.
2) 서버에서는 클라이언트의 요청에 응하기 위해 ACK 메시지와 함께 연결을 확인하기 위한 SYN 메시지를 보냅니다.
3) 해당 메시지를 받은 클라이언트는 다시 ACK 메시지를 보내서 연결이 이루어 집니다.
반면 4-way 핸드셰이킹은
1) 클라이언트에서 서버에 연결 해제 요청인 FIN 메시지를 보냅니다.
2) 서버는 응답으로 ACK 메시지를 보내고 애플리케이션 종료와 같이 연결 종료를 위한 처리를 진행합니다.
3) 연결 종료가 준비되면 서버에서 클라이언트로 FIN 메시지를 보내고
4) 클라이언트는 이에 대한 응답으로 ACK 메시지를 보내서 연결 해제가 이뤄집니다.
ACK, SYN란 ACK란 Acknowledgment(승인)의 약자로 요청을 확인했다는 응답을 뜻한다. SYN이란 Synchronize(동시에 발생하다) Sequence Number의 약자이다. 연결이 이루어지도록 요청하는 의미이다.
3) TCP에서 데이터의 신뢰성을 보장하기 위한 방법을 설명해 주세요.
TCP에서는 데이터의 신뢰성을 보장하기 위해 흐름 제어, 혼잡 제어, 오류 제어를 합니다.
첫번째로 흐름 제어는 데이터 송신부와 수신부 간에 데이터 처리 속도의 차이로 인한 데이터 손실을 방지하기 위한 방법입니다. 흐름제어를 구현하는 방법에는 정지-대기와 슬라이딩 윈도우 방식이 있습니다.
두번째로 혼잡 제어는 데이터 송신부의 데이터 전달 속도와 네트워크 속도의 차이로 인한 데이터 손실을 방지하기 위한 방법입니다. AIMD, 느린 시작 등이 혼잡 제어 방식에 해당됩니다.
마지막으로 오류 제어는 데이터에서 오류 및 유실 발생 시 재전송을 통해 데이터의 신뢰성을 보장하기 위한 방식입니다. 정지-대기, Go-Back-NARQ, Selective-Repeat ARQ가 해당합니다.
4) UDP의 특징을 설명해 주세요.
UDP는 송신부와 수신부의 연결이 보장되지 않는 비연결형 서비스로, 패킷을 하나의 회선이 아닌 서로 다른 회선으로 보낼 수 있는 데이터그램 패킷 교환 방식을 이용합니다. 그래서 송신부에서 보낸 패킷의 순서와 수신부에서 받은 패킷의 순서가 다를 수 있습니다(패킷순서 보장 안됨). 또한 패킷의 수신 여부를 확인하지 않습니다. 따라서 데이터의 신뢰성은 낮지만, 전송 속도가 빠릅니다.
5) TCP와 UDP의 차이점을 설명해 주세요.
TCP와 UDP는 전송 프로토콜이지만 다른 특징을 가지고 있습니다. TCP는 데이터의 신뢰성이 높은 연결형 서비스로, 패킷을 하나의 가상 회선으로 전송합니다. 따라서 패킷의 전송 순서를 보장하고 패킷의 수신 여부를 확인합니다. 반면 UDP는 비연결형 서비스로, 데이터그램 방식을 이용해 패킷을 교환하기 때문에 패킷의 전송 순서가 보장되지 않으며 수신 여부 또한 확인하지 않습니다. 따라서 TCP는 신뢰성이 높고 속도가 느린 반면 UDP는 신뢰성이 낮고 속도가 빠릅니다.
6) UDP에서 오류 검출 방법을 설명해 주세요.
UDP에는 데이터의 오류 검출을 위한 방법으로 체크섬이 있습니다. 체크섬은 송신부에서 데이터의 무결성을 확인할 수 있게 UDP 헤더, IP 헤더, 데이터 등의 값을 더한 뒤 보수를 취해 구하는 값입니다. 송신부가 구한 체크섬을 UDP 헤더에 포함해 수신부로 보내면, 수신부에서 체크섬을 이용해 데이터의 무결성을 확인합니다. 하지만 체크섬을 이용하는 것은 선택 사항이고 체크섬을 이용해도 잘못된 데이터가 전송될 수도 있다는 점을 고려해야 합니다.
2. HTTP
1) HTTP에 대해 설명해 주세요.(HyperText Transfer Protocol)
HTTP는 데이터 전송을 위한 클라이언트-서버 구조의 요청/응답 프로토콜로, TCP/IP 4계층에서 응용 계층에 속합니다. HTTP는 비연결성과 무상태라는 두가지 특징이 있습니다.
첫번째로 비연결성은 클라이언트의 요청에 대해 서버가 응답한 후 연결을 끊는다는 것입니다. 이를 보완하기 위해 HTTP Keep Alive를 사용합니다.
두번째로 무상태는 서버에서 클라이언트의 상태에 대한 데이터를 저장하지 않는다는 것입니다. 이러한 단점을 보완하기 위해 쿠키와 세션을 사용합니다.
2) HTTP Keep Alive와 TCP Keep Alive를 설명해 주세요.
HTTP Keep Alive와 TCP Keep Alive 모두 클라이언트와 서버 간에 연결을 유지하기 위한 방법입니다.
HTTP Keep Alive는 HTTP 프로토콜의 연결을 정해진 시간동안 유지하는 방식으로, 정해진 시간이 끝나면 연결을 해제합니다.
반면 TCP Keep Alive는 3-way 핸드셰이킹으로 연결된 세견을 계속 유지하기 위한 방식으로, 일정 시간 동안 패킷 교환이 없으면 연결 유지 여부를 확인하는 패킷을 던집니다. 이에 대해 응답이 있으면 추가로 일정 시간 동안 연결을 유지합니다. 이러한 방식을 통해 클라이언트와 서버 간에 불필요한 연결과 해제의 반복을 줄일 수 있습니다.
3) 쿠키와 세션의 차이점을 설명해 주세요.
쿠키와 세션 모두 HTTP 통신의 특징인 비연결성과 무상태의 단점을 보완하기 위해 사용합니다.
쿠키는 브라우저에 저장되는 키와 값이 들어 있는 데이터 파일입니다. 이는 서버에서 클라이언트에 대한 정보를 저장하지 않아도 쿠키를 이용해 정보를 재사용할 수 있게 합니다. 예를 들어 웹사이트의 로그인 인증 정보, 온라인 쇼핑몰의 장바구니 정보 등이 있습니다.
세션은 쿠키와 비슷하게 데이터를 저장하는 방식이지만 키와 값은 클라이언트에, 데이터는 서버에 저장해서 쿠기보다 보안이 강하다는 특징이 있습니다.
4) HTTP와 HTTPS의 차이점을 설명해 주세요.
HTTP와 HTTPS는 인터넷 상에서 데이터를 송수신하기 위한 클라이언트-서버 구조의 통신 프로토콜입니다
HTTP와 달리 HTTPS에는 보안 계층의 암호화 프로토콜인 SSL/TLS가 있어서 전송하려는 데이터를 암호화해 보호할 수 있습니다. 이러한 특징은 인터넷 쇼핑이나 인터넷 뱅킹 등 민감한 정보를 사용하는 웹 사이트에서 중요한 요소입니다.
그래서 크롬, 사파리 등의 웹 브라우저에서는 SSL/TLS를 지원합니다. 이외에도 HTTP는 80번 통신 포트를 사용하지만, HTTPS는 443번 통신 포트를 사용하단다는 점이 다릅니다.
5) HTTPS에서 사용하는 암호화 방식을 설명해 주세요.
HTTPS는 보안 계층의 암호화 프로토콜인 SSL/TLS에서 암호화가 이뤄집니다. 사용하는 암호화 방식으로는 대칭 키 암호화 방식과 공개 키 암호화 방식이 있습니다.
대칭 키 암호화 방식은 데이터의 송신자와 수신자 모두 대칭 키를 이용해 데이터를 암호화 및 복호화하는 방식입니다.
반면, 공개 키 암호화 방식은 공개 키로 데이터를 암호화하고 비밀 키로 데이터를 복호화하는 방식입니다.
SSL/TLS에서는 대칭 키로 데이터를 암호화하는데, 이때 대칭 키가 공개되므로 데이터가 유출되는 것을 막기 위해 대칭 키를 공개 키 암호화 방식으로 암호화합니다.
6) 사용자가 URL을 입력한 후 화면이 출력되기까지의 과정을 설명해 주세요.
사용자가 URL을 입력하면 웹 브라우저에서는 URL의 유효성을 판단합니다.
URL이 유효하지 않으면 웹 브라우저는 입력한 내용을 검색하게 되고, URL이 유효하면 DNS 서버에 연결할 IP를 요청합니다.
DNS 서버에서 IP 주소를 받으면 3-way 핸드셰이킹으로 TCP 통신을 위한 가상 회선을 연결합니다.
HTTP 연결 요청을 서버에 보내면, 이에 대한 응답을 받고 웹페이지 화면을 출력합니다.
3. REST API
1) REST API란?
REST API는 Representational State Transfer(REST) 아키텍처 스타일을 따르는 API입니다.
REST는 웹의 기존 기술과 프로토콜을 기반으로 하여 설계된 아키텍처 스타일로, 리소스를 URI로 식별하고 HTTP 메서드(GET, POST, PUT, DELETE 등)를 사용하여 리소스에 대한 CRUD(Create, Read, Update, Delete) 작업을 수행합니다.
REST API는 주로 클라이언트와 서버 간의 데이터 교환을 효율적으로 수행하는 데 사용됩니다
2) REST API의 특징을 말해 주세요.
REST API의 주요 특징은 다음과 같습니다:
무상태성: 서버는 각 요청을 독립적으로 처리하며, 이전 요청의 상태를 저장하지 않습니다. 클라이언트의 모든 정보는 각 요청에 포함되어야 합니다.
캐시 가능: HTTP 프로토콜을 사용하여 클라이언트는 응답을 캐시할 수 있습니다. 이를 통해 네트워크 트래픽을 줄이고 성능을 향상시킬 수 있습니다.
일관된 인터페이스: URI를 통해 리소스를 식별하고, HTTP 메서드를 사용하여 리소스를 조작하는 일관된 인터페이스를 제공합니다.
계층화된 시스템: 클라이언트는 중간 서버(프록시, 게이트웨이 등)를 통해 서버와 통신할 수 있으며, 각 계층은 독립적으로 확장 및 관리될 수 있습니다.
클라이언트-서버 구조: 클라이언트와 서버가 서로 독립적으로 작동하며, 클라이언트는 사용자 인터페이스와 사용자 경험에 집중하고, 서버는 데이터 저장과 비즈니스 로직을 처리합니다.
3) REST의 장단점을 설명해 주세요.
REST는 웹에서 데이터를 주고받기 위한 아키텍처입니다. URL로 자원을 명시하고, HTTP 메서드로 CRUD 연산을 합니다. 그리고 HTTP를 따르는 모든 플랫폼에서 별도의 인프라 구축 없이 REST를 사용할 수 있습니다. 그래서 웹 외에도 iOS, 안드로이드 등 다양한 플랫폼과 디바이스가 등장하면서 범용으로 사용할 수 있다는 장점이 부각되고 있습니다. 하지만 HTTP 메서드를 사용해야 해서 사용 가능한 연산이 한정적이라는 단점이 있습니다.
4) GET에 바디를 넣어서 보내면 나타날 결과를 설명해 주세요.
GET은 바디가 필요하지 않은 메서드지만, REST API의 서버를 어떻게 구현했는지에 따라 다양한 결과가 나타날 것 같습니다.
첫번째로 GET에 대한 요청이 왔을 때 바디를 무시하고 자원에 대한 데이터를 Read 할 수 있습니다.
두번째로 GET에 바디를 넣어 요청을 보냈을 때 예외 처리를 할 수 있습니다. 이는 HTTP 메서드의 명시적 사용을 위한 방법입니다.
마지막으로 바디가 있으면 POST와 동일하게 처리하는 경우가 있을 것 같습니다.
이런 경우에는 데이터를 Read하는 것이 아니라 Create하게 처리할 것 같습니다.
5) POST와 PUT의 차이점을 설명해 주세요.
POST는 Create 연산을 하는 메서드입니다. 메시지 바디에 있는 데이터를 추가할 때 사용되며, 여러 번 요청하면 요청한 횟수만큼 데이터가 생기기 때문에 멱등하지 않다는 특징이 있습니다. 또한 HTTP의 헤더 중 Cache-Control 또는 Expires가 제대로 정의되어 있으면 캐싱이 가능합니다.
PUT은 Update 연산을 하는 메서드로, 특정 데이터를 수정하는 요청을 합니다. 따라서 요청을 한 번 보내는 것과 같은 요청을 여러 번 보내는 것이 같은 결과를 가져오기 때문에 멱등하다고 합니다. 하지만 PUT은 캐싱할 수 없습니다.
멱등하다: 여러 번 같은 요청을 보내도 결과가 달라지지 않는 것.
4. JSON
1) JSON 구조는 어떻게 생겼나요?
JSON은 키-값 쌍으로 데이터를 표현하며, 중첩된 구조도 지원합니다.
2) XML과 JSON 의 차이점에 대해 설명해주세요.
XML과 JSON은 둘 다 데이터 교환에 사용되는 형식이지만, 몇 가지 주요 차이점이 있습니다:
구조: JSON은 키-값 쌍을 사용하는 구조적 데이터 형식으로, 객체와 배열을 사용하여 데이터를 표현합니다. 반면, XML은 계층적 구조를 가지며, 태그를 사용하여 데이터를 표현합니다.
가독성: JSON은 더 간결하고 읽기 쉬운 형식을 가지고 있어 사람과 기계 모두에게 가독성이 높습니다. XML은 태그가 많아 구조가 복잡해지기 쉽습니다.
데이터 타입: JSON은 문자열, 숫자, 배열, 객체, 불리언 등의 데이터 타입을 지원합니다. XML은 모든 데이터를 문자열로 표현하며, 추가적인 파싱이 필요할 수 있습니다.
사용 용도: JSON은 주로 웹 애플리케이션에서 클라이언트와 서버 간의 데이터 교환에 사용됩니다. XML은 데이터 교환뿐만 아니라 문서 형식, 설정 파일 등 다양한 용도로 사용됩니다.
파싱: JSON은 대부분의 프로그래밍 언어에서 쉽게 파싱할 수 있는 내장 라이브러리를 제공합니다. XML은 파싱을 위해 더 복잡한 라이브러리나 도구가 필요할 수 있습니다.

네트워크 추가 질문
OSI 7계층과 TCP/IP 4계층
OSI 7계층과 TCP/IP 4계층의 차이점에 대해서 설명해보세요.
OSI 7계층과 그 존재이유, TCP/IP 계층에 대해 설명해보세요.
웹 서버 소프트웨어(Apache, Nginx)는 OSI 7계층 중 어디서 작동하는지 설명해보세요.
웹 서버 소프트웨어(Apache, Nginx)의 서버 간 라우팅 기능은 OSI 7계층 중 어디서 작동하는지 설명해보세요.
쿠키와 세션
세션을 사용하면 좋은데 왜 쿠키를 사용할까요?
쿠킹와 세션의 차이점은 무엇인가요?
요청이 많이 몰렸을 때, 어떻게 처리하는 것이 좋을까요?
JWT 구조에 대해서 설명해주세요.
쿠키와 JWT의 차이점
쿠키와 세션/ 캐시의 차이점
세션기반 인증과 토큰 기반 인증의 차이에 대해 설명해주세요.
REST API
HTTP의 4가지 method를 설명해주세요.
GET과 POST의 차이
PUT과 PATCH의 차이
REST method의 5가지 중 멱등성을 보장하는 메서드는 무엇이고 이유는 무엇인가요?
REST와 RESTful의 정의와 그에 대한 설명해 주세요.
어떠한 경우가 RESTful하지 못한 것인지 설명해주세요.
RESTful 웹 서비스의 단점은 무엇인가요?
DNS와 웹 통신 흐름
웹 통신의 큰 흐름을 설명해주세요. ( https://www.google.com 을 접속할 때 일어나는 일 )
DNS 서버에 대해 설명해주세요.
DNS를 통한 도메인 이름 구조 기반의 검색과정을 설명해주세요.
도메인과 URL의 차이를 설명해주세요.
URL과 URI의 차이점을 설명해주세요.
공인IP와 사설IP차이를 설명해주세요.
TCP와 UDP
TCP와 UDP의 특징과 차이점
TCP 3,4 way handshake의 단계수 차이가 나는 이유
ISN을 0부터 시작하지 않고 난수로 생성하여 설정하는 이유
3,4 way handshaking의 과정
Connection Timeout과 Read Timeout의 차이점
TIME WAIT의 존재 이유
TCP 통신에서 지연 패킷이 발생했을 때 서버는 이것을 어떻게 처리하나요?
만약 Server에서 FIN 플래그를 전송하기 전에 전송한 패킷이 Routing 지연이나 패킷 유실로 인한 재전송 등으로 인해 FIN 패킷보다 늦게 도착하는 상황이 발생하면 어떻게 될까요?
UDP는 항상 신뢰성을 보장하지 않나요?
프록시 서버
프록시 서버가 필요한 이유
프록시 서버 사용 시 페이지의 내용과 데이터 값이 계속 바뀌면?
프록시 서버를 설명하고, 사용 사례에 대해 설명해보세요.
VPN과 프록시의 차이를 설명해주세요.
HTTP
HTTP의 비연결성을 해결하기 위한 방법
HTTP의 무상태 해결법
HTTP 프로토콜이란 무엇인지 설명해주세요.
HTTP 메소드의 멱등성에 대해 설명해주세요.
http 0.9버전에서 가장 큰 특징
HTTP와 HTTPS 통신 방식의 차이
HTTP와 HTTPS의 차이를 설명해보고, HTTP를 사용하는 REST API 서버에게 HTTPS를 사용하게 하기 위해서는 어떠한 절차를 거쳐야 하는지 아는 대로 설명해보세요.
HTTPS에 대해서 설명하고 SSL(TLS) Handshake에 대해서 설명해보세요.
대칭키와 비대칭키의 차이점
TTL이란?
HTTP1의 문제점과 이를 해결하기 위해 HTTP2가 취한 방법
www.google.com을 주소창에 쳤을 때 화면이 나오기까지의 과정을 네트워크 관점으로 설명해 주세요.
HTTP status code에 대해서 설명해 주세요.
HTTP/3이 나왔는데 이게 어떤 문제점을 해결하기 위해 등장했고, 그에 따른 QUIC 부분에 대해서 TCP의 문제점을 어떻게 해결했는지 설명해주세요.
네트워크 기기
라우터와 공유기의 차이점
SOP와 CORS
SOP의 개념은 무엇이고 CORS가 나오게 된 배경과 개념을 설명해주세요.
CORS란 무엇이며 이것에 대하여 설명해보세요.
왜 프리플라이트 요청을 해야할까요?
간단한 요청과 인증된 요청에서 Access-Control-Allow-Origin의 차이점은 무엇인가요?
L4, L7 스위치, 로드밸런싱
로드밸런서의 개념과 프록시의 개념과 차이점
네트워크 스위치에 대해 설명해주세요.
로드밸런서의 역할 3가지
로드 밸런싱 알고리즘 중 정적 알고리즘, 동적 알고리즘 하나씩 설명해주세요.
로드밸런싱에 대해 설명해주세요.
L4 로드밸런싱과 L7 로드밸런싱의 장단점을 설명해주세요.
스위치 LB에서 문제점
섬세한 밸런싱을 가능하게 하기 위한 해결방안
로드밸런싱 알고리즘 중 라운드로빈 방식의 장단점을 설명해주세요.
Last updated