network

Network 면접 Q&A 정리 — 인강 노트

형식: 하나의 질문에 대해 브론즈 → 실버 → 골드 답변을 비교하고, 답변 간 차이 포인트와 꼬리 질문을 정리한다.

목차

  1. www.google.com 접속 시 웹 브라우저 요청 흐름을 설명해 주세요
  2. TCP가 무엇이고 장단점을 설명해 주세요
  3. UDP는 무엇이고 TCP와 어떻게 다른가요
  4. 3웨이 / 4웨이 핸드셰이크에 대해 설명해 주세요
  5. TCP는 데이터가 안전하게 도착한다는 것을 어떻게 보장하나요 (신뢰성·흐름 제어·혼잡 제어)
  6. TCP/IP는 무엇이고 OSI 7계층과의 관계는 무엇인가요 (TCP와 TCP/IP는 같은 건가요)
  7. DNS가 무엇이고 www.naver.com 접속 과정을 DNS와 연관지어 설명해 주세요
  8. DNS 서버에 IP 주소를 요청할 때 왜 UDP를 사용하나요
  9. DNS 서버는 어떤 종류가 있고, A/CNAME/TXT 같은 레코드는 왜 나뉘나요
  10. HTTP란 무엇이고 동작 방식을 설명해 주세요
  11. HTTP의 특징은 무엇인가요 (비연결성과 무상태성)
  12. HTTP 메서드의 멱등성이란 무엇인가요
  13. TLS 핸드셰이크는 어떤 순서로 진행되나요 (HTTPS)
  14. CA 인증서를 발급받는 이유는 무엇이고, Let's Encrypt와 유료 CA의 차이는 무엇인가요
  15. RESTful API란 무엇이고 REST풀하게 설계한다는 것은 어떤 의미인가요
  16. REST API와 gRPC의 차이는 무엇이고 gRPC는 어떤 상황에 쓰나요
  17. SOP와 CORS에 대해 설명해 주세요
  18. 심플 리퀘스트와 프리플라이트 리퀘스트는 어떤 기준으로 나뉘나요
  19. HTTP는 무상태인데 로그인 상태는 어떻게 유지하나요
  20. 인증과 인가는 어떻게 다른가요
  21. 쿠키와 세션은 어떻게 다른가요
  22. JWT는 어떤 구조이고 왜 액세스 토큰과 리프레시 토큰으로 나누나요
  23. JWT가 탈취되면 어떻게 대응하고 탈취 여부는 어떻게 판단하나요
  24. 리프레시 토큰을 서버에 저장한다면 세션과 무엇이 다른가요
  25. OAuth 2.0의 동작 원리를 설명해 주세요
  26. SSO는 어떤 구조로 동작하며 OAuth 2.0과는 어떤 관계인가요
  27. 웹소켓이란 무엇인가요 — HTTP와의 차이와 연결 과정
  28. 웹소켓 연결 유지 메커니즘(핑퐁)과 STOMP를 설명해 주세요
  29. SSE의 개념과 특징, 웹소켓과의 차이를 설명해 주세요
  30. 폴링 / 롱 폴링 / SSE를 비교하고 SSE 라이프 사이클을 설명해 주세요

1. www.google.com 접속 시 웹 브라우저 요청 흐름을 설명해 주세요

핵심 답변 (골드 수준)

사용자가 브라우저 주소창에 www.google.com을 입력하면 다음 순서로 진행된다.

  1. DNS 캐시 확인 — 브라우저는 먼저 DNS 캐시를 확인하고, 캐시에 없으면 DNS 질의를 통해 IP 주소를 얻는다.
  2. TCP 연결 수립 — IP가 확보되면 클라이언트와 서버는 3웨이 핸드셰이크로 TCP 연결을 수립한다.
  3. HTTP 요청 — 그 연결 위로 메서드와 헤더를 담은 HTTP 요청을 보낸다.
  4. HTTP 응답 — 서버는 요청을 처리한 뒤 상태 코드와 본문을 포함한 HTTP 응답을 반환한다.
  5. 렌더링 — 브라우저는 응답받은 HTML, CSS, 자바스크립트를 파싱하여 DOM과 CSSOM을 만들고, 렌더 트리를 구성해 화면에 그린다.
  6. 연결 종료 — 연결을 종료할 때는 TCP 4웨이 핸드셰이크가 사용될 수 있다.
주소창 입력
   │
   ▼
DNS 캐시 확인 ──(없으면)──▶ DNS 질의 → IP 획득
   │
   ▼
TCP 3웨이 핸드셰이크 (연결 수립)
   │
   ▼
HTTP 요청 (메서드 + 헤더) ──▶ 서버 처리 ──▶ HTTP 응답 (상태 코드 + 본문)
   │
   ▼
HTML/CSS/JS 파싱 → DOM + CSSOM → 렌더 트리 → 화면에 그리기
   │
   ▼
(종료 시) TCP 4웨이 핸드셰이크

핵심 키워드 4가지: DNS 캐시와 DNS 질의 → TCP 3웨이 핸드셰이크 → HTTP 요청/응답 → 렌더링 파이프라인. 이 네 가지를 시간 순으로 유기적으로 이어서 답변한다.

답변 레벨 차이

레벨 답변 요지 평가
브론즈 "URL을 입력하면 DNS가 동작하고 TCP로 연결해서 데이터를 받아 와서 화면에 보여준다" 용어는 알지만 하나의 흐름으로 들리지 않는다. DNS가 무슨 일을 하는지, TCP 연결이 언제 열리는지, 응답이 어떻게 화면이 되는지가 전부 뭉뚱그려져 있다
실버 "DNS로 IP를 얻고 TCP 연결 수립 후 HTTP 요청, 서버가 응답하면 HTML을 화면에 보여준다" 큰 순서는 잡혀 있으나 TCP 연결이 어떻게 열리는지, HTML이 어떻게 실제 화면으로 이어지는지가 비어 있다
골드 위 핵심 답변 ① 출발점을 DNS 캐시 → 질의로 연결 ② HTTP 요청/응답을 TCP 연결의 생애 주기 안에 배치 ③ 응답 이후를 렌더링 파이프라인(DOM·CSSOM·렌더 트리)으로 마무리

꼬리 질문


2. TCP가 무엇이고 장단점을 설명해 주세요

핵심 답변 (골드 수준)

TCP는 OSI 모델의 전송 계층에서 동작하는 연결 지향 프로토콜이다. 데이터를 보내기 전에 3웨이 핸드셰이크로 논리적인 가상 회선을 먼저 수립하고, 이 연결 위에서 시퀀스 번호, ACK, 재전송 같은 메커니즘으로 신뢰성을 보장한다.

포인트:

핵심 키워드 4가지: 전송 계층, 연결 지향, 신뢰성, 1대1 통신.

답변 레벨 차이

레벨 답변 요지 평가
브론즈 "데이터를 안정적으로 보내는 프로토콜. 잘 도착하는 게 장점, 느린 게 단점" 결과만 말한다. 어느 계층인지, 왜 안정적인지, 왜 느린지가 빠져 있다
실버 "전송 계층의 연결 지향 프로토콜로 연결을 먼저 수립해 신뢰성이 높다. 순서대로 도착하는 게 장점, 연결 설정 비용으로 느린 게 단점" 방향성은 좋으나 ① 신뢰성을 보장하는 실제 장치 ② 1대1 통신이라는 구조적 제약이 빠져 있다
골드 위 핵심 답변 가상 회선, 신뢰성 메커니즘(시퀀스 번호·ACK·재전송), 1대1 한계까지 채웠다

꼬리 질문


3. UDP는 무엇이고 TCP와 어떻게 다른가요

핵심 답변 (골드 수준)

UDP는 전송 계층의 비연결 지향 프로토콜로, TCP처럼 3웨이 핸드셰이크로 연결을 먼저 만들지 않고 데이터그램 단위로 바로 전송한다. 그래서 순서 보장, 도착 보장, 자동 재전송은 제공하지 않지만 연결 설정과 상태 유지 비용이 없어 오버헤드가 낮다.

