본문 바로가기
🍎 Swift/iOS 학습 노트

[Swift🍎] URLSession 뜯어보기

by 솔비님 2025. 1. 17.

 

1.  URLSession 이란?

앱과 인터넷이 상호작용 할 수 있게 도와준다
  • 웹 페이지 데이터 가져오기 (HTTP GET 요청)
  • 서버에 데이터 보내기 (HTTP POST 요청)
  • 파일 다운로드 및 업로드
  • 백그라운드 네트워킹 작업

 

 

2.  기본 구성 요소

  • URL: 네트워크 요청을 보낼 대상의 주소
  • URLRequest: 네트워크 요청을 구성하는 객체. URL, HTTP 메서드(GET, POST...), 헤더, 본문(body) 등 설정
  • URLSession: 요청을 보내고 응답을 처리하는 객체. 네트워크 작업의 중심
  • URLSessionDataTask: URLSession에서 데이터를 가져오거나 보내는 작업의 단위

 

 

3.  사용 방법

3-1.  간단한 GET 요청

import Foundation

// 1. URL 생성
let url = URL(string: "https://jsonplaceholder.typicode.com/posts")!

// 2. URLSession을 사용한 요청
let task = URLSession.shared.dataTask(with: url) { data, response, error in
    // 3. 에러 확인
    if let error = error {
        print("Error: \(error.localizedDescription)")
        return
    }

    // 4. 데이터 확인
    if let data = data, let responseString = String(data: data, encoding: .utf8) {
        print("Response: \(responseString)")
    }
}

// 5. 작업 시작
task.resume()

1️⃣  위 코드에서 2. URLSession을 사용한 요청에서 data, response, error이 각각 의미하는 바

  • data: 서버에서 받은 데이터
  • response: 서버의 응답 정보
  • error: 요청 중 발생한 에러

2️⃣  String(data: data, encoding: .utf8)

여기서 data는 서버가 반환한 JSON 데이터이다

이것을 UTR-8 문자 인코딩을 사용하여 사람이 읽을 수 있는 문자열로 변환하는 것이다

 

 

3-2.  POST 요청 (데이터 보내기)

import Foundation

// 1. URL 생성
let url = URL(string: "https://jsonplaceholder.typicode.com/posts")!

// 2. URLRequest 생성
var request = URLRequest(url: url)
request.httpMethod = "POST" // HTTP 메서드 설정
request.addValue("application/json", forHTTPHeaderField: "Content-Type") // 헤더 설정

// 3. 요청 본문 설정
let parameters: [String: Any] = ["title": "foo", "body": "bar", "userId": 1]
let jsonData = try! JSONSerialization.data(withJSONObject: parameters)
request.httpBody = jsonData

// 4. URLSession을 사용한 요청
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    // 에러 확인
    if let error = error {
        print("Error: \(error.localizedDescription)")
        return
    }

    // 데이터 확인
    if let data = data, let responseString = String(data: data, encoding: .utf8) {
        print("Response: \(responseString)")
    }
}

// 5. 작업 시작
task.resume()

-> 아직 사용하지 않는 부분이라 추가적인 정리가 필요!