학습
Swift 네트워크 요청 처리
Swift 네트워크 요청 처리 — 중급
네트워크 요청 처리
1. 도입 (왜 배워야 하는가)
네트워크 요청 처리는 현대 애플리케이션 개발에서 필수적인 요소입니다. 모바일 앱이든 웹 서비스든 사용자와 서버 간의 데이터 통신이 필요합니다. 예를 들어, 쇼핑몰 애플리케이션에서는 상품 정보를 서버에서 받아와야 하고, 소셜 미디어 앱에서는 사용자 피드를 업데이트하기 위해 서버와의 통신이 이루어져야 합니다.
이 토픽을 모르면, 사용자에게 필요한 데이터를 제때 제공하지 못하거나, 서버와의 데이터 통신에서 발생할 수 있는 다양한 문제를 해결하지 못하게 됩니다. 이는 사용자 경험에 큰 영향을 미치고, 결과적으로 앱의 성공에도 부정적인 영향을 미칠 수 있습니다.
2. 핵심 개념 설명
- URLSession: 네트워크 요청을 관리하는 클래스입니다. 마치 우체국처럼, 요청을 보내고 응답을 받는 역할을 합니다.
- DataTask: URLSession을 사용하여 데이터를 요청하는 작업입니다. 이는 물건을 배달하는 우편물과 같아서, 요청한 데이터가 도착하기까지 기다려야 합니다.
- JSON: 서버와의 데이터 통신에서 많이 사용되는 데이터 형식입니다. 이는 마치 인형의 설명서처럼, 데이터를 쉽게 이해할 수 있도록 구조화된 방식입니다.
| 용어 | 설명 |
|---|---|
| URLSession | 네트워크 요청을 처리하는 클래스 |
| DataTask | 데이터를 요청하는 작업 |
| JSON | 데이터 전송을 위한 경량 형식 |
3. 기본 코드 예제
가장 기본적인 GET 요청을 보내는 코드 예제를 살펴보겠습니다.
import Foundation
let url = URL(string: "https://api.example.com/data")! // 요청할 URL 생성
let task = URLSession.shared.dataTask(with: url) { data, response, error in // 데이터 요청
if let error = error { // 에러가 발생한 경우
print("Error: \(error.localizedDescription)") // 에러 메시지 출력
return
}
guard let data = data else { // 데이터가 없는 경우
print("No data received")
return
}
if let jsonString = String(data: data, encoding: .utf8) { // 데이터가 유효한 경우
print("Received data: \(jsonString)") // 데이터 출력
}
}
task.resume() // 요청 시작
실행 결과:
Received data: {"key": "value"}
let url = URL(string: "https://api.example.com/data")!: 요청할 URL을 생성합니다.let task = URLSession.shared.dataTask(with: url) { ... }: URLSession을 통해 데이터 요청 작업을 생성합니다.if let error = error { ... }: 요청 중 발생한 에러를 확인합니다.guard let data = data else { ... }: 반환된 데이터가 있는지 확인합니다.if let jsonString = String(data: data, encoding: .utf8) { ... }: 데이터를 문자열로 변환하고 출력합니다.task.resume(): 요청을 시작합니다.4. 실전 활용 예제
예제 1: 쇼핑몰에서 장바구니 정보 요청
쇼핑몰 애플리케이션에서 장바구니 정보를 서버에서 가져오는 경우입니다.
let cartURL = URL(string: "https://api.example.com/cart")!
let cartTask = URLSession.shared.dataTask(with: cartURL) { data, response, error in
// 동일한 에러 처리 로직
// JSON 데이터 처리 로직
}
cartTask.resume()
예제 2: 소셜 미디어 피드 요청
소셜 미디어 애플리케이션에서 사용자 피드를 요청하는 경우입니다.
let feedURL = URL(string: "https://api.example.com/feed")!
let feedTask = URLSession.shared.dataTask(with: feedURL) { data, response, error in
// 동일한 에러 처리 로직
// JSON 데이터 처리 로직
}
feedTask.resume()
5. 흔한 실수와 주의사항
- 잘못된 URL: let url = URL(string: "htp://invalid-url")!
- 올바른 URL: let url = URL(string: "https://valid-url.com")!
- 잘못된 코드: if let json = String(data: data, encoding: .utf8) { ... }
- 올바른 코드: guard let data = data else { print("No data received"); return }