왜 계층을 나누는가?

복잡성을 관리하기 위해 역할을 분리!

🏠 집 짓기에 비유:

L7 (Application) : 인테리어 (가구 배치, 장식)
L6 (Presentation): 마감 (벽지, 페인트)
L5 (Session)     : 전기/수도 연결 관리
L4 (Transport)   : 배관/전선 (물, 전기 전달)
L3 (Network)     : 도로망 (집까지 가는 길)
L2 (Data Link)   : 골목길 (집 앞까지 정확히)
L1 (Physical)    : 땅, 돌, 시멘트 (물리적 기반)

각 계층 상세 설명

L1 - Physical Layer (물리 계층)

“전기 신호로 0과 1을 보내는 계층”

예시: 
- 랜선 (구리선)
- 광케이블 (빛)
- Wi-Fi (전파)

역할: 비트를 전기/빛 신호로 변환

“같은 네트워크 안에서 정확한 기기 찾기”

핵심: MAC 주소 (하드웨어 고유 주소)

예시:
AA:BB:CC:DD:EE:FF → 11:22:33:44:55:66
    ↑ 출발지            ↑ 목적지

같은 건물 안에서 특정 방 찾기 같은 개념!

프로토콜: Ethernet
장비: 스위치

쿠버네티스 맥락:

같은 노드 내:
컨테이너 → veth pair → 호스트
(L2로 직접 통신)

L3 - Network Layer (네트워크 계층) ⭐

“다른 네트워크로 패킷 전달하기”

핵심: IP 주소 (논리적 주소)

예시:
192.168.1.10 → 8.8.8.8
  ↑ 내 IP        ↑ 구글 DNS

서울 → 부산 가는 경로 찾기 같은 개념!

프로토콜: IP (Internet Protocol)
장비: 라우터

L3의 핵심 기능:

1. 라우팅 (Routing):
   목적지까지 가는 최적 경로 찾기
   
   예시:
   서울 → 부산
   경로1: 서울→대전→대구→부산
   경로2: 서울→천안→김천→부산
   → 더 빠른 경로 선택!

2. IP 주소 기반 전달:
   Source IP: 192.168.1.10
   Dest IP: 10.0.0.5

쿠버네티스에서 L3:

Calico의 BGP 라우팅:

node-1 (10.244.1.0/24)
  ↓ BGP로 경로 광고
node-2 (10.244.2.0/24)
  
node-1에서 node-2의 파드로 통신:
→ IP 주소만으로 라우팅 (L3)
→ 캡슐화 필요 없음!

L4 - Transport Layer (전송 계층) ⭐

“데이터를 신뢰성 있게 전달하기”

핵심: 포트 번호 + 신뢰성

프로토콜:
- TCP: 신뢰성 보장 (전화 ☎️)
- UDP: 빠르지만 보장 없음 (우편 📮)

TCP vs UDP 비교:

항목TCPUDP
연결연결 지향 (3-way handshake)비연결
신뢰성순서 보장, 재전송보장 없음
속도느림 (오버헤드)빠름
용도HTTP, SSH, DB동영상, 게임, DNS

포트 번호 이해:

IP = 아파트 주소
포트 = 호수

192.168.1.10:80 → 웹서버
192.168.1.10:443 → HTTPS 서버
192.168.1.10:3306 → MySQL
192.168.1.10:6379 → Redis

같은 IP에서 여러 서비스 구분!

쿠버네티스에서 L4:

yaml

kind: Service
spec:
  ports:
  - protocol: TCP    ← L4 프로토콜
    port: 80         ← 서비스 포트
    targetPort: 8080 ← 파드 포트
```
 
---
 
#### L5 - Session Layer (세션 계층)
 
**"연결 유지 관리"**
```
예시:
- 로그인 세션 유지
- 화상회의 연결 유지
 
쿠버네티스에서는 잘 드러나지 않음
(주로 애플리케이션이 처리)
```
 
---
 
#### L6 - Presentation Layer (표현 계층)
 
**"데이터 형식 변환"**
```
예시:
- 암호화/복호화 (SSL/TLS)
- 인코딩 (UTF-8, ASCII)
- 압축/해제 (GZIP)
 
쿠버네티스에서:
- TLS 인증서 (Ingress에서 처리)
```
 
---
 
#### L7 - Application Layer (응용 계층) ⭐
 
**"실제 서비스 프로토콜"**
```
사용자가 직접 사용하는 계층!
 
프로토콜:
- HTTP/HTTPS: 
- FTP: 파일 전송
- SMTP: 이메일
- DNS: 도메인 변환
```
 
**L7의 특징:**
```
HTTP 요청 구조:
 