TCP가 신뢰성과 순서를 프로토콜이 책임지는 1대1 연결이라면, UDP는 빠른 전송과 브로드캐스트·멀티캐스트에 유리하다. DNS, 실시간 스트리밍, 게임처럼 약간의 손실보다 지연 시간이 더 중요한 경우에 사용하고, 신뢰성이 필요하면 애플리케이션 계층에서 별도로 보완한다(예: 메시지에 시퀀스 번호를 붙이고 ACK를 받지 못하면 재전송).

포인트:

핵심 키워드 4가지: 비연결 지향, 데이터그램, 낮은 오버헤드, 애플리케이션 계층 보완.

답변 레벨 차이

레벨 답변 요지 평가
실버 "연결을 먼저 수립하지 않고 바로 보내서 빠르지만 신뢰성이 없다. 영상 스트리밍·음성 통화에 쓴다" 방향은 괜찮으나 "왜 빠른지"(데이터그램·상태 유지 비용)가 없고, "신뢰성이 없다"로 끝내면 부실한 프로토콜처럼 들린다
골드 위 핵심 답변 데이터그램 전송 구조, 낮은 오버헤드의 이유, 신뢰성의 애플리케이션 계층 보완까지 설명

꼬리 질문


4. 3웨이 / 4웨이 핸드셰이크에 대해 설명해 주세요

핵심 답변 (골드 수준)

3웨이 핸드셰이크는 TCP의 연결 설정 과정이다. 클라이언트가 SYN을 보내고, 서버가 SYN+ACK로 응답한 뒤, 클라이언트가 마지막 ACK를 보내면서 양쪽의 시퀀스 번호와 송수신 가능 상태를 확인한다. 서버는 클라이언트 SYN에 대한 ACK와 자신의 SYN을 한 번에 보낼 수 있어서 세 번의 교환으로 충분하다.

[연결 설정: 3-way]                 [연결 종료: 4-way]
클라이언트          서버            종료 시작 측         상대 측
    │── SYN ─────────▶│                │── FIN ─────────▶│
    │◀─── SYN+ACK ────│                │◀─── ACK ────────│  (수신 확인만 먼저)
    │── ACK ─────────▶│                │   (남은 데이터 송신 마무리)
    │   연결 수립      │                │◀─── FIN ────────│
                                       │── ACK ─────────▶│
                                       │  TIME_WAIT 대기  │

4웨이 핸드셰이크는 TCP의 연결 종료 과정이다. 종료를 시작한 쪽이 FIN을 보내면, 상대는 먼저 ACK로 수신을 확인하고 — 아직 보낼 데이터가 남아 있을 수 있으므로 — 자신의 송신을 마친 뒤 별도의 FIN을 보낸다. TCP 종료는 양쪽 송신 방향을 각각 닫는 구조라서 보통 4번의 교환이 된다.

마지막 ACK를 보낸 쪽은 TIME_WAIT 상태로 잠시 대기한다. 이유는 두 가지다.

  1. 지연된 패킷이 다음 연결에 섞이는 것을 막기 위해
  2. 마지막 ACK가 유실됐을 때 상대의 FIN 재전송에 다시 응답하기 위해

핵심 키워드 4가지: SYN·SYN+ACK·ACK 연결 설정 3단계, ACK와 SYN의 결합(3번인 이유), ACK와 FIN의 분리(4번인 이유), TIME_WAIT.

답변 레벨 차이

레벨 답변 요지 평가
브론즈 "연결 시작 시 패킷 3번, 종료 시 4번 주고받는 과정" 화이트보드에 그릴 수 있는 게 없다. 어떤 플래그가 오가는지, 왜 3번/4번인지 없음
실버 "SYN → SYN+ACK → ACK로 수립, 종료는 FIN → ACK → FIN → ACK" 흐름은 알지만 ① 왜 연결은 3번이고 종료는 4번인지 ② 왜 TIME_WAIT이 필요한지가 빠져 있다
골드 위 핵심 답변 플래그의 목적(시퀀스 번호·송수신 상태 확인), 3/4 비대칭의 이유, TIME_WAIT의 두 가지 이유까지 설명

실전 팁: 유니콘 스타트업 면접에서 화이트보드에 클라이언트-서버 패킷 흐름을 직접 그리며 설명하라는 요구를 받은 사례가 있다. 화살표를 그려 설명할 수 있을 정도로 이해해야 한다.

꼬리 질문


5. TCP는 데이터가 안전하게 도착한다는 것을 어떻게 보장하나요 (신뢰성·흐름 제어·혼잡 제어)

핵심 답변 (골드 수준)

TCP는 시퀀스 번호와 ACK를 사용해 세그먼트의 순서와 수신 여부를 확인하고, 손실이 감지되면 재전송으로 복구한다. 또한 체크섬으로 헤더와 데이터의 오류를 검출해 잘못된 세그먼트를 걸러낸다.

전송 속도 조절은 흐름 제어와 혼잡 제어로 나눠서 봐야 한다.

혼잡 제어에서는 처음에는 슬로우 스타트로 조심스럽게 전송량을 늘리고, 이후에는 AIMD처럼 손실이 없으면 조금씩 늘리고 손실이 감지되면 크게 줄이는 방식으로 네트워크 상태에 맞춘다.

핵심은 TCP의 신뢰성이 단순히 ACK 하나가 아니라 손실 복구와 속도 제어까지 함께 묶여 있다는 점이다.

핵심 키워드 4가지: 시퀀스 번호와 ACK, 재전송과 체크섬, 흐름 제어, 혼잡 제어.

답변 레벨 차이

레벨 답변 요지 평가
실버 "시퀀스 번호를 부여하고 ACK로 응답, 누락·타임아웃 시 재전송, 체크섬으로 검증. 혼잡 제어는 네트워크가 막혔을 때 속도를 줄이는 기능 정도" 신뢰성 기본 장치는 좋지만 혼잡 제어를 "속도 줄이는 기능"으로만 말하면 흐름 제어와의 차이 질문에 바로 취약해진다
골드 위 핵심 답변 ① 시퀀스 번호·ACK를 역할(순서·수신 여부 확인)로 설명 ② 흐름 제어(수신 측)와 혼잡 제어(네트워크 전체)의 책임 분리 ③ 슬로우 스타트·AIMD로 동적 조절 감각을 표현

주의: 흐름 제어와 혼잡 제어를 구분하지 못하면 앞부분을 잘 말하고도 마지막 디테일에서 점수를 잃는다. 실제 하이퍼커넥트 면접에서 신뢰성 메커니즘까지 답하고 혼잡 제어에서 막힌 사례가 소개되었다. "둘 다 송신량 조절 아닌가요?"라는 되물음에도 보는 대상이 다르다(수신 측 vs 네트워크 전체)로 답하면 흔들리지 않는다.

꼬리 질문


6. TCP/IP는 무엇이고 OSI 7계층과의 관계는 무엇인가요 (TCP와 TCP/IP는 같은 건가요)

핵심 답변 (골드 수준)

TCP/IP는 인터넷에서 실제로 쓰이는 프로토콜 스택이고, TCP는 그 안의 전송 계층에서 동작하는 하나의 프로토콜이다. 반면 OSI 7계층은 통신 과정을 응용·표현·세션·전송·네트워크·데이터 링크·물리 계층으로 나눈 참조 모델이다.

두 모델의 대응 관계:

TCP/IP 4계층 OSI 7계층
응용 계층 응용 + 표현 + 세션 계층
전송 계층 (TCP, UDP 동작) 전송 계층
인터넷 계층 네트워크 계층
네트워크 인터페이스 계층 데이터 링크 + 물리 계층

핵심은 TCP/IP는 실제 구현에 가까운 4계층 모델이고 OSI는 통신을 설명하기 위한 7계층 참조 모델이라는 점이다.

핵심 키워드 4가지: TCP/IP(프로토콜 스택), TCP(전송 계층 프로토콜), OSI 7계층(참조 모델), 계층 매핑. 매핑은 전부 외울 필요는 없고, 전송 계층과 응용 계층 정도는 정확히 답할 수 있게 준비한다.

답변 레벨 차이

