
글쓴이: Cher Don
OSI 모델(Open Systems Interconnection) 제대로 알기

시리즈 개요
이 시리즈에서는 다음과 같은 네트워크 통신의 기본 개념들을 다룹니다.
(Part 1) DNS는 어떻게 작동할까?
(Part 2) 네트워크 스택과 OSI 모델 [지금 읽고 계신 글!]
(Part 3) HTTP 메서드와 포맷
(Part 4) 클라이언트 식별
(Part 5) Basic/Digest 인증
(Part 6) SSL/TLS와 함께 작동하는 HTTPS
OSI 모델이란?
OSI(Open Systems Interconnection) 모델은 컴퓨터 시스템 간 통신을 위한 표준화된 참조 모델입니다. 이 모델은 특정 기술에 의존하지 않고, 통신 과정에서 거치는 계층(Layer) 구조에 초점을 맞춥니다. 지금부터 OSI 모델의 각 계층을 하나씩 살펴보겠습니다.
일반적인 5계층 OSI 모델
1. 애플리케이션 계층(Application Layer)
애플리케이션 계층은 연결이 설정된 후 애플리케이션이 네트워크를 통해 통신할 수 있도록 하는 계층입니다. 예를 들어 웹 브라우저(애플리케이션)가 서버와 데이터를 주고받는 경우가 여기에 해당합니다. 이 계층의 대표적인 프로토콜로는 HTTP와 TELNET이 있습니다.
HTTP(HyperText Transfer Protocol)
HTTP는 인터넷상에서 파일을 전송하기 위한 규칙들의 집합입니다. 브라우저 주소창에 URL을 입력하면, 브라우저는 해당 웹 페이지를 요청하는 HTTP 요청을 보냅니다. 그러면 호스트(서버)는 텍스트, 이미지, 동영상, 스타일 폰트 등 페이지를 구성하는 모든 요소와 함께 웹 페이지를 반환합니다.
2. 전송 계층(Transport Layer)
전송 계층은 호스트 간(host-to-host) 메시지 전달을 담당합니다. 대표적인 프로토콜로는 TCP와 UDP가 있습니다.
TCP(Transmission Control Protocol)
TCP는 가장 널리 사용되는 연결 지향형(connection-oriented) 프로토콜입니다. 네트워크 대화를 어떻게 설정하고 유지할지 정의하며, 클라이언트와 호스트 사이의 연결(소켓socket)을 3-way 핸드셰이크 방식으로 수립하는 역할을 합니다.

데이터를 요청하는 사용자는 서버에게 SYN 패킷을 보내 동기화(synchronization)를 요청합니다. 서버는 SYN-ACK으로 응답하여 해당 패킷을 확인(acknowledge)했으며 자신도 연결하고자 한다는 것을 알립니다. 마지막으로 사용자가 ACK를 서버에 전송하면 연결이 확립됩니다.
TCP는 다음과 같은 장점 덕분에 가장 많이 사용되는 프로토콜입니다.
연결 지향 통신
데이터 교환 전에 엔드포인트 간 핸드셰이크 절차를 통해 연결을 보장하고, 데이터 스트림(데이터 패킷) 형태로 전송합니다.
신뢰성
체크섬(checksum)을 활용해 송수신된 데이터 패킷이 동일한지 검증합니다. 누락되거나 손상된 패킷이 있으면 NACK 메시지를 발신자에게 보내 재전송을 요청합니다.
순서 보장
데이터 패킷에는 번호가 부여되어 전송됩니다. 따라서 TCP는 수신된 패킷을 올바른 순서로 재정렬한 후 애플리케이션에 전달합니다.
흐름 제어(Flow Control)
데이터 전송 속도를 조절해 효율을 높이면서 버퍼 오버런/언더런(수신자가 처리할 수 있는 속도보다 빠르게 데이터가 전송되거나 그 반대의 상황)을 방지합니다. 자세한 원리는 아래 'TCP Slow Start' 섹션에서 설명합니다.
멀티플렉싱(Multiplexing)
하나의 소켓을 통해 여러 정보 스트림을 동시에 전송할 수 있습니다. 소켓의 서로 다른 포트를 통해 이루어지며, 멀티플렉싱과 파이프라이닝의 차이점은 본문 후반부에서 다룹니다.
UDP(User Datagram Protocol)
UDP는 TCP와 비슷하지만 비연결형(connection-less) 프로토콜이라는 점에서 정반대입니다. 신뢰성과 순서 보장이 없으며, 유실된 패킷은 재전송되지 않아 데이터에 빈틈이 생길 수 있습니다.

