포스트

프로토콜과 계층모델

프로토콜과 계층모델

프로토콜(Protocol)

프로토콜은 서로 다른 시스템에 있는 두 개체(Entity)가 효율적이고 정확하게 통신하기 위해 합의한 ‘규칙과 약속의 집합’입니다.

두 서버가 통신할 때 가장 문제가 되는 것은 ‘데이터가 유실되는 것’보다 ‘서로 다른 상태(State)를 가지고 있다고 착각하는 것’ 입니다. 데이터를 보냈다고 생각하는데, 상대방은 받은 적이 없다고 대기하는 상황(데드락 등)이 발생할 수 있기 때문입니다.

따라서 프로토콜은 단순한 약속이 아니라, 통신하는 두 개체가 서로 동일한 상태를 유지하기 위해 주고받는 메시지의 순서와, 그 메시지를 받았을 때 수행해야 할 행동(Action)을 엄격하게 정의한 ‘유한 상태 기계(FSM, Finite State Machine)’입니다.

프로토콜의 3가지 핵심 요소는 다음과 같습니다.

  • 구문(Syntax) : 데이터의 형식, 구조, 순서를 의미합니다.
  • 의미(Semantics) : 각 비트 패턴이 어떤 의미를 가지며, 오류 발생 시 어떻게 제어할 것인가를 뜻합니다.
  • 타이밍(Timing) : 데이터를 얼마나 빠르게 보낼 것인지, 언제 보낼 것인지를 맞춥니다. (흐름 제어)

Stateful vs Stateless

시스템 아키텍처를 설계할 때 어떤 프로토콜을 선택하느냐는 서버의 비용과 직결됩니다. 여기서 가장 중요한 기준이 바로 상태(State) 유지 여부입니다.

상태 유지 프로토콜(Stateful Protocol)

서버가 클라이언트와의 연결 상태(세션)를 메모리에 기억하고 유지합니다.

통신의 신뢰성이 높고 복잡한 작업이 가능하지만, 클라이언트가 많아질수록 서버의 메모리가 고갈됩니다. 또한 앞단에 로드밸런서를 둘 때 항상 같은 서버로 트래픽을 보내줘야 하는 ‘세션 점착성(Sticky Session)’ 문제로 인해 확장이 까다롭습니다.

  • TCP, FTP

무상태 프로토콜(Stateless Protocol)

서버는 클라이언트의 이전 요청을 전혀 기억하지 않습니다. 각각의 요청은 완전히 독립적입니다.

서버가 상태를 저장하지 않으므로 수천 대의 서버로 무한대 확장이 가능(Scale-out)하며 매우 가볍습니다. 단점은, 사용자가 로그인 상태를 유지하려면 매 요청마다 증표(Cookie, JWT Token 등)를 데이터 헤더에 계속 끼워 보내야 하는 오버헤드가 발생합니다.

  • HTTP, UDP

프로토콜 오버헤드와 MTU(Maximum Transmission)
프로토콜을 겹겹이 사용할수록(이메일 전송 시 Application → TCP → IP → Ethernet) 각 계층의 프로토콜이 자신의 제어 정보인 헤더(Header)를 데이터 앞에 붙이는 캡슐화(Encapsulation)를 진행합니다.

  • 오버헤드 : TCP 헤더 기본 20바이트, IPv4 헤더 기본 20바이트, 이더넷 프레임 헤더 14바이트… 이렇게 데이터보다 헤더가 커질 수 있습니다.
  • MTU(최대 전송 단위) : 한 번에 물리적 링크(랜선)로 통과시킬 수 있는 최대 패킷의 크기입니다. 이더넷의 기본 MTU는 보통 ‘1500바이트’입니다.

내가 보내려는 데이터가 너무 크면, 전송 계층이나 네트워크 계층의 프로토콜이 이 데이터를 MTU 사이즈에 맞게 잘게 쪼개는 작업(단편화, Fragmentation)을 수행합니다. 이 과정에서 CPU 자원이 소모되고 패킷 유실률이 높아지므로, MTU 사이즈를 튜닝(Jumbo Frame 등)하여 성능을 최적화시켜야 합니다.

왜 계층화인가?(Layered Architecture/분할 정복)

