풀스택서비스네트워킹 — 핵심 요약
경희대 풀스택서비스네트워킹(이성원 교수님) 전체 범위(L01~L10) 압축본.
경희대 풀스택서비스네트워킹(이성원 교수님) 전체 범위(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 주소·서브넷( 호스트).
- 결론: 신뢰성은 아래 계층이 아니라 L4(TCP)가 책임진다 → 개발자는 하위 계층을 믿으면 안 됨.
L03 OSI L4 전송계층
- 전송 범위: L2 Hop-by-Hop / L3 Host-to-Host / L4 Process-to-Process(포트).
- 포트 16bit(0
65535): 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(스트림 송신) vsreturn(단일). - 용도: 내부 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로 계층을 나누고(L01
03) 소켓으로 통신을 코드화(L04) → ZeroMQ로 메시징 패턴(L05) → HTTP/1.1의 한계(HoL·Fat Header·푸시 불가, L06)를 gRPC·HTTP/2가 바이너리·다중화로 풀고(L0708) → 실시간은 P2P WebRTC(L09), 전송 계층 HoL은 UDP 기반 QUIC/HTTP3가 끝낸다(L10).