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()
-> 아직 사용하지 않는 부분이라 추가적인 정리가 필요!
'🍎 Swift > iOS 학습 노트' 카테고리의 다른 글
[스터디11일차][RxSwift] Subscribe & Bind & Driver (0) | 2025.01.22 |
---|---|
[Swift🍎] tableView, collectionView 식별자 간단하게 관리하기! (1) | 2024.10.31 |
[Swift🍎] RxSwift로 UITableView에 bind 하기 (0) | 2024.10.31 |
[Swift🍎] RxGesture로 간편하게 View에 클릭이벤트 넣기 (0) | 2024.10.17 |
[Swift🍎] UIColor를 CGColor에 할당해야 하는 경우 (0) | 2024.10.16 |