복잡한 통신 과정을 논리적인 여러 개의 층(Layer)으로 쪼갠 설계 기법입니다.

  • 추상화 : 각 계층은 자신만의 독립적인 역할을 수행하며, 바로 아래 계층이 제공하는 기능(Interface)만 호출해서 사용합니다. 하위 계층이 내부적으로 어떻게 동작하는지는 철저히 숨겨집니다. (Black-box)
  • 유연성과 모듈화 : 물리적인 랜선을 광케이블로 바꾸더라도(L1 변경), 우리가 만든 웹 애플리케이션(L7) 코드는 단 한 줄도 수정할 필요가 없습니다. 장애 발생 시 문제의 범위를 특정 계층으로 좁혀 격리(Troubleshooting)하기 쉽습니다.
  • 오버헤드 : 데이터가 불필요하게 여러 단계를 거쳐야 하므로, 단일 통짜 아키텍처(Monolithic)에 비해 처리 속도(Processing Delay)가 느려지고 구조가 복잡해집니다.

OSI 7계층

  • Open Systems Interconnection Reference Model

1980년대, 각 컴퓨터 제조사는 자신들만의 독자적인 통신 규격을 사용했습니다. 즉, IBM 컴퓨터는 애플 컴퓨터와 통신할 수 없었습니다. 이러한 호환성 문제를 해결하기 위해 국제표준화기구(ISO)에서 발표한 개념적 표준 아키텍처가 바로 OSI 7계층입니다.

관심사의 분리(Separation of Concerns) : 복잡한 네트워크 통신 과정을 7개의 독립적인 모듈(계층)로 나누었습니다. 각 계층은 하위 계층이 제공하는 기능을 가져다 쓰기만 할 뿐, 내부적으로 어떻게 구현되었는지는 알 필요가 없는 ‘추상화(Abstraction)’ 가 적용되어 있습니다.

  • 케이블을 구리선에서 광랜으로 바꾸더라도(1계층 변경), 웹 브라우저(7계층)의 코드는 단 한 줄도 수정할 필요가 없는 유연성과 확장성을 제공합니다.
  • 데이터를 보낼 때마다 7개의 계층을 모두 거치며 헤더(Header)를 붙이고 떼어내야 하므로, 처리 오버헤드(Processing Overhead)가 발생합니다.

하위 계층부터 상위 계층까지

하드웨어와 가까운 하위 계층(1~3)부터, 사용자 응용 프로그램과 가까운 상위 계층(4~7)으로 구분되며, 데이터가 각 계층에서 처리되는 단위를 PDU(Protocol Data Unit) 라고 부릅니다.

하위 계층: 물리적 데이터 전달

  • L1. 물리 계층(physical Layer)
    • 데이터를 전기 신호, 빛, 무선 전파로 변환하여 실제 물리적 매체(케이블)를 통해 전송합니다. 논리적 오류를 검증하거나 제어하지 않고 오직 신호를 밀어내는 데 집중합니다.
    • PDU : Bit(비트 - 0과 1)
    • 랜선(UTP), 광케이블, 리피터, 더미 허브
  • L2. 데이터 링크 계층(Data Link Layer)
    • 물리적인 선으로 직접 연결된 동일한 네트워크(LAN) 내의 인접 노드 간에 신뢰성 있는 데이터 전송을 보장합니다. 물리 계층에서 발생할 수 있는 신호의 노이즈나 오류를 감지(FCS)하고 수정합니다.
    • MAC 주소를 사용하여 네트워크 내 장치 식별 (MAC 주소를 추가하여 LAN에서 데이터를 송수신)
    • PDU : Frame(프레임)
    • L2 스위치, 이더넷(Ethernet), Wi-Fi(IEEE 802.11)
  • L3. 네트워크 계층(Network Layer)
    • 서로 다른 네트워크(LAN과 LAN)를 넘어, 출발지에서 최종 목적지까지 데이터가 빠르고 정확하게 도달할 수 있도록 최적의 경로를 탐색(Routing) 합니다.
    • IP 주소를 기반으로 통신 수행 (IP 주소를 추가하고 라우팅을 통해 목적지까지 패킷 전달)
    • PDU : Packet(패킷) 또는 Datagram
    • 라우터(Router), L3 스위치, IPv4, IPv6, ICMP(Ping), OSPF, BGP

