3-5 URL Session

STONE·2024년 11월 8일

Swift_Ios

목록 보기
13/44

주제

URL Session

iOS에서 네트워크 요청을 처리하기 위한 프레임워크이다. 서버와 데이터를 주고받을 수 있게 도와주는 API로, HTTP 요청, 파일 다운로드 및 업로드, 백그라운드 작업 등을 처리할 수 있다. URL Session을 사용하면 REST API와 같은 서버와의 통신, JSON 데이터를 주고받는 일, 이미지 다운로드 등을 손쉽게 구현 가능하다

URL Session을 사용 위해 필요한 세가지 요소

  1. URL Session 인스턴스
  2. URL Request
  3. Data Task, Download Task

URL Session 인스턴스

네트워크 요청을 관리한다. URLSession.shared라는 기본 인스턴스도 제공하며, 이는 간단한 네트워크 작업에 적합하다. 더 복잡한 요구 사항이 있는 경우 커스텀 설정이 가능한 URLSessionConfiguration을 사용해 URLSession을 구성할 수도 있습니다.

URLRequest

요청의 세부 사항을 설정하는 객체이다. 요청할 URL과 HTTP메소드(GET,POST,PUT 등)헤더, 바디 등을 설정할 수 있다.

Data Task, Download Task

데이터를 주고받는 작업을 수행하는 구체적인 작업입니다. URLSession에서 제공하는 dataTask(with:), downloadTask(with:)등을 통해 서버와 데이터를 주고받는다

URLSession 예시

import Foundation

let url = URL(string: "https://api.example.com/data")! // 요청할 URL을 생성합니다. 유효한 URL을 문자열로 입력하고, URL 객체로 만듭니다.
                                                      // 여기서 강제 언래핑(!)을 사용했으므로, URL이 nil이 아닌지 확실히 해야 합니다.

let task = URLSession.shared.dataTask(with: url) { data, response, error in
    // dataTask(with:) 메소드를 사용해 네트워크 요청을 설정하고, 완료 시 실행할 클로저(콜백)를 정의합니다.
    // data는 서버로부터 응답받은 데이터이고, response는 HTTP 응답 정보, error는 오류 정보입니다.
    
    if let error = error { // error가 nil이 아니라면, 요청이 실패했음을 의미합니다.
        print("Error: \(error)") // 오류 메시지를 출력하고, return으로 함수 실행을 종료합니다.
        return
    }

    guard let data = data else { // data가 nil인 경우를 확인합니다. data가 nil이라면 서버로부터 데이터가 도착하지 않은 것입니다.
        print("No data received.") // 데이터가 없음을 출력하고, return으로 함수 실행을 종료합니다.
        return
    }

    // 받은 데이터를 JSON 형태로 변환할 수 있는지 확인하고, 디코딩합니다.
    do {
        let json = try JSONSerialization.jsonObject(with: data, options: []) 
        // JSONSerialization.jsonObject 메소드를 통해 데이터를 JSON 객체로 변환합니다.
        // 이 메소드가 JSON 변환에 실패할 경우 오류를 발생시키므로, do-catch 구문을 사용하여 오류를 처리합니다.
        
        print("Response JSON: \(json)") // 변환된 JSON 데이터를 출력합니다.
    } catch {
        print("JSON decoding error: \(error)") // JSON 변환 중 오류가 발생하면 해당 오류를 출력합니다.
    }
}

task.resume() // 데이터 작업이 준비되었으므로, 실제로 네트워크 요청을 시작합니다.

profile
흠...?

0개의 댓글