레벨 답변 요지 평가
브론즈 "TCP/IP는 인터넷 프로토콜 묶음, OSI는 7계층 모델. 4계층 vs 7계층 차이" 계층 숫자만 있고, 어느 계층이 어디에 대응되는지 없음
실버 "TCP/IP는 실제 프로토콜 스택, OSI는 참조 모델. 전송 계층끼리 대응되고 거기서 TCP/UDP 동작" 성격 차이는 보이지만 응용 계층·네트워크 인터페이스 계층의 매핑이 빠져 있다
골드 위 핵심 답변 ① 첫 문장에서 TCP/IP와 TCP의 이름 혼동을 정리 ② 구체적 계층 매핑 + 모델의 성격 차이(실제 구현 vs 참조 모델)

꼬리 질문


7. DNS가 무엇이고 www.naver.com 접속 과정을 DNS와 연관지어 설명해 주세요

핵심 답변 (골드 수준)

DNS는 www.naver.com 같은 도메인 이름을 IP 주소로 바꿔주는 시스템이다. 사람은 숫자로 된 IP를 일일이 기억하기 어렵고 컴퓨터는 실제 통신에 IP가 필요하기 때문에, DNS가 둘 사이를 이어준다.

조회 흐름:

  1. 브라우저가 www.naver.com에 접속하면 먼저 로컬 DNS 서버에 질의한다.
  2. 로컬 DNS 서버에 정보가 없으면 루트 DNS 서버에서 .com 최상위(TLD) DNS 서버의 위치를 받는다.
  3. 최상위 DNS 서버에서 naver.com을 관리하는 권한 DNS 서버의 위치를 받는다.
  4. 권한 DNS 서버에서 www.naver.com의 실제 IP 주소를 받아온다.
호스트 ──질의──▶ 로컬 DNS ──▶ 루트 DNS      (".com TLD 서버는 여기")
                    │  ◀──────────┘
                    ├──▶ 최상위(TLD) DNS    ("naver.com 권한 서버는 여기")
                    │  ◀──────────┘
                    └──▶ 권한 DNS           ("www.naver.com의 IP는 x.x.x.x")
호스트 ◀──IP 응답── 로컬 DNS (TTL 동안 캐싱)

호스트 입장에서는 로컬 DNS에 한 번 요청하면 로컬 DNS가 나머지 과정을 대신 처리해 주는 재귀 질의 구조로 보인다. 로컬 DNS는 받아온 IP를 TTL 동안 캐싱해 이후 같은 요청에는 상위 DNS 서버들을 다시 거치지 않고 응답할 수 있다.

포인트:

핵심 키워드 3가지: 도메인 이름 → IP 주소, 로컬 → 루트 → 최상위 → 권한의 조회 흐름, 재귀 질의와 캐싱.

답변 레벨 차이

레벨 답변 요지 평가
브론즈 "DNS는 도메인을 IP로 바꿔주는 서버. 입력하면 IP를 찾아서 알려주고 접속된다" 결과만 말했다. 왜 필요한지, 어떤 순서로 찾는지가 없다. "찾아서 알려준다"는 표현이 너무 넓다
실버 "사람이 외우기 어려운 IP 대신 도메인을 쓰게 해주는 시스템. 로컬 DNS에 질의하고 없으면 상위 DNS 서버들을 거쳐 IP를 받아온다" 필요성과 출발점은 잡았으나 "상위 DNS 서버들"이 뭉뚱그려져 있고 캐싱이 빠졌다
골드 위 핵심 답변 서버별 역할 구분(위치 안내 vs 실제 레코드), 재귀 질의, TTL 캐싱까지 구조로 설명

이 질문은 이력서에 배포 경험·도메인 연결 경험이 있으면 자주 이어진다.

꼬리 질문


8. DNS 서버에 IP 주소를 요청할 때 왜 UDP를 사용하나요

핵심 답변 (골드 수준)

DNS는 짧은 질의와 응답이 빠르게 오가야 하므로 기본적으로 UDP를 사용한다.

  1. 3웨이 핸드셰이크가 없다 — TCP는 데이터를 주고받기 전에 3웨이 핸드셰이크로 연결을 수립해야 하지만, UDP는 연결 설정 없이 바로 질의를 보낼 수 있어 DNS처럼 작은 요청에는 비용이 낮다.
  2. 스테이트리스 단발 질의 — DNS 질의는 보통 하나의 요청과 하나의 응답으로 끝난다. 서버가 클라이언트별 연결 상태를 오래 유지할 필요가 없기 때문에 같은 자원으로 더 많은 요청을 처리할 수 있다.
  3. TCP 폴백 — 다만 항상 UDP만 쓰는 것은 아니다. 응답이 크거나 DNSSEC처럼 더 많은 데이터가 필요한 경우에는 TCP 폴백으로 보완한다.

포인트: "TCP는 느리다"가 아니라 **"연결 수립 과정이 먼저 필요하다"**라고 말해야 DNS 같은 작은 질의에 UDP가 왜 가벼운지 설명된다. TCP 폴백까지 언급하면 단정적인 답변을 피할 수 있다.

핵심 키워드 3가지: 3웨이 핸드셰이크 없음, 스테이트리스 단발 질의, TCP 폴백.

답변 레벨 차이

레벨 답변 요지 평가
실버 "빠른 응답이 중요해서 UDP. TCP처럼 연결을 맺으면 시간이 더 걸리는데 DNS는 짧은 질의·응답 한 번으로 끝나는 경우가 많다" 괜찮은 답변이지만 ① 왜 연결 상태를 오래 유지할 필요가 없는지 ② 예외(TCP 폴백)가 빠져 있다
골드 위 핵심 답변 연결 수립 비용, 스테이트리스 구조, TCP 폴백 예외까지 포함

실전 팁: 게임 회사 면접에서 TCP/UDP 차이 → DNS 조회 흐름 → 이 질문으로 하나의 유기적 흐름으로 이어진 사례가 있다. "DNS는 UDP를 씁니다"라는 이름만으로는 부족하고, 왜 DNS 질의에 UDP가 잘 맞는지를 말해야 한다.

꼬리 질문


9. DNS 서버는 어떤 종류가 있고, A/CNAME/TXT 같은 레코드는 왜 나뉘나요

핵심 답변 (골드 수준)

DNS 레코드는 도메인에 대한 정보를 저장하는 항목이다.

레코드 역할
A 도메인을 IPv4 주소에 매핑
CNAME 한 도메인이 다른 정식 도메인을 가리키게 하는 별칭
TXT 임의의 텍스트 값 저장 — 도메인 소유권 검증, SPF 같은 메일 인증 등에 사용

DNS 서버는 역할에 따라 로컬 DNS, 루트 DNS, 최상위(TLD) DNS, 권한 DNS 서버로 나뉜다.

서버 역할
로컬 DNS 클라이언트의 질의 창구
루트 DNS .com 같은 최상위 DNS 서버의 위치 안내
최상위(TLD) DNS 특정 도메인의 권한 DNS 서버 위치 안내
권한 DNS 실제 레코드 값 저장

이렇게 나누는 이유는 전 세계 모든 도메인 정보를 한 서버가 관리할 수 없기 때문이다. 상위 서버가 직접 모든 답을 들고 있는 대신 하위 서버의 위치를 알려주는 권한 위임 구조를 쓰면 관리 책임을 나눌 수 있고, 한 곳에 부하와 장애가 집중되는 것을 줄일 수 있다.

실무 연결: 무료 SSL 인증서를 발급받을 때 인증 기관이 요구한 값을 TXT 레코드에 넣어 도메인 소유권을 확인하는 식으로, TXT 레코드는 실제 운영에서 자주 마주친다.

핵심 키워드 3가지: A·CNAME·TXT 레코드, 로컬·루트·최상위·권한 서버, 권한 위임.

답변 레벨 차이

레벨 답변 요지 평가
실버 "A는 IP 매핑, CNAME은 별칭, TXT는 텍스트 값(소유권 검증·메일 인증). DNS 서버도 로컬·루트·최상위·권한처럼 역할에 따라 나뉜다" 기본기는 있으나 이름 나열에 가깝다. 각 서버의 역할 설명과 "왜 나누는가"(권한 위임)가 빠졌다
골드 위 핵심 답변 ① 레코드의 정의를 먼저 깔고 ② 서버의 책임을 나눠 설명하고 ③ 권한 위임 구조의 이유(관리 분산·부하/장애 분산)까지 설명