전송 계층: 종단 간 제어

  • L4. 전송 계층(Transport Layer)
    • 통신망을 통과한 데이터가 최종 목적지의 어떤 애플리케이션(프로세스)으로 들어가야 하는지 식별하고, 종단 간(End-to-End) 통신의 신뢰성을 제어(흐름 제어, 오류 복구)합니다.
    • 데이터를 패킷 단위로 분할하고 포트 번호를 추가
    • PDU : Segment(세그먼트 - TCP) 또는 Datagram(UDP)
    • TCP(신뢰성 보장), UDP(속도 중심), L4 로드밸런서

상위 계층: 애플리케이션 지원

TCP/IP 아키텍처에서는 L5~L7을 모두 합쳐 ‘응용 계층’으로 취급합니다.

  • L5. 세션 계층(Session Layer)
    • 통신하는 두 호스트의 응용 프로그램 간에 세션(연결)을 열고, 유지하고, 동기화하며, 종료하는 역할을 합니다. 통신 중 연결이 끊어지면 체크포인트부터 다시 복구하는 역할을 담당합니다.
    • RPC, SSH(일부), TLS/SSL(L5~L6 혼재)
  • L6. 표현 계층(Presentation Layer)
    • 데이터를 응용 프로그램이 이해할 수 있는 형식으로 변환하거나, 반대로 네트워크로 보낼 수 있는 표준 형식으로 변환합니다. 데이터의 압축(Compression)과 암호화/복호화(Encryption) 가 여기서 수행됩니다.
    • JPEG, MPEG, ASCII, SSL/TLS(암호화)
  • L7. 응용 계층(Application Layer)
    • 사용자가 네트워크에 접근할 수 있도록 UI와 서비스를 제공하는 최상위 계층입니다. 우리가 매일 사용하는 웹 브라우저, 이메일 클라이언트 등이 이 계층의 프로토콜을 사용하여 데이터를 생성합니다.
    • PDU : Data/Message
    • HTTP(웹), HTTPS, FTP(파일 전송), SMTP(이메일), DNS(도메인 이름 해석)

캡슐화와 역캡슐화(Encapsulation&Decapsulation)

계층화된 아키텍처에서 데이터가 위아래로 이동할 때, 프로토콜들이 데이터를 포장하고 해체하는 실질적인 매커니즘입니다.

  • 캡슐화 : 송신자가 데이터를 보낼 때, 상위 계층에서 하위 계층으로 내려가며 각 프로토콜이 자신의 제어 정보인 ‘헤더(Header)’를 앞단에 추가합니다.
  • 역캡슐화 : 수신자는 반대로 하위 계층에서 상위 계층으로 올라가며 자신에게 해당되는 헤더를 읽어보고 제거한 후, 순수한 데이터(Payload)만 위로 올립니다.

각 계층이 독집적으로 자신의 상태를 관리할 수 있게 해 주지만, 덧붙여진 수많은 헤더들로 인해 실제로 보낼 수 있는 순수 데이터의 비율(Goodput)이 줄어드는 대역폭 오버헤드가 발생합니다.

TCP/IP 4계층

OSI 모델은 각 계층의 역할을 엄격하게 나누는 데 집중한 반면, 미국 국방성(DoD)에서 출발한 TCP/IP 모델은 ‘일단 데이터가 목적지까지 빠르고 확실하게 도착하는 것’ 이라는 실용주의를 추구했습니다. 그 결과, 통신의 복잡한 7단계를 실용적인 4개의 계층으로 압축했습니다.

