네트워크 CS 인터뷰

똘맹·2025년 6월 26일

CS 스터디

목록 보기
20/20

TCP가 연결하는 방식, 연결을 끊는 방식에 대해 설명해보세요

TCP는 3-way 핸드셰이크로 연결하고, 4-way 핸드셰이크로 연결을 끊습니다.
클라이언트가 SYN을 보내고, 서버가 SYN-ACK으로 응답한 뒤, 클라이언트가 ACK을 보내 연결합니다.
연결을 끊을 때는 FIN과 ACK을 주고 받습니다. 클라이언트 FIN 전송 -> 서버 ACK 전송 -서버 close wait-> 서버 FIN 전송 -> 클라이언트 ACK 전송



Same-Origin Policy가 무엇인가요

브라우저 보안 정책으로, 도메인, 포트, 프로토콜이 모두 같을 때만 리소스를 공유할 수 있도록 제한합니다. 이를 통해 악의적인 스크립트가 사용자 정보를 탈취하지 못하게 막으며, 다른 출처와 통신하려면 CORS 설정이 필요합니다.



OSI 7계층 중 4, 5계층에 대해 설명해보세요

4계층은 전송 계층으로, TCP와 UDP를 통해 데이터를 나누고 신뢰성을 보장합니다. 5계층은 세션 계층으로, 통신하는 두 애플리케이션 간 세션을 관리하며 연결 유지와 종료를 담당합니다. 예시로는 RPC, SQL Session Protocol 등이 있습니다.



DNS에 대해 설명해주세요

DNS는 사람이 기억하기 쉬운 도메인 이름을 실제 IP 주소로 변환해주는 시스템입니다. 사용자가 도메인을 입력하면 DNS 서버가 계층적으로 검색해 최종 IP를 반환하고, 이 IP를 기반으로 네트워크 연결이 이루어집니다.

++
사용자가 브라우저에 도메인을 입력하면, 운영체제나 브라우저, 혹은 라우터에 저장된 캐시된 결과를 먼저 확인합니다. 캐시에 없다면 로컬 dns 서버가 외부에 질의를 시작합니다. 가장 먼저 root dns 서버에 요청을 보내고, root 서버는 com이나 net 같은 최상위 도메인을 관리하는 tld 서버의 주소를 알려줍니다. 이후 리졸버는 해당 tld 서버에 접속해 네임서버 주소를 받고, 그 권한 있는 네임서버에 접속해 실제 ip 주소를 요청하고 응답을 받습니다.

이때 도메인 정보는 a레코드나 cname레코드 같은 형식으로 저장되어 있고, 응답된 ip를 가지고 브라우저가 tcp 연결 후 http 요청을 진행하게 됩니다.
(A 레코드는 도메인을 IPv4 주소와 매핑합니다. CNAME 레코드는 다른 도메인 이름으로 연결합니다.)

++
dns 자체는 애플리케이션 계층에 해당하는 프로토콜이고, 일반적으로는 udp 53번 포트를 사용하지만 응답 크기가 클 경우 tcp도 사용할 수 있습니다.



www.google.com에 접속하면 어떤 일이 일어나는지 스프링부트 관점에서 설명해보세요

사용자가 브라우저에 www.google.com을 입력하면, 먼저 DNS를 통해 도메인에 해당하는 IP 주소를 조회하고, 해당 서버와 TCP 3-way 핸드셰이크로 연결한 뒤 HTTP 요청을 전송하게 됩니다.

Spring Boot 서버에 도달한 요청은 먼저 내장 톰캣 서버를 통해 DispatcherServlet으로 전달됩니다. DispatcherServlet은 요청 URI에 따라 어떤 컨트롤러가 처리할지 HandlerMapping을 통해 결정하고, 해당 핸들러를 실행할 수 있는 HandlerAdapter를 선택합니다.

해당 요청은 RestController로 전달되어 개발자가 작성한 비즈니스 로직을 처리하게 됩니다. RestController는 내부적으로 Service 클래스를 호출하고, 필요하다면 Repository를 통해 DB에 접근하거나 외부 API를 호출해 데이터를 가져옵니다.

처리가 끝나면 RestController는 응답 데이터를 ResponseEntity 형태로 구성해 반환하고, 이는 다시 DispatcherServlet으로 전달되어 최종적으로 HTTP 응답으로 직렬화된 JSON 등의 형식으로 브라우저에 전송됩니다.



HTTP 1.0과 .1.1의 차이에 대해 설명해주세요

HTTP 1.0은 요청마다 TCP 연결을 새로 맺고 끊는 구조입니다. 이 버전부터 HTTP 헤더 개념이 도입돼 메타데이터를 주고받을 수 있게 되었고, 상태 코드와 Content-Type이 등장하였습니다.