꼬리 질문


10. HTTP란 무엇이고 동작 방식을 설명해 주세요

핵심 답변 (골드 수준)

HTTP는 웹에서 클라이언트와 서버가 리소스를 주고받기 위해 사용하는 응용 계층 프로토콜이다.

포인트:

핵심 키워드 3가지 + α: 응용 계층 프로토콜, URI와 메서드, 상태 코드·헤더·본문 (+ 전송은 TCP/QUIC 같은 아래 계층이 맡는다).

답변 레벨 차이

레벨 답변 요지 평가
브론즈 "웹에서 데이터를 주고받는 프로토콜. 주소를 입력하면 HTTP로 요청이 가고 화면이 뜬다" 결과만 말했다. 누가 요청하고 누가 응답하는지, 어떤 규칙으로 오가는지 없음
실버 "클라이언트-서버 간 통신 규약. 요청을 보내면 처리해서 응답을 돌려주고 HTML·JSON 등을 주고받는다" 요청-응답 구조는 나왔지만, 어떤 대상에 어떤 동작을 표현하는지와 네트워크 구조 안의 위치가 빠졌다
골드 위 핵심 답변 리소스 중심 + URI/메서드 + 상태 코드·헤더·본문 + 계층 역할 분리

꼬리 질문


11. HTTP의 특징은 무엇인가요 (비연결성과 무상태성)

핵심 답변 (골드 수준)

HTTP의 핵심 특징은 비연결성무상태성이다.

포인트:

핵심 키워드 3가지: 비연결성(HTTP/1.1 이후 연결 재사용 고려), 무상태성, 상태 유지 보완 메커니즘.

답변 레벨 차이

레벨 답변 요지 평가
실버 "비연결성은 연결 자원을 오래 붙잡지 않는 것, 무상태성은 이전 요청을 기억하지 않는 것. 매 요청이 독립적으로 처리된다" 두 용어의 구분은 좋으나 "그게 왜 장점이죠? 로그인은 어떻게 유지하죠?"에 대한 내용(필요성과 보완)이 빠졌다
골드 위 핵심 답변 버전 변화(keep-alive) 고려, 클라이언트의 정보 전송 책임, 서버 확장 유리 + 상태 유지 보완까지

꼬리 질문


12. HTTP 메서드의 멱등성이란 무엇인가요

핵심 답변 (골드 수준)

HTTP의 멱등성은 같은 요청을 한 번 보내든 여러 번 보내든 서버 리소스의 최종 상태가 같아지는 성질이다.

멱등성은 재시도와 중복 요청 때문에 중요하다. 네트워크 오류로 같은 요청이 다시 전송될 수 있는데(결제 버튼 재클릭, 클라이언트 타임아웃 후 재시도 등), 멱등하지 않은 요청은 주문이나 결제가 두 번 처리될 수 있어 중복 방지 장치가 필요하다.

포인트: 기준을 "응답 내용이 같다"가 아니라 **"서버 리소스의 최종 상태가 같다"**로 잡아야 한다. 같은 GET 요청을 두 번 보냈을 때 그 사이 데이터가 바뀌면 응답 내용은 달라질 수 있지만, GET은 서버 상태를 바꾸지 않으므로 여전히 멱등하다.

핵심 키워드 3가지: 서버 리소스의 최종 상태, 멱등한 메서드의 예시, 중복 처리 방지.

답변 레벨 차이

레벨 답변 요지 평가
실버 "같은 요청을 여러 번 보내도 결과가 같다는 의미. GET/PUT/DELETE는 멱등, POST는 비멱등" "결과가 같다"는 표현이 위험하다 — 응답 내용이 항상 같다는 뜻으로 들릴 수 있다
골드 위 핵심 답변 ① 기준을 서버 상태로 정정 ② PUT/DELETE를 최종 상태 관점으로 설명 ③ POST/PATCH를 조심스럽게 다루고 ④ 실무적 중요성(재시도·중복)까지 연결

꼬리 질문


13. TLS 핸드셰이크는 어떤 순서로 진행되나요 (HTTPS)

이 부분은 강의에서 레벨 비교 없이 보충 슬라이드로 설명된 내용이다. TLS 1.3 기준.

핵심 정리

HTTPS에서 HTTP 요청이 바로 암호화되어 나가는 것이 아니다. 먼저 브라우저와 서버가 ① 어떤 방식으로 보호할지 ② 서버를 믿어도 되는지 ③ 이 연결에서 쓸 암호화 키를 어떻게 준비할지 정하는 과정이 TLS 핸드셰이크다.

클라이언트                                 서버
    │── ClientHello ─────────────────────▶│  지원 TLS 버전, 사이퍼 스위트,
    │                                     │  랜덤 값, 키 교환 정보(클라이언트
    │                                     │  공개 키 key share, ECDHE 등)
    │◀──────────────────── ServerHello ───│  선택한 TLS 버전·사이퍼 스위트,
    │                                     │  서버 쪽 공개 키 key share,
    │                                     │  서버 인증서
    │  [인증서 검증]                        │
    │  브라우저/OS 신뢰 저장소 + CA 체인으로   │
    │  서버 인증서 유효성 확인                │
    │                                     │
    │  [세션 키 도출 — 양쪽에서 각자 계산]     │
    │  클라이언트: 자기 개인 값 + 서버 공개 값  │
    │  서버:      자기 개인 값 + 클라이언트 공개 값
    │                                     │
    │◀────────── Finished 교환 ──────────▶│  핸드셰이크 무결성 + 키 재료 확인
    │                                     │
    │◀═══════ 이후 HTTP 요청/응답을 TLS로 암호화 ═══════▶│
  1. ClientHello — 클라이언트가 지원 가능한 TLS 버전, 사이퍼 스위트, 랜덤 값, 키 교환 정보(클라이언트 측 공개 키 key share, ECDHE 같은 키 교환 알고리즘)를 전송한다.
  2. ServerHello — 서버가 사용할 TLS 버전과 사이퍼 스위트를 고르고, 서버 쪽 공개 키 key share를 보내면서 서버 인증서도 함께 전달한다.
  3. 인증서 검증 — 클라이언트는 브라우저/OS의 신뢰 저장소와 CA 체인으로 서버 인증서가 유효한지 검증한다.
  4. 세션 키 준비 — 세션 키는 이 TLS 연결에서 HTTP 요청·응답을 암호화/복호화하는 통신용 대칭 키다. 중요한 점은 세션 키를 통째로 네트워크에 보내지 않는다는 것이다.
    • 클라이언트와 서버는 각자 이 연결에서만 쓸 개인 값을 만들고, 거기서 만들어진 공개 값(key share)만 상대에게 보낸다.
    • 클라이언트는 자기 개인 값 + 서버 공개 값으로, 서버는 자기 개인 값 + 클라이언트 공개 값으로 세션 키를 계산한다. ECDHE 같은 키 교환 알고리즘은 이 두 계산의 결과가 같게 나오도록 설계되어 있다.
    • 중간에서 패킷을 훔쳐보는 사람은 양쪽의 공개 값은 볼 수 있지만 개인 값은 네트워크로 나가지 않으므로, 같은 알고리즘을 알아도 같은 공유 비밀 값을 계산할 수 없다.
    • TLS는 이 공유 비밀 값을 바로 HTTP 암호화에 쓰는 것이 아니라 키 재료로 사용한다.
  5. Finished 교환 — 지금까지의 핸드셰이크 내용이 중간에서 바뀌지 않았는지, 양쪽이 같은 키 재료를 가지고 있는지 확인한다.
  6. 여기까지 끝나면 그때부터 HTTP 요청과 응답이 TLS로 암호화되어 오간다.

정리: TLS 핸드셰이크는 서버를 인증하고, 암호 방식을 맞추고, 이 연결에서 사용할 세션 키(대칭 키)를 준비한 뒤 실제 HTTPS 통신으로 넘어가는 과정이다.

