[TIL] URLSession

Eden·2025년 7월 3일

URLSession은 Swift에서 네트워크 통신을 처리하기 위한 핵심 클래스입니다.
REST API와 통신하거나 파일을 다운로드할 때 주로 사용됩니다.


1. URLSession이란?

  • HTTP/HTTPS 요청을 보내고 응답을 받을 수 있게 해주는 클래스
  • 기본적으로 비동기 방식으로 동작
  • 백그라운드 다운로드, 업로드, 캐싱 등 다양한 기능을 지원

2. 구성 요소

구성 요소설명
URLSession요청을 생성하고 관리하는 객체
URLRequest요청의 상세 정보를 담는 구조체
URLSessionTask실제 네트워크 요청을 수행하는 작업 객체
URLSessionDataTask데이터를 요청하고 응답을 받는 작업
URLSessionDownloadTask파일 다운로드를 위한 작업
URLSessionUploadTask파일 업로드를 위한 작업

3. 기본 사용 방법

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)")
        return
    }

    guard let data = data else { return }

    // 받은 데이터 처리
    print(String(data: data, encoding: .utf8) ?? "")
}

task.resume()

4. URLRequest 사용 예

var request = URLRequest(url: URL(string: "https://api.example.com/login")!)
request.httpMethod = "POST"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")

let body = ["id": "user123", "pw": "pass"]
request.httpBody = try? JSONSerialization.data(withJSONObject: body)

let task = URLSession.shared.dataTask(with: request) { data, response, error in
    // 응답 처리
}
task.resume()

5. URLSession Configuration

  • default: 캐시, 쿠키 등 사용
  • ephemeral: 캐시, 쿠키 저장하지 않음 (인메모리)
  • background: 백그라운드에서도 다운로드 가능

예시:

let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)

6. 주의사항

  • 요청은 resume() 호출 전까지 실행되지 않음
  • 메인 스레드에서 UI 업데이트 필요 시 DispatchQueue.main.async 사용
  • 응답 처리 시 옵셔널 바인딩과 에러 처리를 반드시 해줘야 안전

결론

URLSession은 iOS 네트워크 통신의 기본 도구로, REST API 연동이나 파일 전송 등에 널리 사용됩니다.
구조와 흐름을 잘 이해하면 대부분의 네트워크 작업을 안정적으로 처리할 수 있습니다.

profile
iOS Dev

0개의 댓글