1. 네트워크 프로토콜
네트워크 통신은 여러 계층의 프로토콜이 협력하여 이루어진다. 주요 모델로 OSI 7계층 모델과 TCP/IP 모델이 있다.
OSI 7계층
- 물리 계층: 전기 신호, 광 신호 등의 물리적 전송 담당
- 데이터 링크 계층: 오류 감지 및 수정, MAC 주소 기반 통신
- 네트워크 계층: IP 주소를 사용하여 경로 설정 (예: IP)
- 전송 계층: 데이터의 신뢰성 있는 전송 보장 (예: TCP, UDP)
- 세션 계층: 세션 설정, 관리, 종료
- 프레젠테이션 계층: 데이터 표현 형식 변환 (예: 암호화)
- 응용 계층: 사용자와 직접 상호작용 (예: HTTP, FTP)
TCP/IP 모델
- 응용 계층 (HTTP, FTP, DNS)
- 전송 계층 (TCP, UDP)
- 인터넷 계층 (IP)
- 네트워크 액세스 계층 (이더넷, Wi-Fi)
2. SSL과 TLS
SSL/TLS는 보안 통신을 위한 프로토콜이다.
주요 보장 사항
- 기밀성 (Confidentiality): 데이터를 암호화하여 중간자(MITM) 공격을 방지.
- 무결성 (Integrity): 데이터가 전송 중에 변조되지 않았음을 확인.
- 인증 (Authentication): 서버(및 필요한 경우 클라이언트)가 신뢰할 수 있음을 증명.
주요 기술
- 암호화 알고리즘:
- 비대칭키 암호화: RSA, Elliptic Curve Cryptography (ECC)
- 대칭키 암호화: AES, ChaCha20
- 해시 알고리즘:
- 데이터 무결성을 보장하기 위해 사용 (예: SHA-256).
- 인증서:
- 서버 신뢰성을 증명하기 위해 사용. 인증 기관(CA, Certificate Authority)이 발급.
세 가지 동작 단계
1. 핸드셰이크 (Handshake)
이 단계에서 클라이언트와 서버가 서로를 확인하고, 보안 연결을 설정하기 위한 준비를 한다.
- 클라이언트 헬로우 (Client Hello):
- 클라이언트가 지원하는 암호화 알고리즘 목록과 프로토콜 버전을 서버에 전달.
- 서버 헬로우 (Server Hello):
- 서버가 클라이언트의 요청에 응답하며 사용할 암호화 알고리즘과 인증서를 제공.
- 인증서 교환:
- 서버는 클라이언트에게 자신의 인증서를 전송.
- 클라이언트는 인증서를 확인해 서버의 신뢰성을 검증.
- 세션 키 생성:
- 양측이 동일한 대칭키를 생성하기 위해 키 교환(주로 Diffie-Hellman 또는 RSA 알고리즘 사용)을 수행.
2. 암호화된 세션 키 교환
세션 키가 생성되면, 이 키를 사용해 데이터 암호화를 시작한다.
이 단계에서는 대칭 암호화 방식이 사용되는데, 이는 속도가 빠르고 효율적이다.
3. 데이터 전송
클라이언트와 서버는 생성된 세션 키를 사용해 데이터를 암호화하여 주고받는다. 이는 중간에서 데이터가 탈취되더라도 해독할 수 없도록 보장한다.
3. HTTP와 HTTPS
HTTP는 무상태(Stateless) 프로토콜로, 각 요청이 독립적이다. 이는 서버가 이전 요청 정보를 기억하지 않는다는 것을 의미한다.
HTTP/1.1과 HTTP/2
- HTTP/1.1:
- 요청/응답 당 하나의 연결 사용
- 연결 유지(Keep-Alive) 지원
- HTTP/2:
- 단일 연결에서 다중 요청/응답 처리 (Multiplexing)
- 헤더 압축으로 대역폭 절약
- 서버 푸시(Server Push) 지원
HTTP/3의 주요 기능
- QUIC 기반 프로토콜로 더 빠른 연결 설정
- 패킷 손실에도 빠른 복구 가능
- TLS 1.3을 기본으로 채택
HTTP와 HTTPS
- HTTP (Hypertext Transfer Protocol):
- 데이터를 평문으로 전송
- 보안에 취약 (중간자 공격 가능)
- HTTPS (HTTP Secure):
- SSL/TLS를 통해 데이터를 암호화하여 전송
- 인증서를 통해 서버 신뢰성을 보장
iOS의 보안 통신 방법
iOS는 'App Transport Security (ATS)'를 통해 HTTPS 사용을 강제한다. ATS는 강력한 암호화와 보안 프로토콜을 사용하여 데이터 전송의 안전성을 보장한다.

3. TCP와 UDP
TCP와 UDP의 차이점
- TCP (Transmission Control Protocol):
- 연결 지향형
- 신뢰성 보장 (데이터 손실 시 재전송)
- 순서 보장
- UDP (User Datagram Protocol):
- 비연결형
- 데이터 손실 허용
- 빠른 전송이 필요할 때 사용 (예: 스트리밍)
TCP 3-Way Handshake
- 클라이언트가 서버에 SYN 요청 전송
- 서버가 SYN-ACK 응답 전송
- 클라이언트가 ACK를 전송하여 연결 확립
- 소켓 통신은 TCP와 UDP 같은 프로토콜을 사용할 수 있다.
- TCP/IP는 네트워크 통신을 위한 규약을 말하며, TCP와 UDP는 그 하위 프로토콜이다.
- TCP는 연결 지향적인 방식으로 신뢰성 있는 데이터 전송을 제공하고, UDP는 빠르지만 신뢰성 없는 전송을 제공한다.
4. iOS의 네트워크 요청 처리
URLSession 사용 방법
iOS는 URLSession을 통해 HTTP/HTTPS 요청을 처리하고, 보안 통신을 위해 SSL/TLS를 기본적으로 지원한다. 개발자는 URLSession을 사용하여 REST API와 통신하거나 데이터 다운로드, 업로드를 처리한다.
- URLSessionConfiguration: 기본 설정 구성
- URLSession: 요청을 처리하는 세션 생성
- Data Task: 데이터를 주고받는 작업 정의
guard let url = URL(string: "https://api.example.com/data") else { return }
let task = URLSession.shared.dataTask(with: url) { data, response, error in
if let error = error {
print("Error: \(error.localizedDescription)")
return
}
if let data = data {
print("Response Data: \(data)")
}
}
task.resume()
* 참조 : 이전에 썼던 RESTful API관련 글
https://local-dev.tistory.com/entry/iOS-앱-개발자를-위한-RESTful-API-활용-방식-그리고-WebSocket
iOS 앱 개발자를 위한 RESTful API 실전 적용과 WebSocket
1. RESTful API 설계와 특징RESTful API는 서버와 클라이언트 간의 통신을 효율적으로 설계하기 위해 널리 사용되는 방식이다.RESTful API 설계의 주요 원칙리소스를 나타내는 명사형 URI:GET /users: 유저 목
local-dev.tistory.com
'iOS' 카테고리의 다른 글
컴퓨터 시스템과 iOS 개발의 기초 개념 (1) | 2025.01.10 |
---|