관련 개념(강의에서 언급): 비대칭 키는 인증·서명 역할을 한다 — 개인 키로 서명하고 공개 키로 검증하면 누가 만든 것인지 확인할 수 있다.

꼬리 질문


14. CA 인증서를 발급받는 이유는 무엇이고, Let's Encrypt와 유료 CA의 차이는 무엇인가요

핵심 답변 (골드 수준)

CA에서 인증서를 받는 이유는 브라우저와 OS가 신뢰하는 루트 CA에서 이어지는 신뢰 체인 안에 들어가 서버 신원을 검증받기 위해서다. 개인이 만든 자가 서명 인증서는 제3자 검증이 없어 기본 신뢰 저장소에 연결되지 않으므로 브라우저가 경고를 표시한다.

Let's Encrypt는 ACME 기반으로 인증서 발급과 갱신을 자동화한 무료 CA이며, 도메인 소유권만 확인하는 DV(Domain Validation) 인증서를 제공한다. 일반 웹사이트는 Let's Encrypt만으로도 HTTPS 적용에 충분한 경우가 많다.

유료 CA와의 차이는 암호화 강도 자체가 아니라 검증 범위와 지원에 있다. 도메인뿐 아니라 회사 정보까지 확인받거나, 장애 대응 지원과 인증서 관리 옵션이 필요한 경우에는 유료 CA를 선택할 수 있다.

포인트:

핵심 키워드 4가지: 신뢰 체인, 자가 서명 인증서(의 한계), Let's Encrypt = 무료 CA + DV, 유료 CA와의 차이 = 검증 범위와 운영 지원.

답변 레벨 차이

레벨 답변 요지 평가
브론즈 "유료 CA가 더 안전하고, Let's Encrypt는 무료라 개인 프로젝트·테스트용" 위험한 프레임. Let's Encrypt도 정식 CA이고 암호화 강도는 무료/유료로 갈리지 않는다. 가격만 보고 인증서를 이해한 것으로 보인다
실버 "신뢰 기관이 사이트를 확인했다는 증명을 받기 위해 CA 발급. 자가 서명은 브라우저가 경고. Let's Encrypt는 무료로 발급해 주는 CA" 기본기는 있으나 Let's Encrypt의 검증 범위(DV), 유료 CA와의 실제 차이가 비어 있어 "그럼 회사들은 왜 돈 내고 사나요?"에 취약
골드 위 핵심 답변 신뢰 체인 구조, ACME/DV, 검증 범위·운영 지원이라는 차이 기준까지

실전 사례: 야놀자 면접에서 "CA 인증서를 발급받는 이유와 무료 CA인 Let's Encrypt와의 차이"를 그대로 질문받은 경험이 소개되었다.

꼬리 질문


15. RESTful API란 무엇이고 REST풀하게 설계한다는 것은 어떤 의미인가요

핵심 답변 (골드 수준)

RESTful API는 리소스를 중심으로 URI를 설계하고, HTTP 메서드와 상태 코드를 표준 의미에 맞게 사용하는 API 설계 방식이다. 핵심은 세 가지다.

  1. URI는 행위가 아니라 리소스를 표현한다/users/1처럼 사용자 리소스를 나타내고, /getUser처럼 동사를 넣은 URI는 피한다. getUser는 서버가 어떤 함수를 실행하는지에 가깝고, /users/1은 클라이언트가 어떤 대상을 다루는지 보여준다.
  2. 행위는 HTTP 메서드로 표현한다 — GET은 조회, POST는 생성, PUT/PATCH는 수정, DELETE는 삭제처럼 메서드의 의미를 일관되게 사용한다. 상태 코드까지 표준 의미에 맞게 쓰면 호출하는 쪽이 응답을 예측하기 쉬워진다.
  3. 요청은 무상태성을 지킨다 — 서버가 클라이언트의 이전 요청 상태에 의존하지 않도록, 요청마다 인증 정보·리소스 식별자·필요한 파라미터를 포함한다.

이렇게 리소스 / 행위 / 요청 상태를 분리해서 설계하면 클라이언트와 서버가 API의 의미를 예측 가능하게 이해할 수 있다.

핵심 키워드 3가지: 리소스 중심 URI, HTTP 메서드와 상태 코드, 무상태성.

답변 레벨 차이

레벨 답변 요지 평가
실버 "URI를 명사로 만들고 HTTP 메서드를 CRUD에 매핑하는 방식" (면접장·실무에서 흔한 수준) URI·메서드·CRUD는 나왔지만 ① 왜 리소스 중심이어야 하는지 ② GET/POST를 왜 구분해야 하는지 ③ 무상태성이 빠져서 "API 명명 규칙" 수준으로 들린다
골드 위 핵심 답변 리소스/행위/무상태성의 3분리 + 각각의 이유. 클라이언트-서버의 역할 분리까지 이어진다

실전 사례: 야놀자 면접에서 URI와 메서드 얘기만 하고 "왜 그렇게 설계해야 하는지"를 풀지 못해 아쉬웠던 경험이 소개되었다. 이 질문은 REST라는 단어를 외웠는지가 아니라 API를 리소스 중심으로 바라보고 있는지를 확인한다.

꼬리 질문


16. REST API와 gRPC의 차이는 무엇이고 gRPC는 어떤 상황에 쓰나요

핵심 답변 (골드 수준)

REST API는 리소스를 URI로 표현하고 HTTP 메서드로 조작하는 방식이며, gRPC는 원격 서버의 함수를 호출하듯 통신하는 RPC 프레임워크다.

포인트:

핵심 키워드 4가지: 리소스 조작 vs RPC 호출, HTTP/2와 Protobuf, proto 스키마(계약), 사용 기준.

답변 레벨 차이

레벨 답변 요지 평가
실버 "REST는 HTTP+JSON, gRPC는 HTTP/2+Protobuf. gRPC는 작고 빨라서 서버 간 통신·MSA에서 사용" 대비는 맞지만 통신 모델 차이(리소스 vs 함수 호출)가 빠져 "JSON이냐 Protobuf냐" 비교로만 들린다. 계약(스키마) 관점과 단점도 없다
골드 위 핵심 답변 통신 모델 → 성능의 근거 → 계약 → 트레이드오프와 사용 기준 순으로 정리

실무 연결: 채널톡에서도 gRPC를 많이 쓰는데, .proto 파일 관리는 낯설지만 서비스 간 계약이 파일로 남고 그 계약으로 코드를 생성할 수 있는 것이 장점으로 소개되었다.

꼬리 질문


17. SOP와 CORS에 대해 설명해 주세요

핵심 답변 (골드 수준)

**SOP(Same-Origin Policy)**는 브라우저가 스크립트에서 다른 출처의 리소스 응답을 마음대로 읽지 못하게 제한하는 브라우저 보안 정책이다. 여기서 같은 출처란 프로토콜, 호스트, 포트가 모두 같은 경우를 말한다.

**CORS(Cross-Origin Resource Sharing)**는 SOP 때문에 기본적으로 막히는 교차 출처 요청을 서버가 명시적으로 허용할 수 있게 하는 예외 메커니즘이다. 서버는 응답의 Access-Control-Allow-Origin 헤더로 허용할 출처를 알려주고, 브라우저가 이 헤더를 확인해 응답을 클라이언트 코드에 노출할지 결정한다.

CORS 요청은 조건에 따라 본 요청을 바로 보내는 심플 리퀘스트본 요청 전에 OPTIONS로 허용 여부를 확인하는 프리플라이트 리퀘스트로 나뉜다.

포인트:

핵심 키워드 4가지: SOP, 오리진의 3요소(프로토콜·호스트·포트), Access-Control-Allow-Origin, 심플 리퀘스트와 프리플라이트 리퀘스트.

답변 레벨 차이

레벨 답변 요지 평가
브론즈 "CORS는 다른 출처 요청 시 생기는 문제를 풀어주는 정책. 에러 나면 서버에서 허용해 주면 된다" 실무 경험은 느껴지지만 SOP가 빠져서 CORS가 왜 필요한지 설명이 안 된다
실버 "SOP는 같은 출처끼리만 공유하게 제한하는 브라우저 정책, CORS는 서버가 허용하면 예외를 두는 방식. 서버는 응답 헤더로 허용 출처를 알려준다" 순서는 안정적이나 ① 같은 출처의 판단 기준 ② 허용 헤더 이름 ③ 심플/프리플라이트 구분이 빠졌다
골드 위 핵심 답변 주체(브라우저), 오리진 3요소, 헤더와 역할 분담, 요청 방식 구분까지