계층별 분류

  • L1. 네트워크 접속 계층(Network Access Layer/ Network Interface Layer)
    • OSI의 복잡한 하드웨어 처리 과정을 하나로 묶었습니다. 노드 간의 물리적인 데이터 전송과 MAC 주소를 통한 에러 검출을 담당합니다.
    • OSI 모델의 1계층(물리)과 2계층(데이터 링크) 역할을 포함
    • PDU : 프레임(Frame)
    • 이더넷(Ethernet), Wi-Fi(IEEE 802.11), MAC, ARP
  • L2. 인터넷 계층(Internet Layer)
    • 수많은 네트워크 망 속에서 데이터가 목적지를 찾아가도록 IP 주소를 부여하고, 라우터를 통해 최적의 경로를 설정(Routing)합니다.
    • 이 곛층의 핵심 프로토콜인 IP(Internet Protocol)는 속도를 위해 데이터의 도착 순서를 보장하지 않으며, 패킷이 중간에 유실되어도 책임지지 않습니다. (Best-Effort) 신뢰성은 윗단(L3 전송 계층)에 일임합니다.
    • OSI 모델의 3계층(네트워크) 역할을 포함
    • PDU : 패킷(Packet) 또는 Datagram
    • IPv4, IPv6, ICMP(Ping 테스트용), OSPF, BGP
  • L3. 전송 계층(Transport Layer)
    • 인터넷 계층이 목적지 ‘컴퓨터(IP)’까지 데이터를 배달했다면, 전송 계층은 그 컴퓨터 안의 ‘어떤 프로그램(Port)’이 데이터를 받을 지 결정합니다. 통신의 신뢰성과 흐름을 통제하는 중추 신경 역할을 합니다.
    • OSI 모델의 4계층(전송) 역할을 포함
    • PDU : 세그먼트(Segment - TCP) / 데이터그램(Datagram - UDP)
      • TCP(Transmission Control Protocol) : 패킷 유실 시 재전송을 요구하고, 순서를 맞추어 완벽한 신뢰성을 보장하지만 속도가 다소 느립니다. (웹, 이메일, 파일 전송)
      • UDP(User Datagram Protocol) : 신뢰성을 포기한 대신 오버헤드가 적어 빠릅니다. (실시간 스트리밍, 온라인 게임, DNS)
  • L4. 응용 계층(Application Layer)
    • 사용자와 가장 가까운 계층입니다. OSI에서 세션을 맺고 데이터를 암호화/압축하는 세세한 과정을 나누지 않고, 애플리케이션 단에서 한 번에 처리하도록 통합했습니다.
    • OSI 모델의 5계층(세션)과 6계층(표현), 7계층(응용) 역할을 포함
    • PDU : 메시지(Message)/데이터(Data)
    • HTTP/HTTPS(웹), DNS(도메인 이름 해석), SSH(원격 접속), SMTP(이메일)

종단 간 원칙(End-to-End Principle)

  • Dumb Network, Smart Terminals : 네트워크의 중심부(라우터, 스위치)는 오로지 데이터를 목적지로 빠르게 전달하는 단순한 일(Best-Effort)에만 집중하게 만들고, 데이터가 깨졌는지 순서가 맞는지를 확인하는 복잡하고 무거운 작업은 네트워크 양 끝단(End)에 있는 사용자 호스트(TCP 계층)에게 일임하는 철학입니다.
  • 장점 : 중앙 네트워크 장비가 상태(State)를 기억할 필요가 없으므로 매우 저렴해지며, 전 세계 수십억 대의 기기를 연결할 수 있는 무한한 확장성(Scalability) 을 얻게 되었습니다.
  • 단점 : 각 끝단(스마트폰, PC, 서버)의 운영체제와 CPU가 패킷을 재조립하고 오류를 복구해야 하는 연산 부담을 짊어지게 됩니다.

마이크로서비스(MSA)와 종단 간 원칙

최근 백엔드 개발의 대세인 MSA를 설계할 때, “Smart endpoints and dumb pipes (똑똑한 종단점과 멍청한 파이프)” 라는 원칙을 강조합니다.

이것은 정확히 앞서 살펴본 TCP/IP의 ‘종단 간 원칙’과 같은 맥락입니다.
서비스 간에 통신할 때, 중간에 있는 메시지 큐(Kafka, RabbitMQ)나 API 게이트웨이(Pipes)에는 복잡한 비즈니스 로직을 넣지 않고 오직 데이터 전달에만 집중하게 만듭니다. 대신, 데이터를 받고 처리하는 각 마이크로서비스(Endpoints)가 데이터를 변환하고 검증하는 역할을 수행하도록 아키텍처를 설계합니다.

이 기사는 저작권자의 CC BY-NC 4.0 라이센스를 따릅니다.