URLSession이란

URLSessionConfiguration을 통해 URL 생성

URLSessionTask 작업 유형

URL을 구성하는 요소

let urlString = "<https://ios-development.tistory.com/search/users?id=123&age=20>"
let url = URL(string: urlString)

/// 주소 전체 "<https://ios-development.tistory.com/search/users?id=123&age=20>"
print(url?.absoluteURL)
/// 어떤식으로 네트워킹 하는지 "https"
print(url?.scheme)
/// baseURL과 같이 메인 주소 "ios-development.tistory.com"
print(url?.host)
/// host뒤에 query parameter를 제외한 주소 "/search/users"
print(url?.path)
/// query parameter 값 "id=123&age=20"
print(url?.query)
/// 설정하지 않으면 디폴트는 nil
print(url?.baseURL)

let baseURL = URL(string: "<https://ios-development.tistory.com>")
let relativeURL = URL(string: "/search/users?id=123&age=20", relativeTo: baseURL)
print(relativeURL?.absoluteURL)
print(relativeURL?.scheme)
print(relativeURL?.host)
print(relativeURL?.path)
print(relativeURL?.query)
print(relativeURL?.baseURL)// 이제 baseURL 확인 가능 "<https://ios-development.tistory.com>"

URLSession과 URLSessionTask

// URLSessionConfiguration 생성 (세 가지 존재): .default / .ephemeral / .background
let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)

// URLComponents를 생성하여 query 설정
var urlComponents = URLComponents(string: "<https://ios-development.tistory.com/search/users?">)
let userIDQuery = URLQueryItem(name: "id", value: "123")
let ageQuery = URLQueryItem(name: "age", value: "20")
urlComponents?.queryItems?.append(userIDQuery)
urlComponents?.queryItems?.append(ageQuery)

// URLComponents와 URLSession을 이용하여 URLSessionDataTask 생성
guard let requestURL = urlComponents?.url else { return }
let dataTask = session.dataTask(with: requestURL) { (data, response, error) in

// error가 존재하면 종료
guard error == nil else { return }

// status 코드가 200번대여야 성공적인 네트워크라 판단
let successsRange = 200..<300
    guard let statusCode = (response as? HTTPURLResponse)?.statusCode,
          successsRange.contains(statusCode) else { return }

// response 데이터 획득, utf8인코딩을 통해 string형태로 변환
guard let resultData = data else { return }
    let resultString = String(data: resultData, encoding: .utf8)
    print(resultData)
    print(resultString)
}

// network 통신 실행
dataTask.resume()