TIL

[AI와 함께하는 네트워크 공부] 1. OSI 7계층 모델

양밀루 2025. 7. 3. 14:58

나는 왜 네트워크 수업을 듣지 않았을까......후회할 시간이 없다!

네트워크 관련 면접 질문들을 중심으로 빠르게 훑어보려고 한다

0, 1레벨에 있는 질문들에 답하기 위해 필요한 개념들을 ai와 함께 묻고 답하며 정리한다

 

 

 

 🎯 7계층으로 분리 이유

복잡한 네트워크 문제를 해결하기 위해

 

  • 복잡성 관리: 네트워크 통신이라는 복잡한 과정을 여러 단계로 나누어서 각각을 단순하게 만듭니다. 
  • 문제 해결의 효율성: 네트워크에 문제가 생겼을 때, 어느 계층에서 문제가 발생했는지 쉽게 찾을 수 있습니다. 각 계층은 독립적으로 동작하므로 문제가 생긴 부분만 고치면 됩니다.
  • 표준화: 각 계층마다 전 세계가 공통으로 사용하는 규칙(프로토콜)을 정합니다. 이렇게 하면 애플, 삼성, 구글 등 다른 회사의 기기들이 서로 통신할 수 있습니다.
  • 기술 발전의 유연성: 한 계층의 기술이 발전하거나 바뀌어도 다른 계층에는 영향을 주지 않습니다. 예를 들어 Wi-Fi에서 5G로 바뀌어도 앱은 그대로 동작합니다.

 


🌈 OSI 7계층

🔴 7계층: Application Layer (응용 계층) - "사용자와 만나는 층"

역할: 사용자가 실제로 사용하는 애플리케이션

실제 예시: 웹 브라우저 (Safari), 이메일 앱 (Mail), 카카오톡, 인스타그램, iOS 앱에서 API 호출

주요 프로토콜:

  • HTTP/HTTPS: 웹 통신
  • FTP: 파일 전송
  • SMTP: 이메일 전송
  • DNS: 도메인 이름 해석

iOS:

// URLSession으로 HTTP 요청 = Application Layer
let session = URLSession.shared
let url = URL(string: "https://api.instagram.com/posts")!
let task = session.dataTask(with: url) { data, response, error in
    // 이 부분이 Application Layer에서 동작
    // Instagram API 호출
}

 

 

🟠  6계층: Presentation Layer (표현 계층) - "번역가"

역할: 데이터를 읽을 수 있는 형태로 변환

실제 예시: JPEG 이미지 압축, JSON 파싱, 문자 인코딩 (한글 → UTF-8)

주요 기능:

  • 암호화/복호화: SSL/TLS 암호화
  • 압축/해제: 데이터 압축으로 전송량 줄이기
  • 인코딩/디코딩: UTF-8, Base64 등
  • 데이터 형식 변환: JSON ↔ Swift 객체

iOS:

// JSON 데이터를 Swift 객체로 변환 (Decoding)
let decoder = JSONDecoder()
let user = try decoder.decode(User.self, from: jsonData)

// Swift -> JSON (Encoding)
let encoder = JSONEncoder()
let data = try encoder.encode(user)

// 이미지 압축
let compressedImage = image.jpegData(compressionQuality: 0.8)

 

 

 

🟡  5계층: Session Layer (세션 계층) - "대화 관리자"

역할: 통신 세션 관리, 연결 설정/해제

실제 예시: 웹사이트 로그인 상태 유지, 화상회의 참여자 관리, 파일 다운로드 중 일시정지/재개

주요 기능:

  • 세션 생성/유지/종료
  • 체크포인트: 통신 중단 시 이어서 계속
  • 동기화: 여러 연결 간의 순서 관리

iOS: URLSession이 내부적으로 세션 관리

// 로그인 세션 관리
class SessionManager {
    var accessToken: String?
    var refreshToken: String?
    
    func login() {
        // 세션 시작
    }
    
    func logout() {
        // 세션 종료
        accessToken = nil
    }
}

 

 

 

🟢  4계층: Transport Layer (전송 계층) - "배송 보장"

역할: 데이터가 안전하고 순서대로 전달되도록 보장

 

TCP (신뢰성 중시): 신뢰성 있는 연결 지향 전송

// TCP 사용 (URLSession 기본)
URLSession.shared.dataTask(with: url)

 

 

UDP (속도 중시): 빠른 비연결 지향 전송

// UDP 사용 (실시간 스트리밍)
// Network.framework 사용
import Network
let connection = NWConnection(to: endpoint, using: .udp)

 

주요 기능:

  • 오류 검출 및 복구
  • 흐름 제어: 받는 쪽 속도에 맞춤
  • 포트 번호 관리: 어떤 앱으로 보낼지 결정

