나는 왜 네트워크 수업을 듣지 않았을까......후회할 시간이 없다!
네트워크 관련 면접 질문들을 중심으로 빠르게 훑어보려고 한다
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 전파로 실제 데이터 전송
- 전기 신호 변환
'TIL' 카테고리의 다른 글
[AI와 함께하는 네트워크 공부] 3. HTTP란? (0) | 2025.07.14 |
---|---|
[AI와 함께하는 네트워크 공부] 2. TCP vs UDP (1) | 2025.07.07 |