728x90
URLSession
: An object that coordinates a group of related, network data transfer tasks.
즉, 네트워크 데이터를 가져오거나 보내는 작업을 coordinate 합니다.
class URLSession : NSObject
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
'iOS 앱 개발자 프로젝트 > iOS 숙련' 카테고리의 다른 글
[iOS] DataManager & ViewController (relationship) (0) | 2024.04.14 |
---|---|
[iOS] Decodabe, Encodable, Codable (0) | 2024.04.13 |
[iOS] Core Data stack (0) | 2024.04.12 |
[iOS] Core Data (+ Modeling Data) (0) | 2024.04.11 |
[iOS] WishList App (feat. Network &API) (0) | 2024.04.11 |