
위 이미지는 Gemini Nano Banana를 통해 제작했습니다.
들어가며
면접에서 "OSI 7계층 설명해주세요"라고 물으면, 많은 사람이 1계층부터 순서대로 외운 내용을 말합니다.
그런데 "그래서 개발할 때 왜 알아야 하나요?"라고 묻는 순간 답이 흐려지는 경우가 많습니다.
중요한 건 계층 이름을 암기하는 것이 아니라, 내가 겪는 문제가 어느 층위의 문제인지 구분할 수 있는 감각입니다.
OSI 7계층이란?
OSI(Open Systems Interconnection) 7계층은 국제표준화기구(ISO)에서 제시한 네트워크 통신 참조 모델입니다.
네트워크 통신 과정을 7개의 역할로 나누어 바라보는 틀이라고 보면 됩니다.
이 모델의 핵심은 “현실의 인터넷이 정확히 이렇게 구현되어 있다”가 아니라,
통신 과정에서 어떤 책임과 역할들이 존재하는지 구조적으로 이해하도록 돕는 것에 있습니다.
말이 추상적으로 들릴 수 있으니, 해외 직구 택배를 예로 들어 보겠습니다.
해외 직구로 보는 7계층
미국 Amazon에서 키보드를 하나 주문한다고 상상해봅시다.
"주문하기" 버튼을 누른 순간부터 물건이 현관 앞에 도착하기까지의 흐름은, OSI 7계층을 이해하는 데 꽤 좋은 비유가 됩니다.
7계층 — 응용 계층 (Application Layer)
택배 비유: 쇼핑몰 앱을 열고 상품을 고른 뒤 "주문하기" 버튼을 누르는 단계
사용자가 직접 접하는 계층입니다.
브라우저, 메신저, 이메일 클라이언트 같은 애플리케이션이 여기서 동작하며,HTTP, SMTP, FTP 같은 프로토콜도 보통 이 계층에서 다룹니다.
즉, “사용자가 무엇을 하려는가”가 가장 직접적으로 드러나는 층입니다.
6계층 — 표현 계층 (Presentation Layer)
택배 비유: 주문서를 상대가 이해할 수 있는 형식으로 바꾸고, 필요하면 내용을 암호화하거나 압축하는 단계
이 계층은 데이터의 표현 방식을 다룹니다.
예를 들어 문자열 인코딩, 직렬화, 암호화, 압축 같은 작업이 여기에 해당합니다.
예시:
UTF-8인코딩- JSON 직렬화
- 압축
- 암호화/복호화
다만 실무에서는 이 계층이 독립적으로 드러나기보다, 애플리케이션 내부 책임으로 함께 처리되는 경우가 많습니다.
5계층 — 세션 계층 (Session Layer)
택배 비유: 판매자와 구매자 사이에 거래 흐름을 유지하고, 중간에 끊기면 다시 이어갈 수 있도록 관리하는 단계
세션 계층은 통신의 시작, 유지, 종료와 관련된 책임을 다룹니다.
“대화가 어디까지 진행되었는지”, “끊겼을 때 다시 이어갈 수 있는지” 같은 맥락입니다.
예를 들어 장시간 유지되는 연결, 세션 관리, 대화 상태 유지 같은 개념을 이해할 때 도움이 됩니다.
다만 현실의 웹 개발에서는 이 역할도 별도 계층으로 분리되기보다,
프레임워크, 애플리케이션 로직, 프록시 설정, 인증 체계 등 여러 레벨에 나뉘어 구현되는 경우가 많습니다.
4계층 — 전송 계층 (Transport Layer)
택배 비유: 물건을 여러 박스로 나누고, 각 박스가 제대로 도착했는지 확인하는 단계
전송 계층은 양 끝단 사이의 데이터 전달을 담당합니다.
신뢰성, 순서 보장, 흐름 제어, 재전송 같은 개념이 여기서 중요합니다.
대표적으로:
TCP: 순서 보장, 재전송, 흐름 제어UDP: 연결 설정과 보장 기능이 단순하고 가벼움
흔히 TCP는 “확실하게 전달하는 방식”, UDP는 “가볍게 빠르게 전달하는 방식”으로 이해하면 입문에는 충분합니다.
다만 여기서 중요한 점이 하나 있습니다.UDP = 신뢰성 없음, TCP = 무조건 정답으로만 외우면 현대 웹을 설명하기 어렵습니다.
예를 들어 HTTP/3는 UDP 기반의 QUIC 위에서 동작합니다.
QUIC은 UDP 위에 신뢰성, 흐름 제어, 연결 관리, 멀티플렉싱 등의 기능을 구현하여 TCP 기반 HTTP/2의 일부 한계를 줄였습니다.
즉, UDP 자체는 단순하지만 그 위에 어떤 메커니즘을 쌓느냐에 따라 충분히 고도화된 통신을 만들 수 있습니다.
3계층 — 네트워크 계층 (Network Layer)
택배 비유: 미국 → 인천공항 → 서울 → 우리 동네처럼, 목적지까지 어떤 경로로 보낼지 결정하는 단계
네트워크 계층은 목적지까지 데이터를 보내기 위한 경로 선택과 라우팅을 담당합니다.IP 주소가 목적지 주소 역할을 하고, 라우터가 중간 경로를 결정합니다.
즉, “어디로 보내야 하는가”의 문제를 다루는 계층입니다.
2계층 — 데이터 링크 계층 (Data Link Layer)
택배 비유: 물류 허브 내부에서 어떤 트럭으로 박스를 옮길지 정하는 단계
데이터 링크 계층은 같은 네트워크 구간 안에서 데이터를 프레임 단위로 전달하고,
장비 간 식별과 오류 검출 같은 역할을 담당합니다.
예를 들어:
MAC 주소- 스위치
- 이더넷 프레임
같은 건 이 계층의 감각으로 이해할 수 있습니다.
1계층 — 물리 계층 (Physical Layer)
택배 비유: 실제로 트럭이 도로를 달리고, 비행기가 바다를 건너는 단계
물리 계층은 데이터를 실제 신호로 바꾸어 전달하는 계층입니다.
전기 신호, 광 신호, 무선 주파수, 케이블, 광섬유, 안테나 등이 여기에 해당합니다.
아무리 애플리케이션 코드가 완벽해도, 물리적인 연결이 끊겨 있으면 통신은 성립하지 않습니다.
OSI 7계층 vs TCP/IP 4계층: 이론과 현실
여기서 꼭 짚고 넘어가야 할 점이 있습니다.
OSI 7계층은 역할을 세분화한 참조 모델이고,
실제 인터넷은 보통 TCP/IP 4계층 모델로 설명합니다.
OSI 7계층 TCP/IP 4계층
─────────────────────────────────────
7. 응용 (Application) ┐
6. 표현 (Presentation) ├→ Application
5. 세션 (Session) ┘
4. 전송 (Transport) → Transport
3. 네트워크 (Network) → Internet
2. 데이터 링크 ┐
1. 물리 ┘→ Network Access
즉, TCP/IP 모델에서는 OSI의 5·6·7계층을 엄격히 따로 나누기보다
보통 애플리케이션 계층에서 함께 다룹니다.
하지만 그렇다고 해서 세션 관리, 데이터 표현, 애플리케이션 프로토콜이라는 책임 자체가 사라지는 것은 아닙니다.
단지 현실의 구현에서는 그것들이 별도 계층으로 분리되어 드러나지 않을 뿐입니다.
이 차이를 이해하면,
- OSI는 “역할을 정리하는 사고 틀”
- TCP/IP는 “현실 구현을 설명하는 모델”
이라고 받아들이기 쉬워집니다.
왜 계층을 나누는가
OSI 7계층을 배우는 이유는 크게 세 가지입니다.
1. 표준화
서로 다른 시스템과 장비가 공통 규칙 위에서 통신할 수 있도록 하기 위해서입니다.
운영체제나 제조사가 달라도 통신이 가능한 이유는, 각자 비슷한 계층적 규약을 따르기 때문입니다.
2. 관심사의 분리
각 계층이 자기 역할에 집중하면 변경의 영향 범위를 줄일 수 있습니다.
예를 들어 유선 네트워크를 무선으로 바꿔도, 애플리케이션의 HTTP 로직 자체는 그대로 유지될 수 있습니다.
3. 문제 해결 범위 축소
장애가 생겼을 때 “이게 라우팅 문제인지, 포트 문제인지, 애플리케이션 설정 문제인지”를 나눠 생각할 수 있습니다.
실무에서 OSI 모델의 가장 큰 가치는 사실 여기에 있습니다.
개발자에게 왜 중요한가
OSI 7계층은 면접용 암기 주제가 아니라,
문제를 어디서부터 의심해야 하는지 판단하는 기준을 줍니다.
다만 주의할 점이 있습니다.
현대 웹 개발에서는 모든 문제를 OSI에 1:1로 깔끔하게 매핑하기 어렵습니다.
따라서 아래 예시들은 “정답 분류표”라기보다,
이 문제가 어떤 성격의 문제인지 감을 잡기 위한 실무형 가이드로 보는 편이 더 정확합니다.
프론트엔드에서 마주치는 문제들
브라우저에서 fetch()를 호출한다고 해봅시다.
겉으로는 함수 한 줄이지만, 내부적으로는 HTTP 요청, 연결 수립, 암호화, 라우팅, 물리적 전달까지 여러 층위를 거칩니다.
CORS 에러 — 애플리케이션/브라우저 정책 레벨의 문제
Access-Control-Allow-Origin 헤더가 맞지 않아 브라우저가 응답 접근을 차단하는 경우입니다.
중요한 포인트는, 이건 보통 네트워크 통신 실패 자체가 아니라는 점입니다.
서버는 정상적으로 응답했을 수도 있고, TCP 연결도 성공했을 수 있습니다.
다만 브라우저라는 애플리케이션이 보안 정책에 따라 응답 접근을 막는 것입니다.
그래서 이런 문제는 “네트워크가 안 된다”보다,
- 서버의 CORS 헤더
- API Gateway 응답 정책
- 프록시 설정
같은 부분을 먼저 보는 것이 맞습니다.
TLS 인증서 오류 — 보안 계층 또는 암호화 처리 문제
https:// 접속 시 인증서 경고가 뜨는 경우입니다.
교과서적으로는 표현 계층이나 그 인접 영역으로 설명하기도 하지만,
실무에서는 TLS/SSL을 별도의 보안 레이어처럼 다루는 경우가 많습니다.
따라서 실제 디버깅에서는
- 인증서 만료 여부
- 체인 인증서 누락
- 로드밸런서 또는 웹 서버 설정
- 클라이언트의 신뢰 루트 CA
같은 항목을 확인하게 됩니다.
WebSocket 연결 끊김 — 연결 유지와 인프라 설정의 경계 문제
실시간 채팅이나 알림 서비스에서 일정 시간 후 연결이 끊기는 경우가 있습니다.
이 문제는 세션 유지 관점으로 설명할 수 있지만, 실무에서는 주로
- 프록시 idle timeout
- 로드밸런서 설정
- 서버 keepalive 정책
- 재연결 로직 누락
같은 식으로 접근합니다.
즉, 개념적으로는 세션의 감각과 닿아 있지만, 실제 해결은 애플리케이션과 인프라의 경계에서 이뤄지는 경우가 많습니다.
연결 자체가 안 되는 경우 — 전송 계층 문제를 먼저 의심
예를 들어:
net::ERR_CONNECTION_REFUSED- 특정 포트에 연결 자체가 되지 않음
이런 상황은 애플리케이션 로직 이전에 TCP 연결 성립 여부를 먼저 봐야 합니다.
서버가 해당 포트에서 리슨 중인지, 방화벽이나 보안 설정이 막고 있지는 않은지 확인해야 합니다.
백엔드에서 마주치는 문제들
백엔드는 프론트엔드보다 더 넓은 범위의 계층과 직접 맞닿아 있습니다.
502 Bad Gateway — “응용 계층”으로 단정하면 위험한 문제
502는 프록시나 로드밸런서가 업스트림으로부터 올바른 응답을 받지 못했을 때 발생합니다.
여기서 중요한 건, 이를 단순히 “L7 문제”라고 단정하면 시야가 좁아질 수 있다는 점입니다.
실제 원인은 다양합니다.
예를 들어:
- 업스트림 서버 프로세스 비정상 종료
- 포트 미오픈
- 타임아웃 불일치
- 잘못된 프록시 설정
- 헬스체크 실패
- TLS 핸드셰이크 문제
즉, 502는 애플리케이션과 인프라의 경계에서 자주 발생하는 대표적인 장애입니다.
“HTTP 에러니까 L7”이라고만 보면 원인을 놓치기 쉽습니다.
DB 커넥션 풀 고갈 — 애플리케이션 자원 관리 문제
Too many connections, 커넥션 풀 고갈, 커넥션 leak 같은 문제는
겉으로 보면 “세션”처럼 느껴질 수 있지만, 보통은 애플리케이션의 자원 관리 문제에 가깝습니다.
즉,
- 커넥션 풀 크기
- idle timeout
- leak detection
- 트랜잭션 종료 누락
- 커넥션 반환 누락
같은 항목을 먼저 점검해야 합니다.
네트워크 개념과 닿아 있긴 하지만, 실무에서는 보통 프레임워크와 런타임 설정 문제로 다루게 됩니다.
L4 / L7 로드밸런서 — 어느 레벨에서 분산하는지의 차이
- L4 로드밸런서: TCP/UDP 수준에서 분산
- L7 로드밸런서: HTTP 헤더, 경로, 호스트 기반 분산
이 차이를 이해하면 장애를 볼 때도 도움이 됩니다.
예를 들어 헬스체크가 실패했을 때,
- TCP 연결 자체가 안 되는 문제인지
- HTTP 응답이 기대 형식과 달라 실패하는지
를 구분해서 볼 수 있기 때문입니다.
서버 간 통신 불가 — 네트워크 계층과 클라우드 설정 문제
마이크로서비스 환경에서 서비스 A가 서비스 B를 호출하지 못하는 경우,
실무에서는 주로 다음을 봅니다.
- 보안 그룹(Security Group)
- NACL
- 라우팅 테이블
- 서브넷 구성
- 서비스 디스커버리
- 내부 DNS
- 포트 바인딩 상태
이건 전형적으로 “목적지까지 도달 가능한가”의 문제이므로 네트워크 계층 감각이 중요합니다.
다만 클라우드에서는 전통적인 물리 네트워크보다 더 많은 부분이 추상화되어 있기 때문에,
온프레미스에서 말하던 L2/L3 감각을 그대로 가져오기보다 클라우드가 제공하는 논리 네트워크 구성 요소로 해석하는 편이 실무적입니다.
같은 네트워크 구간 문제 — 온프레미스에서는 L2 이슈도 의미가 있음
온프레미스 환경에서는
- ARP
- VLAN
- 스위치 설정
- NIC 이슈
같은 데이터 링크 계층 문제가 실제 장애 원인이 되기도 합니다.
반면 클라우드 VPC 환경에서는 사용자가 이런 L2 문제를 직접 다루는 경우가 드물기 때문에,
같은 “통신 불가”라도 온프레미스와 클라우드는 접근 방식이 달라질 수 있습니다.
실전 디버깅 흐름: "API 호출이 안 돼요"
누군가 “API 호출이 안 됩니다”라고 말했을 때,
계층을 아래에서 위로 올라가며 확인하면 문제 범위를 빠르게 줄일 수 있습니다.
1계층: 물리적 연결은 살아 있나?
- 네트워크 연결 자체는 정상인가?
2~3계층: 목적지까지 도달 가능한가?
- IP/라우팅 문제는 없는가?
- 클라우드라면 SG, NACL, Route Table은 정상인가?
- DNS 이름 해석은 정상인가?
4계층: 포트 연결이 가능한가?
- 해당 포트가 열려 있는가?
- 서버가 실제로 리슨 중인가?
5~7계층 또는 애플리케이션 레벨:
- HTTP 요청/응답은 정상인가?
- 상태 코드는 무엇인가?
- 인증, CORS, 헤더, 쿠키, 세션은 정상인가?
- TLS 인증서는 유효한가?
실무에서는 이 과정을 꼭 OSI 교과서처럼 부르지 않더라도,
대체로 다음 순서로 생각하게 됩니다.
- 도달 자체가 되나?
- 포트가 열려 있나?
- 프로토콜 레벨 응답이 오나?
- 애플리케이션 정책이나 인증 문제는 없나?
같이 보면 좋은 기본 도구
입문자에게는 ping, curl 정도만 알아도 큰 도움이 되지만,
실무에서는 아래 도구들도 자주 사용합니다.
ping: ICMP 응답 확인
※ 단, 클라우드에서는 기본 차단되어 있을 수 있으므로 실패만으로 단정하면 안 됨nc또는telnet: 포트 연결 확인curl -v: HTTP 요청/응답, 헤더, TLS 흐름 확인dig,nslookup: DNS 확인openssl s_client: 인증서 및 TLS 핸드셰이크 확인
핵심은 도구를 많이 아는 것이 아니라,
지금 내가 확인하려는 것이 어느 층위의 문제인지 알고 적절한 도구를 고르는 것입니다.
마무리
OSI 7계층은 시험용 암기 목록이 아닙니다.
실제 인터넷은 TCP/IP 모델과 각종 구현체 위에서 돌아가지만,
OSI 모델은 여전히 문제를 구조적으로 바라보는 데 유용한 사고 틀을 제공합니다.
개발자에게 정말 중요한 건,
각 계층을 완벽하게 외우는 것이 아니라 다음 두 가지입니다.
- 내 코드가 어느 층위에서 동작하는지 아는 것
- 문제가 생겼을 때 어느 층위부터 의심해야 하는지 아는 것
택배가 늦게 도착했을 때도 생각은 비슷합니다.
주문이 누락된 건지, 주소가 잘못된 건지, 중간 허브에서 꼬인 건지, 배송 차량이 멈춘 건지를 구분해야 원인을 찾을 수 있습니다.
네트워크도 마찬가지입니다.
문제를 계층적으로 나눠 생각할 수 있으면, 디버깅 속도와 정확도는 확실히 달라집니다.
'Infra' 카테고리의 다른 글
| 카카오 클라우드 GPU 서버 설치 및 설정 가이드 (Docker + GPU 최적화) (2) | 2025.05.30 |
|---|
