본문 바로가기

iOS 앱 개발자 프로젝트/iOS 숙련

[iOS] URLSession

728x90

URLSession

: An object that coordinates a group of related, network data transfer tasks.

 

즉, 네트워크 데이터를 가져오거나 보내는 작업을 coordinate 합니다.

class URLSession : NSObject

 

 

URLSession | Apple Developer Documentation

An object that coordinates a group of related, network data transfer tasks.

developer.apple.com


 

URLSession 주요 특징

 

1. 비동기적 네트워킹 (Asynchronous Networking) :

 네트워크 요청을 비동기적으로 처리하여 백그라운드에서 작업이 수행되어 앱 성능을 향상시키며 응답성을 유지할 수 있다.

 

2. 다양한 데이터 전송 방식 지원  : 

데이터를 업로드하거나 다운로드할 수 있으며, JSON, 이미지, 파일 등 다양한 데이터 형식을 처리할 수 있다. 

 

3. 캐시와 쿠키 관리  :

네트워크 응답을 캐싱하고 쿠키를 관리할 수 있는 기능을 제공한다.

 

 

 

GET 예시 ▽

import Foundation

// URLSession 인스턴스 생성
let session = URLSession.shared

// URL 생성
if let url = URL(string: "https://api.example.com/data") {
    // URLSessionDataTask를 사용하여 비동기적으로 데이터 요청
    let task = session.dataTask(with: url) { (data, response, error) in
        if let error = error {
            print("Error: \(error)")
        } else if let data = data {
            // 데이터를 받아온 후 처리하는 로직을 작성
            print("Received data: \(data)")
        }
    }
    
    // 네트워크 요청 시작
    task.resume()
}

 

GET 요청의 특징

  •  서버로부터 데이터를 요청하는 HTTP 메서드
  •  URL에 파라미터를 포함하여 데이터를 요청

GET 요청 사용 사례

  • 데이터 조회, 검색 기능 구현 시 사용
  • 웹 브라우저의 URL 입력창에서 사용
  • 캐시 활용이 용이하여 성능 향상에 도움

GET 요청 구현 방법

  • URLSession을 사용하여 비동기적으로 GET 요청을 보낼 수 있다. 
  • URLRequest를 사용하여 HTTP 메서드를 직접 설정할 수 있다. 
  • Alamofire 라이브러리를 사용하여 간편하게 GET 요청을 보낼 있다

 

 

URLRequest를 사용한 POST 예시  

import Foundation

// URLSession 인스턴스 생성
let session = URLSession.shared

// URL 생성
if let url = URL(string: "https://api.example.com/data") {
  // URLSessionDataTask를 사용하여 비동기적으로 데이터 요청
  
  // URLRequest 생성
  var request = URLRequest(url: url)
  
  // HTTP 메서드 설정 (POST)
  request.httpMethod = "POST" // GET / PUT / DELETE 사용 가능

  // HTTP 헤더 설정
  request.addValue("application/json", forHTTPHeaderField: "Content-Type")
  
  // HTTP Body에 보낼 데이터 설정 (JSON 형식)
  let parameters: [String: String] = [
    "value1": "example value",
    "value2": "example value"
    // 추가적인 필요한 데이터 추가 가능
  ]
  
  // HTTP Body에 JSON 데이터 설정
  request.httpBody = try? JSONEncoder().encode(parameters)
  
  let task = session.dataTask(with: request) { (data, response, error) in
    if let error = error {
      print("Error: \(error)")
    } else if let data = data {
      // 데이터를 받아온 후 처리하는 로직을 작성
      print("Received data: \(data)")
    }
  }
  
  // 네트워크 요청 시작
  task.resume()
}
728x90