실무 배경: 개발 환경의 localhost:3000(리액트) → localhost:8080(API), 운영의 app.example.comapi.example.com처럼 출처가 다른 통신에서 브라우저가 CORS 검사를 수행하고, 서버가 허용하지 않으면 차단된다.

꼬리 질문


18. 심플 리퀘스트와 프리플라이트 리퀘스트는 어떤 기준으로 나뉘나요

핵심 답변 (골드 수준)

심플 리퀘스트는 GET, HEAD, POST처럼 단순한 메서드와 브라우저가 허용하는 단순 헤더 조건을 만족할 때 프리플라이트 없이 본 요청을 바로 보내는 방식이다. 실무에서 자주 쓰는 application/json 콘텐츠 타입이나 Authorization 헤더가 붙으면 단순 요청 조건을 벗어나 보통 프리플라이트가 발생한다.

프리플라이트 리퀘스트는 본 요청 전에 브라우저가 OPTIONS 요청을 보내 서버가 해당 오리진·메서드·헤더를 허용하는지 먼저 확인하는 방식이다. 이때 서버는 Access-Control-Allow-Origin, Access-Control-Allow-Methods, Access-Control-Allow-Headers 같은 응답 헤더로 허용 범위를 알려준다.

포인트:

핵심 키워드 4가지: 심플 리퀘스트의 조건, 프리플라이트(OPTIONS), 오리진·메서드·헤더 확인, Access-Control-Max-Age 캐싱.

답변 레벨 차이

레벨 답변 요지 평가
실버 "심플은 바로 본 요청, 프리플라이트는 먼저 OPTIONS를 보내고 허용되면 본 요청" 구분은 맞지만 "언제/어떤 기준으로" 나뉘는지가 없다. 실제 요청에서 왜 OPTIONS가 나갔는지 설명할 수 없다
골드 위 핵심 답변 조건 기준, 프리플라이트가 확인하는 3가지, 응답 헤더, 캐싱까지

흔한 오해: "GET이나 POST는 무조건 심플 리퀘스트"라고 생각하기 쉽지만, 메서드 외에 헤더·콘텐츠 타입 조건도 함께 봐야 한다.

꼬리 질문


19. HTTP는 무상태인데 로그인 상태는 어떻게 유지하나요

핵심 답변 (골드 수준)

HTTP는 무상태라서 요청마다 사용자를 다시 식별할 인증 정보가 필요하다. 로그인에 성공하면 서버는 클라이언트에게 세션 아이디나 토큰 같은 인증 정보를 발급하고, 클라이언트는 이후 요청마다 그 값을 함께 보낸다.

아이디나 비밀번호를 직접 저장하지 않는 이유는 민감 정보 노출 위험을 줄이기 위해서다.

포인트:

핵심 키워드 3가지: 무상태, 세션 아이디 또는 토큰, 민감 정보 제외.

답변 레벨 차이

레벨 답변 요지 평가
브론즈 "로그인하면 브라우저가 로그인 정보를 저장해 두고 다음 요청부터 그걸로 유지" 질문의 전제(무상태가 왜 문제인지)를 놓쳤고, "로그인 정보"는 비밀번호를 평문 저장하는 것처럼 들려 위험하다
실버 "무상태라 기억 못 하니 로그인 성공 시 쿠키에 값을 저장하고 요청마다 보내 식별" 전제는 잡았으나 쿠키에 무엇을 담는지(세션 ID/토큰, 민감 정보 아님)가 빠졌다
골드 위 핵심 답변 필요성 → 세션/토큰 두 방식 → 민감 정보 배제의 이유까지

꼬리 질문


20. 인증과 인가는 어떻게 다른가요

핵심 답변 (골드 수준)

인증(Authentication)은 사용자가 누구인지 확인하는 과정이고, 인가(Authorization)는 인증된 사용자가 특정 리소스나 기능에 접근할 권한이 있는지 확인하는 과정이다. 인증이 먼저 신원을 확정하고, 인가는 그 신원에 어떤 권한이 연결되는지 판단한다.

구현에서는 역할 단위로 권한을 묶는 RBAC이나 토큰의 접근 범위를 담는 OAuth 스코프로 인가를 표현할 수 있다. 토큰을 가지고 있다는 사실과, 그 토큰으로 특정 작업을 할 권한이 있다는 사실은 별개로 봐야 한다.

실무 감각: 실무에서는 인증보다 인가 로직이 복잡한 경우가 훨씬 많다 — 사용자마다 역할이 다르고 API마다 필요한 권한이 다르기 때문이다. 관리자만 접근 가능한 화면, 본인만 수정 가능한 정보처럼 "누구인지"와 "무엇을 할 수 있는지"는 완전히 다른 문제다.

핵심 키워드 3가지: 인증(신원 확인), 인가(권한 확인), 권한 매핑 방식(RBAC 또는 OAuth 스코프).

답변 레벨 차이

레벨 답변 요지 평가
실버 "인증은 누구인지 확인, 인가는 어떤 기능·데이터에 접근할 수 있는지 확인" 기본 개념은 맞지만 정의만 말한 답변. 권한이 실제로 어디에 저장되고 무엇을 보고 허용/거부하는지가 없다
골드 위 핵심 답변 정의 + 실제 권한 관리 방식(RBAC/스코프) + 토큰 소지 ≠ 권한이라는 구분까지

꼬리 질문


21. 쿠키와 세션은 어떻게 다른가요

핵심 답변 (골드 수준)

쿠키와 세션의 핵심 차이는 클라이언트 저장과 서버 저장이다.

쿠키에 민감 정보를 직접 노출하면 노출·변조 위험이 있으므로 보안 옵션을 사용한다.

옵션 역할
HttpOnly 자바스크립트 접근 차단
Secure HTTPS 전송만 허용
SameSite 크로스 사이트 요청에서 쿠키 전송 제한

세션은 실제 정보가 서버에 있어 제어하기 쉽지만, 사용자가 늘수록 서버가 관리해야 하는 세션 저장소 비용이 커진다.

포인트:

핵심 키워드 3가지: 클라이언트 저장 vs 서버 저장, 세션 아이디는 쿠키로 전달, 보안 옵션과 저장소 비용.

답변 레벨 차이

레벨 답변 요지 평가
브론즈 "쿠키는 브라우저 저장, 세션은 서버 저장. 그래서 세션이 더 안전" 둘을 너무 대립시킨다. 세션 아이디가 쿠키로 오간다는 연결이 없으면 암기에 그친다
실버 "쿠키는 클라이언트 키-밸류 저장, 세션은 서버에 정보 저장 후 세션 아이디만 쿠키로 주고받아 상대적으로 안전" 연결 구조까지 좋으나 쿠키 보안 옵션과 세션의 비용(단점)이 빠졌다
골드 위 핵심 답변 동작(연결 구조) + 옵션(HttpOnly/Secure/SameSite) + 비용(저장소)의 3박자

꼬리 질문


22. JWT는 어떤 구조이고 왜 액세스 토큰과 리프레시 토큰으로 나누나요

핵심 답변 (골드 수준)

JWT는 헤더, 페이로드, 시그니처 세 부분으로 이루어진 서명 기반 토큰이다.

토큰을 나누는 이유:

핵심 키워드 3가지: 헤더·페이로드·시그니처, 서명과 클레임 검증, 위험과 사용성의 절충.

답변 레벨 차이

레벨 답변 요지 평가
브론즈 "로그인할 때 서버가 발급해 주는 토큰. 요청 시 보내면 인증된 사용자로 처리" JWT라는 이름을 쓴 이유(구조·서명)가 없다. "JWT"를 "토큰"으로 바꿔도 같은 말이 된다
실버 "헤더·페이로드·시그니처로 이루어진 토큰. 발급 후 요청마다 검증. 액세스/리프레시로 나눠 사용" 구조는 나왔지만 ① 무엇을 검증하는지(서명·exp) ② 왜 나누는지(이유)가 없다
골드 위 핵심 답변 서명 기반 검증, 페이로드 = 인코딩(민감 정보 금지), 토큰 분리 = 탈취 위험 vs 사용성 절충