반면 HTTP 1.1은 Keep-Alive를 지원해서 하나의 TCP 연결로 여러 요청을 처리할 수 있게 개선됐습니다. 그 외에도 Host 헤더가 필수로 들어가면서 하나의 서버에서 여러 도메인을 운영하는 가상 호스팅이 가능해졌고, 파이프라이닝을 통해 응답 대기 없이 요청을 연속적으로 보낼 수 있게 되었습니다.

다만 1.1은 여전히 TCP 기반이라 Head-of-Line Blocking 문제나 중복된 헤더 전송 이슈가 있었고, 이런 한계는 HTTP 2.0과 3.0에서 단계적으로 해결됩니다.



HTTP의 무상태성과 비연결성에 대해 설명해주세요

무상태성은 서버가 클라이언트의 상태를 기억하지 않는 특성을 의미합니다. 각각의 클라이언트 요청은 독립적으로 처리되며, 이전 요청과 관련된 정보는 서버에 저장되지 않습니다. 클라이언트가 서버에 요청을 보낼 때마다, 서버는 해당 요청을 이해하고 적절한 응답을 반환합니다. 그러나 서버는 클라이언트의 상태 정보(세션 정보)를 기억하지 않기 때문에, 클라이언트가 다음 요청을 보낼 때마다 계속해서 상태를 재전송해야 합니다.

비연결성은 클라이언트와 서버 간의 연결이 단방향성을 가지고 있음을 의미합니다. 즉, 클라이언트가 서버에 요청을 보내면, 서버는 해당 요청에 대한 응답을 보내고 연결을 종료합니다. 이후 다른 요청을 위해서는 새로운 연결을 맺어야 합니다. 이러한 특성을 "Request-Response Model”이라고 부릅니다.

++
<비연결성으로 인한 단점과 HTTP 1.1>
HTTP가 세션을 열고, 1번의 세션 안에서 클라이언트는 서버로 요청을 보내고 서버로 응답을 받으면 세션이 끊어지는 단점이 있습니다.
⇒ 이런 단점을 극복하기 위해서 HTTP1.1에서 Keep-Alive기능을 제공하여 한 번에 여러 요청-응답이 가능해졌습니다.



Socket이 무엇인가요?

소켓은 네트워크 통신을 위한 엔드포인트를 의미합니다. 일반적으로 IP 주소와 포트 번호의 조합으로 표현되며, 두 대의 컴퓨터가 데이터를 주고받기 위해 소켓을 사용합니다. 소켓은 네트워크 계층과 전송 계층 위에서 동작하며, 개발자가 데이터를 읽고 쓸 수 있는 API 역할을 합니다.

TCP 소켓은 연결 기반으로 동작하며, 데이터의 순서 보장과 신뢰성을 제공합니다. 반면, UDP 소켓은 연결 없이 동작하여 속도는 빠르지만 데이터 유실이나 순서 보장 없이 전송됩니다.



CDN이 무엇인가요?

CDN은 전 세계에 분산된 서버를 통해 정적 리소스를 빠르게 전달하는 네트워크입니다. 사용자는 가까운 서버에서 파일을 받아 응답 속도가 빨라지고, 서버 부하 분산과 보안 향상에도 효과가 있습니다.



라우팅 프로토콜 아는 것 설명해주세요

라우팅 프로토콜은 네트워크에서 최적의 경로를 선택해 데이터 패킷을 전달하는 역할을 합니다. 크게 내부 라우팅 프로토콜과 외부 라우팅 프로토콜로 나뉘는데, 내부망에서는 RIP와 OSPF가 대표적이고, 외부망에서는 BGP가 가장 많이 사용됩니다.

++
RIP는 거리 벡터 알고리즘 기반으로 동작하며, 인접 라우터의 정보를 통해 최단 경로를 계산합니다. 구조는 간단하지만 15홉 제한이 있고, 네트워크에 변화가 생겼을 때 수렴 시간이 길다는 단점이 있습니다.

OSPF는 링크 상태 알고리즘 기반으로, 전체 네트워크 구조를 파악해 경로를 계산합니다. 수렴 속도가 빠르고 안정적이지만, 모든 라우터가 전체 정보를 유지해야 하기 때문에 메모리와 CPU 자원이 더 많이 필요합니다. 또한 변화 발생 시 링크 상태 정보를 브로드캐스트하는데, 이 과정에서 네트워크 부하가 커질 수 있습니다.

BGP는 경로 벡터 알고리즘을 기반으로 하며, 단순한 거리보다 정책, 경로 속성, 자율 시스템 경로 등 복합적인 요소를 기준으로 최적 경로를 결정합니다.

profile
척척학사가 되고 싶은 똘맹

0개의 댓글