그러나 이러한 특성 덕분에 VoIP(인터넷 전화)처럼 시간에 민감한 애플리케이션에 적합합니다. 전송 전 3-way 핸드셰이크가 필요 없어 속도가 빠르고, VoIP에서는 사람의 귀가 패킷 유실로 인한 짧은 공백을 잘 처리하기 때문에 유실된 패킷이 큰 문제가 되지 않습니다.
3. 네트워크 계층(Network Layer)
네트워크 계층은 네트워크 연결을 위한 데이터 라우팅 경로를 제공하는 역할을 합니다. 즉, 가장 논리적인 경로를 통해 데이터 패킷을 네트워크 전반에 걸쳐 이동시킵니다.
IP(Internet Protocol)
IP는 데이터 패킷의 구조를 정의하고, 출발지와 목적지 정보를 패킷에 라벨링합니다.
출발지와 목적지 정보는 IP 주소 형태로 표현되며, 104.16.121.127(IPv4) 또는 2001:db8:0:1234:0:567:8:1(IPv6) 형식일 수 있습니다.
4. 링크/물리 계층(Link/Physical Layer)
이 계층은 OSI 모델의 최하위 계층입니다. 링크 계층에서는 로컬 영역 네트워크(LAN)를 통해 정보가 전송되며, 물리 계층에서는 코드워드(code word)나 심볼(symbol) 형태의 전기적·기계적 매체 등 물리적 신호로 정보가 전달됩니다.
경로 시각화하기
tracert google.com 명령어를 사용하면 클라이언트(내 컴퓨터)에서 호스트(google.com)까지의 경로를 추적할 수 있습니다.

위 결과에서 경로가 내 기기(192.168.1.254)에서 시작해 라우터(10.243.128.1)를 거친 뒤, 포르투갈에 위치한 ISP(인터넷 서비스 제공업체)를 통과하는 과정을 확인할 수 있습니다.
상호 보완적인 계층들
TCP/IP 모델
TCP는 유실된 데이터 패킷의 재전송을 요청하고 순서를 재정렬합니다
IP는 데이터 패킷의 구조만 담당하기 때문에, 패킷이 손상되거나 유실되어도 이를 복구하지 못합니다. 바로 이 지점에서 TCP가 중요한 역할을 합니다. TCP는 패킷에 번호를 붙여 클라이언트에 전송하고, 클라이언트 측에서는 유실되거나 손상된 패킷의 재전송을 요청한 후 데이터 패킷을 재정렬합니다.
HTTP/TCP 모델
앞서 언급했듯이 HTTP는 TCP 핸드셰이크로 만들어진 연결을 통해 요청을 보낼 수 있습니다. 그렇다면 두 프로토콜은 어떻게 서로 보완할까요?
HTTP 영속 연결(Persistent Connections)
요청/응답마다 새로운 연결을 여는 대신, 하나의 TCP 연결 위에서 여러 번의 HTTP 요청/응답을 처리할 수 있게 해줍니다.
영속 연결(Persistent Connection)의 응답 예시
이것은 HTTP 헤더의 Connection: Keep-Alive를 통해 구현됩니다. 기본적으로 연결은 유휴 상태가 30초간 지속된 후 Connection: Close가 포함된 응답이 오면 종료됩니다.
TCP Slow Start
앞서 언급했듯이 TCP는 흐름 제어를 지원하며, 이는 TCP Slow Start라는 네트워크 혼잡 방지 메커니즘을 통해 구현됩니다.

발신자는 혼잡 윈도우(CWND), 수신자는 수신 윈도우(RWND)를 가집니다. 데이터 크기가 혼잡/수신 윈도우보다 크면 버퍼 언더런 또는 오버런이 발생합니다.
이를 방지하기 위해 발신자는 작은 혼잡 윈도우(CWND = 1)로 데이터 패킷 전송을 시작하며, 수신자의 수신 윈도우 크기를 천천히 탐색합니다.
수신자가 확인 응답(ACK)을 보내면 발신자는 매번 데이터 패킷 수를 두 배씩 늘려가다가, 더 이상 응답을 받지 못하는 시점에서 최적의 패킷 수를 발견합니다. 이후 다른 혼잡 제어 알고리즘이 이 속도를 유지하도록 돕습니다.
협력 방식
결국 TCP Slow Start는 연결이 종료되기 전에 전송할 최적의 데이터 패킷 수를 파악합니다. 이를 통해 버퍼 오버런(수신 속도보다 빠른 전송)의 위험 없이 호스트에서 클라이언트로 전송되는 데이터량을 최적화할 수 있습니다.
기타 HTTP 기능들
HTTP 파이프라이닝(Pipelining)