꼬리 질문


23. JWT가 탈취되면 어떻게 대응하고 탈취 여부는 어떻게 판단하나요

핵심 답변 (골드 수준)

JWT 액세스 토큰을 별도 저장소 없이 검증하는 구조라면 발급 후 만료 전까지 즉시 폐기하기 어렵다. 그래서:

핵심 키워드 3가지: 짧은 만료 시간, 블랙리스트와 jti, 이상 징후 판단의 구체적 방법론.

답변 레벨 차이

레벨 답변 요지 평가
실버 "탈취되면 만료까지 막기 어려우니 액세스 토큰 만료를 짧게 두고, 리프레시 토큰은 서버에서 폐기 가능하게 관리. 탈취는 평소와 다른 접속 패턴으로 의심" 한계 인식과 방향은 맞지만 ① 즉시 차단이 필요할 때 무엇을 추가하는지(블랙리스트) ② "평소와 다른 패턴"의 구체적 기준이 없다
골드 위 핵심 답변 한계 인정 → 블랙리스트/jti라는 실무 장치 → 구체적 탐지 신호 → 확인 시 조치(리프레시 폐기 + 강제 로그아웃)

실전 사례: 토스뱅크 면접에서 JWT 기본 질문 후 탈취 대응으로 이어졌고, 발급·검증까지는 답했지만 "탈취를 어떻게 의심하고 어떻게 해결할 건가"에서 막혔던 경험이 소개되었다. 이 질문은 JWT의 약점을 제대로 아는지 확인하는 질문이다.

꼬리 질문


24. 리프레시 토큰을 서버에 저장한다면 세션과 무엇이 다른가요

핵심 답변 (골드 수준)

리프레시 토큰을 서버에 저장하면 JWT 방식도 완전한 무상태가 아니라 부분 상태성을 갖는다. 다만 세션과 완전히 같지는 않다. 차이는 조회 시점이다.

그래서 세션처럼 서버 제어 지점은 생기지만, 매 요청의 인증 방식은 여전히 토큰 검증에 가깝다. 대신:

결국 차이는 상태를 어디까지 저장하고, 언제 조회하느냐에 있다.

핵심 키워드 3가지: 부분 상태성, 조회 시점의 차이, 폐기와 비용. "상태가 있냐 없냐"보다 그 상태를 언제 어떻게 보느냐가 더 중요하다.

답변 레벨 차이

레벨 답변 요지 평가
실버 "리프레시 토큰을 서버에 저장하면 JWT도 상태를 가져 세션과 비슷해진다. 그래도 액세스 토큰은 저장소 조회 없이 검증할 수 있다는 차이가 있다" 부분 상태성 인정과 차이는 잡았지만 "비슷하지만 다르다"는 모호하다. 구체적인 조회 시점의 차이를 말해야 납득된다
골드 위 핵심 답변 부분 상태성 인정 + 매 요청 조회(세션) vs 재발급·강제 로그아웃 시 조회(JWT) + 비용(전송 크기, 블랙리스트)

배경: 이 질문(역시 토스뱅크 꼬리 질문 사례)은 JWT를 무조건 무상태라고 외운 답변을 걸러내는 좋은 질문이다. 리프레시 토큰을 서버에 저장하는 순간 JWT 방식에도 상태가 생긴다.

꼬리 질문


25. OAuth 2.0의 동작 원리를 설명해 주세요

핵심 답변 (골드 수준)

OAuth 2.0은 사용자의 비밀번호를 클라이언트에 넘기지 않고 특정 자원에 대한 접근 권한 위임을 처리하는 인가 프레임워크다. 본질은 인증(로그인 기능)이 아니라 권한 위임이다.

네 가지 주체:

주체 역할
리소스 오너 (Resource Owner) 자원의 주인 (사용자)
클라이언트 (Client) 자원 접근을 요청하는 애플리케이션
인가 서버 (Authorization Server) 동의를 확인하고 토큰을 발급
리소스 서버 (Resource Server) 실제 자원을 제공

대표적인 흐름인 Authorization Code Grant:

  1. 사용자가 동의하면 클라이언트가 먼저 **일회성 인가 코드(authorization code)**를 받는다.
  2. 클라이언트는 이 코드를 액세스 토큰으로 교환한다. 이때 클라이언트 시크릿이나 PKCE로 요청 주체를 확인한다.
  3. 이후 클라이언트는 액세스 토큰으로 리소스 서버에 요청해 허용된 범위(scope)의 자원에 접근한다.

핵심 키워드 3가지: 접근 권한 위임, 4가지 주체(리소스 오너·클라이언트·인가 서버·리소스 서버), Authorization Code Grant.

답변 레벨 차이

레벨 답변 요지 평가
브론즈 "구글·카카오 계정으로 로그인하는 기능. 다른 서비스 계정으로 우리 서비스에 로그인하게 해준다" 사용자가 보는 장면만 말했다. OAuth의 본질(비밀번호를 넘기지 않는 권한 위임 인가 프레임워크)을 완전히 놓친다
실버 "비밀번호를 직접 주지 않고 자원 접근 권한을 위임하는 프로토콜. 동의하면 인가 서버에서 토큰을 받아 자원에 접근" 본질은 잡았으나 ① 누가 무엇을 하는지(4주체) ② 코드 → 토큰 교환 단계가 빠졌다
골드 위 핵심 답변 권한 위임 관점 + 4주체 분리 + 인가 코드 → 토큰 교환(시크릿/PKCE) 순서까지

꼬리 질문


26. SSO는 어떤 구조로 동작하며 OAuth 2.0과는 어떤 관계인가요

핵심 답변 (골드 수준)

SSO는 한 번의 인증 결과를 여러 서비스가 신뢰하여 추가 로그인 없이 접근하게 하는 단일 로그인 구조다.

포인트:

핵심 키워드 3가지: 단일 로그인, IdP와 서비스 프로바이더, SAML/OIDC와 OAuth 2.0의 차이 — SSO는 로그인 구조, OAuth 2.0은 권한 위임 프레임워크.

답변 레벨 차이

레벨 답변 요지 평가
실버 "한 번 로그인하면 여러 서비스를 추가 로그인 없이 쓸 수 있게 해주는 방식. OAuth로 구현하는 경우가 많다" 사용자 경험 설명은 맞지만 '어떻게(How)'가 빠졌다. 특히 "OAuth로 구현"은 위험한 표현 — OAuth는 인가 프레임워크이므로 OIDC 같은 인증 표준까지 구분해야 한다
골드 위 핵심 답변 IdP 중심 구조 + 표준(SAML/OIDC) + OAuth 2.0과의 관계 구분

실무 배경: 채널톡에서도 여러 내부 도구·연동 서비스로 이동할 때 재로그인하지 않기 위해 SSO를 많이 쓴다. 사용자에게는 편하지만, 뒤에서는 중앙 인증 주체를 여러 서비스가 신뢰하는 구조다.

꼬리 질문


27. 웹소켓이란 무엇인가요 — HTTP와의 차이와 연결 과정

핵심 답변 (골드 수준)

웹소켓은 클라이언트와 서버가 한 번 연결을 수립한 뒤 같은 연결에서 계속 메시지를 주고받는 양방향 지속 연결 프로토콜이다.

클라이언트                                서버
    │── HTTP 요청 (웹소켓으로 전환 요청) ──▶│
    │◀── 101 Switching Protocols ────────│  전환 수락
    │                                    │
    │◀═══ 기존 TCP 연결이 웹소켓 연결로 전환 ═══▶│
    │◀═══ 웹소켓 프레임(텍스트/바이너리)으로 양방향 메시지 ═══▶│
  1. 클라이언트가 HTTP 요청으로 웹소켓으로 전환하고 싶다고 알린다.
  2. 서버가 이를 수락하면 101 Switching Protocols 응답을 돌려준다.
  3. 이후 그 TCP 연결이 웹소켓 연결로 전환되고, 텍스트나 바이너리 데이터를 웹소켓 프레임으로 주고받는다.