포트 번호 예시:

  • HTTP: 80
  • HTTPS: 443
  • FTP: 21

 

🔵  3계층: Network Layer (네트워크 계층) - "길 찾기"

역할: 패킷 라우팅, IP 주소 관리(목적지까지 최적의 경로 찾기)

실제 예시: 집 Wi-Fi → 회사 서버로 경로 찾기, VPN 연결 시 경로 변경, 네트워크 장애 시 우회 경로

iOS:

// Wi-Fi에서 셀룰러로 전환될 때 이 계층에서 처리
import Network

let monitor = NWPathMonitor() // 현재 기기의 IP 주소 확인
monitor.pathUpdateHandler = { path in
    if path.usesInterfaceType(.wifi) {
        print("Wi-Fi로 라우팅")
    } else if path.usesInterfaceType(.cellular) {
        print("셀룰러로 라우팅")
    }
}

 

주요 기능:

  • 라우팅: 최적 경로 결정(라우팅 과정: 출발지 IP → 라우터1 → 라우터2 → ... → 목적지 IP)
  • IP 주소 관리
  • 패킷 전달

주요 프로토콜:

  • IP: 인터넷 프로토콜
  • ICMP: 오류 보고
  • ARP: 주소 변환

 

 

🟣 2계층: Data Link Layer (데이터링크 계층) - "이웃집 배송"

역할: 직접 연결된 네트워크에서 안전한 전송, 인접한 노드 간 데이터 전송

실제 예시: Wi-Fi 라우터와 iPhone 간 통신(Wi-Fi 연결 관리), 이더넷 케이블 통신, Bluetooth 페어링

주요 기능:

  • MAC 주소 관리
  • 프레임 생성/해석
  • 오류 검출

 

 

1계층: Physical Layer (물리 계층) - "물리적 연결"

역할: 실제 전기신호, 빛, 전파로 데이터 전송

실제 예시: Wi-Fi 전파, 이더넷 케이블, 광섬유, 블루투스 신호

전송 매체: 전기 신호 (구리선), 광 신호 (광케이블), 전파 (Wi-Fi, 셀룰러)

 


 

📱 iOS 개발자가 실제로 다루는 계층들

🔥 7계층 (Application) - 가장 많이 다룸

// HTTP 요청
URLSession.shared.dataTask(with: url)

// WebSocket 연결
let webSocketTask = URLSession.shared.webSocketTask(with: url)

// FTP 파일 업로드
// 커스텀 프로토콜 구현

 

6계층 (Presentation) - 자주 다룸

// JSON 인코딩/디코딩
let encoder = JSONEncoder()
let decoder = JSONDecoder()

// 이미지 압축
image.jpegData(compressionQuality: 0.8)

// Base64 인코딩
data.base64EncodedString()

 

🔧 4계층 (Transport) - 가끔 다룸

// TCP vs UDP 선택
import Network

// TCP 연결
let tcpConnection = NWConnection(to: endpoint, using: .tcp)

// UDP 연결  
let udpConnection = NWConnection(to: endpoint, using: .udp)

 

📡 3계층 (Network) - 모니터링 정도

// 네트워크 상태 확인
import Network

let monitor = NWPathMonitor()
monitor.pathUpdateHandler = { path in
    // Wi-Fi, 셀룰러 상태 확인
}

 


🎬 실제 통신 과정 - Instagram 피드 로딩

사용자 시점

"인스타그램 피드를 보고 싶어!"

 

7계층에서 일어나는 일

// Instagram 앱에서
let url = URL(string: "https://api.instagram.com/feed")!
var request = URLRequest(url: url)
request.setValue("Bearer abc123", forHTTPHeaderField: "Authorization")

 

6계층에서 일어나는 일

- Authorization 헤더를 적절한 형식으로 인코딩
- HTTPS 암호화 준비
- JSON 형식으로 요청 데이터 준비

 

5계층에서 일어나는 일

- Instagram 서버와의 세션 확인
- 로그인 상태 체크
- 연결 유지 관리

 

4계층에서 일어나는 일

- TCP 연결 사용 (신뢰성 필요)
- 포트 443 (HTTPS) 사용
- 패킷 순서 보장

 

3계층에서 일어나는 일

- Instagram 서버 IP 주소로 경로 찾기
- Wi-Fi를 통해 라우팅
- 인터넷 경로 결정

 

2계층에서 일어나는 일

- iPhone → Wi-Fi 라우터로 프레임 전송
- MAC 주소 확인

 

1계층에서 일어나는 일

- Wi-Fi 전파로 실제 데이터 전송
- 전기 신호 변환