GET /api/users HTTP/1.1        ← 메서드, 경로
Host: user-service             ← 호스트
Authorization: Bearer token    ← 헤더
Content-Type: application/json
 
{ "id": 123 }                  ← 바디
```
 
**쿠버네티스에서 L7:**
```
Cilium의 L7 정책:
 
"frontend 파드는 backend 파드의
 /api/v1/read 경로에만
 GET 메서드로 접근 가능"
 
→ HTTP 프로토콜을 이해하고 제어!
```
 
---
 
## 🎯 L3 vs L4 vs L7 비교
 
### 실제 통신 예시
```
사용자: "user-service의 사용자 목록 가져와줘"
 
L7 (Application):
  GET /api/users HTTP/1.1
  → "사용자 목록 조회" 요청 이해
 
L4 (Transport):
  TCP Port 80
  → 패킷 순서 보장, 재전송
 
L3 (Network):
  Src: 10.244.1.5 → Dst: 10.244.2.10
  → 네트워크 간 라우팅
 
L2 (Data Link):
  MAC: AA:BB:CC:DD:EE:FF
  → 같은 네트워크 내 전달
 
L1 (Physical):
  01010101... (전기 신호)
```
 
---
 
### 로드 밸런서 타입 차이
 
#### L4 로드 밸런서
```
특징: IP + 포트만 봄
 
192.168.1.10:80 → 어느 백엔드로?
- 백엔드1: 10.0.1.5:8080
- 백엔드2: 10.0.1.6:8080
 
장점: 빠름
단점: 요청 내용을 모름
```
 
#### L7 로드 밸런서 (Ingress)
```
특징: HTTP 요청 내용을 이해
 
/api/users → user-service
/api/orders → order-service
/static/* → cdn-service
 
장점: 똑똑한 라우팅
단점: 처리 비용 높음
```
 
---
 
### 쿠버네티스 컴포넌트별 계층
 
| 컴포넌트 | 계층 | 역할 |
|----------|------|------|
| **CNI** | L2/L3 | IP 할당, 라우팅 |
| **Service** | L4 | 포트 기반 로드밸런싱 |
| **Ingress** | L7 | HTTP 경로 기반 라우팅 |
| **Network Policy** | L3/L4 | IP/포트 기반 방화벽 |
| **Cilium (L7)** | L7 | API 경로 기반 보안 |
 
---
 
## 🔍 실전 예시로 이해하기
 
### 예시 1: 웹사이트 접속 전체 과정
```
브라우저에 "shop.example.com/cart" 입력
 
1. DNS (L7 Application):
   shop.example.com → 203.0.113.10
 
2. TCP 연결 (L4 Transport):
   3-way handshake
   Client:80 ↔ Server:443
 
3. TLS 핸드셰이크 (L6 Presentation):
   암호화 채널 수립
 
4. HTTP 요청 (L7 Application):
   GET /cart HTTP/1.1
   Host: shop.example.com
 
5. IP 라우팅 (L3 Network):
   내 IP → 서버 IP
   라우터들을 거쳐 전달
 
6. MAC 주소 (L2 Data Link):
   각 구간마다 MAC 주소로 전달
 
7. 물리 신호 (L1 Physical):
   전기/빛 신호로 전송
```
 
---
 
### 예시 2: 쿠버네티스 파드 간 통신
```
frontend → backend:8080으로 API 호출
 
┌─────────────────────────────────────┐
│ L7: POST /api/orders               │
│     Content-Type: application/json │
├─────────────────────────────────────┤
│ L4: TCP Port 8080                  │
│     순서 보장, 재전송               │
├─────────────────────────────────────┤
│ L3: 10.244.1.5 → 10.244.2.10      │
│     Calico BGP 라우팅              │
├─────────────────────────────────────┤
│ L2: veth pair                      │
│     컨테이너 ↔ 호스트              │
└─────────────────────────────────────┘

💡 핵심 정리

DNS 요약

  • 역할: 사람 친화적 이름 → IP 주소 변환
  • 쿠버네티스: CoreDNS가 서비스명 → ClusterIP 변환
  • 장점: 동적 환경에서 IP 변경돼도 이름은 그대로

L3 (Network Layer)

  • 역할: IP 주소 기반 라우팅
  • 키워드: IP, 라우터, 경로
  • 쿠버네티스: Calico BGP, 파드 간 라우팅

L4 (Transport Layer)

  • 역할: 포트 기반 전달, 신뢰성 보장
  • 키워드: TCP/UDP, 포트
  • 쿠버네티스: Service (ClusterIP, NodePort)

L7 (Application Layer)

  • 역할: 애플리케이션 프로토콜 이해
  • 키워드: HTTP, API, 경로
  • 쿠버네티스: Ingress, Cilium L7 정책

작성일: 2025-11-05