포인트:

핵심 키워드 3가지: 양방향 지속 연결, HTTP 업그레이드와 101 Switching Protocols, 웹소켓 프레임.

답변 레벨 차이

레벨 답변 요지 평가
브론즈 "실시간 양방향 통신 프로토콜. HTTP는 요청-응답인데 웹소켓은 연결을 계속 유지하며 주고받는다" 키워드는 맞지만 결과만 말한다. 왜 HTTP만으로 실시간 수신이 부담인지, 연결이 어떤 과정으로 만들어지는지 없음
실버 "HTTP는 요청해야 응답하는 구조라 실시간 수신엔 폴링/롱 폴링이 필요. 웹소켓은 연결을 유지하며 양방향 메시지를 주고받아 채팅·알림에 적합" 필요성과 차이는 좋으나 연결 전환 과정(처음엔 HTTP였다가 어떻게 웹소켓이 되는지)이 모호하다
골드 위 핵심 답변 구조(양방향 지속 연결) + 업그레이드 핸드셰이크 흐름 + 전환 이후 단위(프레임)

꼬리 질문


28. 웹소켓 연결 유지 메커니즘(핑퐁)과 STOMP를 설명해 주세요

핵심 답변 (골드 수준)

핑퐁(하트비트): 웹소켓은 장시간 연결을 유지하므로, 상대가 살아 있는지 확인하고 중간 장비의 유휴 연결 종료를 줄이기 위한 핑퐁 하트비트가 필요하다. 서버나 라이브러리가 핑(ping)을 보내면 상대가 퐁(pong)으로 응답하고, 애플리케이션 레벨에서 별도 하트비트 메시지로 같은 목적을 구현하기도 한다.

STOMP: 웹소켓 위에서 사용하는 메시징 서브 프로토콜이다. CONNECT, SUBSCRIBE, SEND 같은 명령(command)과 헤더, 본문 구조를 제공하고, 데스티네이션(destination) 기반 pub/sub을 표현할 수 있어 채팅방이나 알림 주제처럼 구독 단위로 메시지를 전달하기 좋다.

역할 분리: 기본 웹소켓이 데이터 통로라면, STOMP는 그 위에 메시지 형식과 라우팅 규칙을 얹는 역할이다.

포인트:

핵심 키워드 4가지: 핑퐁 하트비트, 유휴 연결 종료 완화, STOMP 명령·헤더·본문, 데스티네이션 기반 pub/sub.

답변 레벨 차이

레벨 답변 요지 평가
실버 "연결이 살아있는지 확인하려고 핑퐁 프레임을 주고받는다. STOMP는 웹소켓 위에서 명령·헤더·본문 형식으로 메시지를 구조화하는 프로토콜" 방향은 맞으나 ① 핑퐁이 생존 확인 이상의 목적(유휴 종료 완화)이 있는지 ② STOMP 형식으로 무엇을 얻는지(구독/라우팅)가 빠졌다
골드 위 핵심 답변 운영 장치로서의 핑퐁 + pub/sub 라우팅으로서의 STOMP + 통로/규칙의 역할 분리

꼬리 질문


29. SSE의 개념과 특징, 웹소켓과의 차이를 설명해 주세요

핵심 답변 (골드 수준)

SSE(Server-Sent Events)는 서버에서 클라이언트로 실시간 데이터를 계속 보내기 위한 단방향 스트리밍 기술이다.

포인트:

핵심 키워드 4가지: 단방향 스트리밍, HTTP 응답 스트림, EventSource와 text/event-stream, 자동 재연결과 SSE의 한계.

답변 레벨 차이

레벨 답변 요지 평가
브론즈 "서버에서 클라이언트로 실시간으로 보내주는 기술. 웹소켓과 비슷한데 좀 더 간단" "비슷하다"에서 멈추면 구분 기준이 없다. 핵심(단방향 스트림)이 빠져 웹소켓의 쉬운 버전으로 이해한 것처럼 들린다
실버 "서버→클라이언트 단방향. 웹소켓은 양방향이라는 게 가장 큰 차이. 일반 HTTP를 그대로 써서 구현이 간단" 방향성 구분은 좋으나 실제 동작(EventSource 연결, text/event-stream 응답)이 빠졌다
골드 위 핵심 답변 방향성 기준 + HTTP 응답 스트림 구조 + 자동 재연결 + 한계까지

실전 팁: "실시간 알림을 웹소켓으로 풀겠다"고 답하면 "서버가 알림을 보내기만 하면 되는데 왜 양방향이 필요하죠?"라고 되물을 수 있다. 실시간이면 무조건 웹소켓이라는 자동 답변을 멈추고 단방향 서버 푸시 선택지를 고려해야 한다.

꼬리 질문


30. 폴링 / 롱 폴링 / SSE를 비교하고 SSE 라이프 사이클을 설명해 주세요

핵심 답변 (골드 수준)

세 방식의 비용 구조 비교:

방식 동작 비용 구조
숏 폴링 클라이언트가 정해진 주기마다 요청 새 데이터가 없어도 빈 응답이 반복된다
롱 폴링 새 데이터가 생기거나 타임아웃까지 서버가 응답을 붙잡아 둠 빈 응답은 줄지만 응답이 끝날 때마다 다시 요청해야 한다
SSE 하나의 HTTP 응답 스트림을 유지해 서버 이벤트를 계속 내려줌 반복 요청 비용 자체를 줄인다

셋 다 "실시간 비슷한 것"이 아니라 비용의 종류가 다른 방식이다.

SSE 라이프 사이클:

  1. 클라이언트가 EventSource를 생성해 서버에 연결 요청을 보낸다.
  2. 서버가 text/event-stream 응답 스트림을 열어둔다.
  3. 이후 서버는 data: 형식의 이벤트를 계속 보내고, 클라이언트는 이를 message 이벤트로 받는다.
  4. 연결이 끊기면 브라우저가 자동으로 재연결을 시도하고, 서버는 retry 간격을 지정할 수 있다.
  5. 서버가 이벤트 id와 재전송을 지원하면, 클라이언트는 Last-Event-ID로 마지막 이벤트 이후부터 이어받을 수 있다.

주의: 자동 재연결이 곧 자동 이어받기는 아니다. 서버가 이벤트 id를 내려주고 그 id 이후 이벤트를 다시 보내줄 수 있어야 Last-Event-ID 이어받기가 가능하다. 이 조건을 붙이면 기술적으로 훨씬 정확한 답이 된다.

핵심 키워드 4가지: 숏 폴링, 롱 폴링, SSE 지속 스트림, 자동 재연결과 Last-Event-ID 이어받기.

답변 레벨 차이

레벨 답변 요지 평가
실버 "숏 폴링은 일정 간격 반복 요청, 롱 폴링은 새 데이터가 생길 때까지 응답을 미뤘다가 전달, SSE는 한 번 연결하면 계속 흘려보내는 스트림이라 반복 요청 불필요" 기본 비교는 되지만 ① 비용의 종류가 어떻게 달라지는지 ② 질문에 포함된 SSE 라이프 사이클이 빠졌다
골드 위 핵심 답변 비용 구조를 방식별로 다르게 설명 + 라이프 사이클을 순서대로 + Last-Event-ID를 조건부로 정확히 설명

실전 팁: "출석 현황 실시간 갱신에 폴링을 쓰셨는데 왜 SSE를 고려하지 않으셨나요?" 같은 질문이 나올 수 있다. 이때 폴링이 틀렸다는 식으로 답하면 안 된다 — 갱신 주기가 길고 구현을 단순하게 가져가고 싶다면 폴링도 충분히 합리적이다. 면접관이 보는 것은 선택의 사실이 아니라 왜 그 선택이 그 상황에 맞았는지다.

실시간 통신 섹션 총정리 — 선택 기준

면접에서는 도구 이름보다 선택 기준이 훨씬 중요하다. 양방향이 필요한지, 서버 푸시만 필요한지, 갱신 주기는 어떤지까지 말할 수 있으면 실시간 통신 질문을 한 묶음으로 정리한 것이다.