HTTP/1.1 버전의 이 기능은 응답을 기다리지 않고 동일한 소켓 위에서 여러 요청을 한꺼번에 보낼 수 있게 해줍니다. 다만 최신 버전인 HTTP/2에서는 TCP 멀티플렉싱으로 대체되었습니다.
핵심 차이점은 다음과 같습니다. 두 방식 모두 동일한 소켓에서 여러 요청을 동시에 보낼 수 있지만, 파이프라이닝은 여전히 응답이 순서대로 도착해야 합니다. 즉, 요청한 항목이 (A, B, C) 순서라면 B가 제대로 전달되지 않으면 C도 받을 수 없습니다.
반면 멀티플렉싱에서는 순서가 중요하지 않으므로 더 빠른 전송 시간을 확보할 수 있습니다.
이러한 방식들은 멱등(idempotent) 메서드에 가장 적합합니다. 멱등 메서드란 요청 횟수와 무관하게 동일한 결과를 반환하는 메서드를 말합니다. 예를 들어 웹 페이지를 여러 번 요청해도 항상 같은 페이지가 응답으로 돌아오는 경우입니다.
병렬 연결(Parallel Connections)
웹 페이지를 열었을 때 동영상 바, 썸네일, 버튼 등 여러 구성 요소가 동시에 로딩되는 것을 본 적이 있나요?
여러 구성 요소가 동시에 로딩되는 모습 | 이미지 출처: Cloudflare Mobile SDK
이것은 병렬 연결 덕분에 가능한 일입니다. 여러 개의 TCP 연결을 동시에 수립함으로써, 구성 요소들이 하나씩 순차적으로 로딩되는 것이 아니라 동시에 로딩됩니다.
하지만 더 빨리 로딩되는 것처럼 보여도, 클라이언트의 제한된 대역폭 때문에 성능이 저하될 수 있습니다. 모든 병렬 연결이 한정된 대역폭을 두고 경쟁하면 각 구성 요소의 로딩 속도가 비례하여 느려져, 결국 전체 로딩 속도에는 아무런 이점이 없게 됩니다.
마치며
OSI 모델을 활용하면 네트워크의 전체적인 그림을 쉽게 이해하고, 하드웨어부터 소프트웨어까지 각 요소들이 어떻게 상호작용하는지 파악할 수 있습니다.
일반적으로 OSI 모델은 훌륭한 학습 도구이자 문제 해결(troubleshooting)의 참고 자료입니다. 또한 설계 단계에서도 유용합니다. 각 계층의 기능을 검토하면서 계층별로 설계를 고민하게끔 강제하기 때문입니다.
지금까지 살펴본 것은 OSI 5계층 모델이며, 식별(Identification), 인증(Authentication), 데이터 암호화(Data Encryption)까지 다루는 OSI 7계층 모델도 있습니다.
이 글은 HTTP 입문 시리즈의 Part 2입니다. Part 1에서는 DNS 서버의 중요성에 대해 다루었으니 함께 읽어보세요. 다음 Part 3에서는 HTTP 요청의 구조를 알아보겠습니다!
안녕하세요! 저는 데이터 사이언스를 전공하고 있는 Cher Don입니다. Paralegal Bot의 CTO이며, 아래 웹사이트에서 저를 찾아볼 수 있습니다. 읽어주셔서 감사합니다!
Piqued;
양질의 콘텐츠 — 이해하기 어려운 개념을 위한 최고의 콘텐츠를 제공합니다. 우리도 같은 어려움을 겪어봤습니다… www.piqued.co
무료로 코딩을 배워보세요. freeCodeCamp의 오픈 소스 커리큘럼은 40,000명 이상의 사람들이 개발자로 취업하는 데 도움을 주었습니다. 지금 시작하세요!