프로토콜은 왜 중요할까, 백엔드 개발자가 알아야 할 OSI 7계층별 프로토콜
프로토콜을 알아야하는 이유는 실제 서비스의 동작 원리를 정확히 이해하고 문제를 해결하며 보안과 성능을 개선하기 위해서도 있지만 근본적인 것은 역시 문제해결인 것 같다.
인터넷과 네트워크는 도로
프로토콜은 그 위를 달리는 차와 신호체계
백엔드 개발자는 차를 운전하며 도로 설계까지 한다.
프로토콜을 모르면 눈 가리고 운전하는 격.
코딩을 할 때 내부적인 오류 Exception, 런타임 에러등의 문제도 있지만 만약 DNS를 아예 모른다고 가정하면 우리가 브라우저에 도메인을 입력해도 404, DNS_PROBE_FINISHED_NXDOMAIN같은 오류를 만나면 원인을 알수 없다. 서버에 배포했는데 도메인을 연결이 안되는 경우에 DNS의 A 나 CNAME 설정 개념이 없으면 문제 해결이 안된다.
만약 우리가 클라우드 서버를 사용했을 시 레코드 설정을 잘못하면 서비스 전체가 접속이 안된다. DNS 캐시, TTL의 의미, 전파 시간 등을 몰라서 원인 분석이 늦어질 것이다. 이 때 DNS 프로토콜 지식을 가진 사람은 금방해결할 수 있을 것이다.
프로토콜이 뭔가.. 바로 통신 규약이다.
규약(規約, Protocol) 이란
조직이나 단체, 또는 여러 사람이 모여 공동의 목표를 달성하거나 특정 사안을 효율적으로 처리하기 위해 정해놓은 규칙이나 약속을 의미한다.
규약은 약속이다. 대부분의 라이브러리는 이 약속을 지키도록 만들어진다. 우리가 그 규약을 알고 있다면, 코드를 볼 때 ‘왜 이렇게 동작하는지’를 자연스럽게 이해할 수 있게 된다.
백엔드 개발자를 위한 OSI 7계층별 필수 프로토콜
7계층 | 응용 계층 (Application Layer) | HTTP, HTTPS, FTP, SMTP, DNS, WebSocket, SSH | 웹 서비스 동작의 핵심. 사용자와 가장 가까움.- HTTP/HTTPS: REST API, 웹 통신- SMTP: 메일 전송- DNS: 도메인 → IP 변환- WebSocket: 실시간 통신 |
6계층 | 표현 계층 (Presentation Layer) | SSL/TLS, JPEG, MPEG, JSON, XML | 데이터 인코딩/암호화/압축을 담당- TLS/SSL: HTTPS 암호화- JSON/XML: 데이터 직렬화 포맷 |
5계층 | 세션 계층 (Session Layer) | NetBIOS, RPC, gRPC, WebSocket | 세션 관리 (연결 유지)- WebSocket 연결 유지- RPC/gRPC: 원격 호출 프레임워크 |
4계층 | 전송 계층 (Transport Layer) | TCP, UDP | 실제 데이터 전송 제어- TCP: 신뢰성 있는 연결 (HTTP 등)- UDP: 빠른 전송 (DNS, 게임 등) |
3계층 | 네트워크 계층 (Network Layer) | IP, ICMP, ARP, BGP, OSPF | 주소 지정과 라우팅- IP: 주소 및 경로 지정- ICMP: ping 등 네트워크 상태 체크 |
2계층 | 데이터 링크 계층 (Data Link Layer) | Ethernet, PPP, ARP, VLAN | MAC 주소 기반으로 프레임 전송- Ethernet: 유선 LAN 표준- ARP: IP ↔ MAC 변환 |
1계층 | 물리 계층 (Physical Layer) | RS-232, USB, IEEE 802.11 (Wi-Fi), 광케이블, UTP | 전기 신호/물리적 연결- 실제 케이블, 무선 주파수 등 |
계층별 간단한 설명
응용 계층
- HTTP(HyperText Transfer Protocol) : 웹 브라우저와 서버가 웹페이지, 이미지 등 데이터를 주고받는 통신 규약이다.
비연결성과 무상태성을 특징으로 하며, 주로 포트 80을 사용한다. - HTTPS : HTTP에 SSL/TLS 암호화가 추가된 보안 프로토콜이다. 데이터를 암호화해 중간자 공격과 도청을 방지하며 기본 포트는 443이다.
- FTP(File Trasfer Protocol) : 서버와 클라이언트 간 파일을 업로드 및 다운로드할 때 사용하는 프로토콜이다. 주로 포트 21을 사용하며 데이터 전송에 비암호화 방식을 쓴다.
- SMTP(Simple Mail Transfer Protocol) : 이메일을 전송하기 위한 프로토콜로 메일 서버 간 메일 송수신에 사용한다. 기본 포트는 25이며 주로 발신 메일 서버에 적용된다.
- DNS(Domain Name System) : 도메인 이름을 IP 주소로 변환하는 시스템이자 프로토콜이다. 인터넷 접속 시 사람이 읽기 쉬운 도메인을 컴퓨터가 이해하는 IP로 매핑한다.
- WebSocket : 클라이언트와 서버 간 실시간, 양방향 통신을 가능하게 하는 프로토콜이다. HTTP로 초기 연결을 시작하며 이후 TCP 소켓으로 업그레이드된다.
SSH(Secure Shell) 원격 서버에 안전하게 접속하기 위한 암호화된 통신 프로토콜이다. 주로 시스템 관리자가 원격으로 서버를 제어할 때 사용하며 포트 22를 쓴다.
표현 계층
- SSL/TLS : 데이터 통신을 암호화해 보안을 제공하는 프로토콜이다. 인터넷에서 HTTPS로 안전한 연결을 할 때 주로 사용된다.
- JPEG : 이미지 파일을 압축하는 손실 압축 방식의 포맷이다. 사진과 같은 복잡한 이미지를 저장할 때 널리 쓰인다.
- MPEG : 동영상과 오디오 데이터를 압축해 저장하고 전송하는 표준 포맷이다. 스트리밍과 동영상 재생에 자주 활용된다.
- JSON :데이터를 사람과 기계가 모두 읽기 쉬운 텍스트 형식으로 표현하는 포맷이다. 웹 API에서 서버와 클라이언트 간 데이터 교환에 널리 사용된다.
- XML : 데이터를 구조화해 표현하는 마크업 언어이다. 복잡한 데이터와 문서 교환에 주로 사용되며, 태그 기반으로 작성된다.
세션 계층
- NetBIOS : 로컬 네트워크에서 컴퓨터 이름을 식별하고 통신하는 프로토콜이다. 주로 Windows 네트워크 환경에서 파일과 프린터 공유에 사용된다.
- RPC (Remote Procedure Call) :원격 서버의 함수를 마치 로컬 함수처럼 호출할 수 있게 하는 통신 프로토콜이다. 분산 시스템에서 클라이언트와 서버 간 함수 호출에 주로 활용된다.
- gRPC : 구글에서 개발한 고성능 원격 프로시저 호출(RPC) 프레임워크이다. 프로토콜 버퍼(Protobuf)를 사용해 데이터 직렬화와 효율적인 통신을 지원한다.
- WebSocket : 클라이언트와 서버 간 실시간, 양방향 통신을 가능하게 하는 프로토콜이다. HTTP로 초기 연결 후 TCP 소켓으로 업그레이드되어 지속적인 통신을 유지한다.
WebSocket은 응용 계층 프로토콜이면서 세션 계층에서 하는 연결 관리 역할도 함께 하기 때문에 두 계층에서 모두 언급된다.
전송 계층
- TCP (Transmission Control Protocol) :신뢰성 있는 데이터 전송을 보장하는 연결 지향 프로토콜이다. 데이터가 순서대로 정확하게 도착하도록 오류 검출과 재전송을 수행한다.
- UDP (User Datagram Protocol) : 빠른 전송을 위해 신뢰성 검사 없이 데이터를 보내는 비연결형 프로토콜이다. 주로 실시간 스트리밍, 게임, DNS 조회 등 지연 시간이 중요한 서비스에 사용된다.
네트워크 계층
- IP (Internet Protocol) : 네트워크에서 데이터를 목적지 IP 주소로 전달하는 기본 프로토콜이다. 패킷을 라우팅해 인터넷 상에서 데이터를 이동시키는 역할을 한다.
- ICMP (Internet Control Message Protocol) : 네트워크 장비 간 오류 메시지와 상태 정보를 전달하는 프로토콜이다. ping 명령어로 네트워크 연결 상태를 확인할 때 사용된다.
- ARP (Address Resolution Protocol) : IP 주소를 실제 물리 주소인 MAC 주소로 변환하는 프로토콜이다. 로컬 네트워크 내에서 장치 간 통신을 위해 필수적이다. (MAC 주소를 IP주소로 변환하는 프로토콜인 RARP도 있음)
- BGP (Border Gateway Protocol) 인터넷 상의 자율 시스템(AS) 간 경로 정보를 교환하는 핵심 라우팅 프로토콜이다. 대규모 인터넷 라우팅 경로를 관리하고 최적 경로를 선택한다.
- OSPF (Open Shortest Path First) 내부 네트워크에서 최단 경로를 계산해 패킷을 전달하는 링크 상태 라우팅 프로토콜이다. 효율적인 경로 탐색과 빠른 네트워크 재구성을 지원한다.
데이터 링크 계층
- Ethernet : 유선 LAN에서 데이터를 프레임 단위로 전송하는 데이터 링크 계층 프로토콜이다. 컴퓨터 간 물리적 연결과 MAC 주소를 이용한 통신을 담당한다.
- PPP (Point-to-Point Protocol) 두 지점 간 직접 연결된 네트워크에서 데이터 전송을 위한 프로토콜이다. 주로 전화선, DSL 등 WAN 접속에 사용된다.
- ARP (Address Resolution Protocol) IP 주소를 MAC 주소로 변환하는 프로토콜이다. 로컬 네트워크 내 장치 간 통신에 필수적이다.
- VLAN (Virtual Local Area Nework) 하나의 물리 네트워크를 여러 개의 논리적 네트워크로 분할하는 기술이다. 네트워크 트래픽 분리와 보안을 위해 사용된다.
물리 계층
- RS-232 : 컴퓨터와 주변기기 간 직렬 통신을 위한 표준 인터페이스이다. 저속 데이터 전송에 주로 사용되며 초기 모뎀 연결에 활용되었다.
- USB (Universal Serial Bus) : 컴퓨터와 다양한 외부 장치를 연결하는 범용 직렬 버스 규격이다. 빠른 속도와 플러그 앤 플레이를 지원해 널리 쓰인다.
- IEEE 802.11 : 무선 LAN(Wi-Fi)의 표준 규격을 정의한 프로토콜이다. 무선으로 데이터를 송수신하며 다양한 주파수 대역과 속도를 지원한다.
- 광케이블 : 빛을 이용해 데이터를 전송하는 고속 통신 매체이다. 장거리 전송에 적합하며 전기적 간섭에 강하다.
- UTP (Unshielded Twisted Pair) : 일반적으로 LAN 케이블에 쓰이는 꼬임선 형태의 구리선 케이블이다. 전기적 간섭을 줄여 안정적인 데이터 전송이 가능하다.
전화를 걸면 우리는 자연스럽게 “여보세요”라고 말하고 상대방은 “누구세요?”라고 응답한다. 대화를 마치면 “끊을게요” 같은 인사로 마무리한다. 이런 흐름은 누구도 따로 가르쳐주지 않아도 익숙하게 따르는 일종의 대화 규칙이다. 프로토콜도 이와 다르지 않다. 컴퓨터와 컴퓨터 혹은 클라이언트와 서버가 통신할 때도 정해진 순서와 약속을 따라야 서로를 이해할 수 있다.
예를 들어 HTTP 프로토콜에서는 요청(Request)을 보내고 응답(Response)을 받는 순서가 있고 TCP에서는 연결을 맺는 3-way handshake와 같은 절차가 존재한다. 이처럼 우리가 자연스럽게 전화를 걸고 끊듯이 시스템 간에도 “언제 어떻게 무엇을 주고받을지”에 대한 정확한 규칙이 필요하다.
이 규칙이 바로 프로토콜 즉 통신의 약속이다.
개발자는 이 약속을 이해해야 한다. 그래야 시스템이 어떤 식으로 작동하는지 왜 그런 흐름으로 구성되어 있는지 문제가 생겼을 때 어디에서 발생했는지를 올바르게 파악할 수 있다.