jisung-02notes
← Archive

풀스택서비스네트워킹 — 핵심 요약

경희대 풀스택서비스네트워킹(이성원 교수님) 전체 범위(L01~L10) 압축본.

jisung-02

경희대 풀스택서비스네트워킹(이성원 교수님) 전체 범위(L01~L10) 압축본. 관통하는 축: OSI 계층 → 소켓 → 메시징 → HTTP의 진화(1.1 → 2 → 3). 핵심 질문은 항상 “HTTP/1.1의 한계를 어떻게 푸는가”.


L01 OSI 아키텍처 개요

  • 통신을 7계층으로 분리(상호운용성용 “교과서”). 실제 인터넷은 압축한 TCP/IP 사용.
  • 규모별 분류: BAN ⊂ PAN ⊂ LAN ⊂ MAN ⊂ WAN. LAN=사적 소유+제한 지역, WAN=LAN/MAN을 잇는 연결선.
  • 계층화의 핵심: 각 층은 아래 층의 서비스만 쓰고 위 층에 서비스 제공, 캡슐화로 헤더만 덧붙임.

L02 OSI L1~L3

  • L2(MAC): 공유 매체 충돌 처리 — 유선 CSMA/CD(감지), 무선 CSMA/CA(회피). Best-Effort라 실패 가능.
  • L3(IP): Connectionless·Memoryless → 순서·도착 보장 못 함. IP 주소·서브넷(232−n2^{32-n} 호스트).
  • 결론: 신뢰성은 아래 계층이 아니라 L4(TCP)가 책임진다 → 개발자는 하위 계층을 믿으면 안 됨.

L03 OSI L4 전송계층

  • 전송 범위: L2 Hop-by-Hop / L3 Host-to-Host / L4 Process-to-Process(포트).
  • 포트 16bit(065535): Well-known 01023, Ephemeral 1024~. 연결 = 4-튜플{SrcIP,SrcPort,DstIP,DstPort}.
  • UDP = IP + 포트(최소 오버헤드, 비신뢰). TCP = 연결·ACK/재전송·흐름(rwnd/swnd)·혼잡제어(Tahoe/Reno).
  • TCP 3-way handshake(연결)/4-way(종료), SYN Flooding 공격.

L04 소켓

  • 소켓 = OS가 만든 통신 엔드포인트(시스템 자원, file descriptor). Berkeley Socket API.
  • 함수 순서: 서버 socket→bind→listen→accept, 클라 socket→connect. 서버=passive, 클라=active.
  • 확장 단계: 1:1 → 1:N(스레드, ThreadingMixIn) → N:M(브로드캐스트 채팅). UDP는 #REG/#DEREG로 주소 관리.

L05 ZeroMQ

  • brokerless 비동기 메시징 라이브러리(애플리케이션 계층). Zero = broker·administration·latency·cost.
  • send() 즉시 반환(비동기), Multi-Transport 추상화(tcp/ipc/inproc).
  • Bind vs Connect 기준 = 안정성(오래 사는 쪽이 bind).
  • 4대 패턴: REQ-REP(동기 lockstep) / PUB-SUB(비동기 단방향, 접두사 필터) / PUSH-PULL(라운드로빈 분배) / DEALER-ROUTER(비동기 양방향, ID 프레임).
  • 참고: RabbitMQ(소비 시 삭제) vs Kafka(로그 누적).

L06 HTTP/1.1

  • WWW 기본 프로토콜(HTML·URL·HTTP). TCP 위 request-response 트랜잭션 모델.
  • 리소스(Static vs Dynamic), MIME 주타입/하위타입, URI(URL 위치 / URN 이름).
  • 메서드·상태코드, HTTPS·프록시.
  • HTTP/1.1의 4대 한계 = HTTP/2·3 등장 배경: ① 매 요청 연결 반복 ② HoL Blocking ③ Fat Header(중복·쿠키) ④ 서버 푸시 불가.

L07 gRPC

  • RPC = 원격 함수를 로컬처럼 호출. 핵심은 stub(원격을 숨기는 프록시). 3요소 = RPC Protocol + IDL + stub.
  • gRPC = HTTP/2 + Protobuf, REST = HTTP/1.1 + JSON.
  • Protobuf가 작은 이유: 필드 이름 대신 필드 번호 + Varint 가변 길이.
  • 4가지 타입: Unary / Server-streaming / Client-streaming / Bidirectional. stream 키워드 위치, yield(스트림 송신) vs return(단일).
  • 용도: 내부 S2S·모바일 백엔드(브라우저 직접 호출 불가).

L08 HTTP/2

  • 의미(메서드·상태코드·헤더)는 유지, 표현만 바이너리 프레이밍으로 교체. 모태 = 구글 SPDY.
  • Binary Framing Layer: 헤더→헤더 프레임, 바디→데이터 프레임.
  • 해결책 4종 ↔ HTTP/1.1 한계: 멀티플렉싱(단일 TCP에 스트림 다중화→HoL 완화) / 우선순위 / HPACK 헤더 압축 / 서버 푸시.
  • 한계: TCP 위라 전송 계층 HoL Blocking은 여전(→ QUIC이 해결).

L09 WebRTC

  • 브라우저 간 P2P 실시간 미디어. 미디어는 피어 직접 전송, 시그널링 서버는 SDP·ICE 후보만 중계(미디어 안 지나감).
  • NAT 우회: ICE(경로 선택) + STUN(내 Public IP:Port 확인) + TURN(중계, P2P 아님). Symmetric NAT가 P2P를 막는 근본 원인.
  • SDP Offer/Answer(코덱·연결정보·방향). 스택: UDP→DTLS→SRTP(미디어)/SCTP(데이터).
  • 단점: P2P라 확장성 약함(N명→연결 폭증, 해결 SFU), B-frame 미사용으로 품질 손해. Simulcast=수신자별 최적 스트림.

L10 QUIC & HTTP/3

  • QUIC = UDP 위에 TLS 1.3·멀티플렉싱·재전송·혼잡제어 통합한 사용자 공간 전송 프로토콜. HTTP/3 = HTTP over QUIC.
  • 핵심 6: ① UDP 기반 ② Connection ID(IP 바뀌어도 유지 = Connection Migration) ③ 독립 스트림(전송 계층 HoL 제거) ④ TLS 1.3 강제 ⑤ 0/1-RTT(early data) ⑥ Ossification 회피(헤더 암호화로 미들박스 차단).
  • 헤더 압축 = QPACK(HPACK의 QUIC 적응판).

한 줄 정리

OSI로 계층을 나누고(L0103) 소켓으로 통신을 코드화(L04) → ZeroMQ로 메시징 패턴(L05) → HTTP/1.1의 한계(HoL·Fat Header·푸시 불가, L06)를 gRPC·HTTP/2가 바이너리·다중화로 풀고(L0708) → 실시간은 P2P WebRTC(L09), 전송 계층 HoL은 UDP 기반 QUIC/HTTP3가 끝낸다(L10).