오류 처리와 HTTP 상태 코드
응답 상태 코드를 확인하고 오류를 형이 지정된 도메인 오류로 매핑합니다.
오류 처리와 HTTP 상태 코드은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
HTTP 상태 코드 범위
HTTP 응답은 상태 코드로 성공 또는 실패를 나타냅니다. 2xx는 성공, 3xx는 리디렉션, 4xx는 클라이언트 오류, 5xx는 서버 오류입니다.
// 200 OK, 201 Created
// 400 Bad Request, 401 Unauthorized, 404 Not Found
// 500 Internal Server ErrorSwift에서 상태 확인하기
비동기 요청 후 URLResponse를 HTTPURLResponse로 변환하고 statusCode를 확인합니다.
let (data, response) = try await URLSession.shared.data(from: url)
guard let http = response as? HTTPURLResponse else {
throw NetworkError.invalidResponse
}
guard (200..<300).contains(http.statusCode) else {
throw NetworkError.httpError(http.statusCode)
}형식이 지정된 네트워크 오류
네트워크 실패를 나타내는 형식이 지정된 오류 열거형을 정의하면 모든 경우를 빠짐없이 처리하는 catch 블록을 작성할 수 있습니다.
enum NetworkError: Error {
case invalidURL
case invalidResponse
case httpError(Int)
case decodingError(Error)
case noData
}상태 코드를 오류로 매핑하기
상태 코드에 따라 분기하여 단순한 정수가 아닌 의미 있는 도메인 오류를 발생시킵니다.
switch http.statusCode {
case 200..<300: break // success
case 401: throw NetworkError.unauthorized
case 404: throw NetworkError.notFound
case 500..<600: throw NetworkError.serverError(http.statusCode)
default: throw NetworkError.httpError(http.statusCode)
}오류 응답 디코딩
상태가 오류를 나타낼 때 본문에는 JSON 오류 메시지가 포함되어 있는 경우가 많습니다. 더 정확한 진단을 위해 이를 디코딩합니다.
if http.statusCode != 200 {
struct APIError: Decodable { var message: String }
let apiError = try? JSONDecoder().decode(APIError.self, from: data)
throw NetworkError.serverMessage(apiError?.message ?? "Unknown error")
}비동기 코드에서 오류 전파하기
Swift의 구조적 동시성은 오류를 자연스럽게 전파합니다. TaskGroup에서 오류가 발생하면 형제 작업이 취소됩니다.
async let users = fetchUsers()
async let posts = fetchPosts()
let (u, p) = try await (users, posts) // if either throws, both cancel특정 오류 처리하기
형식이 지정된 catch 블록을 사용하면 호출하는 코드에서 서로 다른 종류의 오류를 구분하여 처리할 수 있습니다.
do {
let items = try await fetchItems()
} catch NetworkError.unauthorized {
showLoginScreen()
} catch NetworkError.httpError(let code) {
print("HTTP Error: \(code)")
} catch {
print("Unexpected: \(error)")
}URLError 코드
URLError는 연결 실패를 설명합니다. 예를 들면 .notConnectedToInternet, .timedOut, .cannotFindHost가 있습니다.
do {
let (data, _) = try await URLSession.shared.data(from: url)
} catch let urlError as URLError where urlError.code == .notConnectedToInternet {
print("No internet connection")
}네트워크용 Result 래퍼
호출자가 try/catch 없이 오류를 처리하도록 하려면 fetch 함수에서 Result를 반환합니다.
func fetchUser() async -> Result<User, NetworkError> {
do {
let user = try await performFetch()
return .success(user)
} catch let e as NetworkError {
return .failure(e)
} catch {
return .failure(.unknown)
}
}오류 기록
운영 환경에서 디버깅을 돕도록 관련 컨텍스트(URL, 상태 코드, 본문)를 포함해 네트워크 오류를 기록합니다.
func log(_ error: NetworkError, url: URL) {
print("[Network] \(url.absoluteString) → \(error)")
}사용자에게 표시할 오류 메시지
기술적인 오류를 사용자가 이해하기 쉬운 문자열로 매핑합니다. UI에 원시 HTTP 상태 코드를 표시해서는 안 됩니다.
extension NetworkError: LocalizedError {
var errorDescription: String? {
switch self {
case .unauthorized: return "Please log in again."
case .notFound: return "The requested item was not found."
case .serverError: return "Server error. Please try again later."
default: return "Something went wrong."
}
}
}빠른 확인
성공적인 응답을 나타내는 HTTP 상태 코드 범위는 무엇입니까?
단원 요약
URLSession.data(from:) 호출 후 HTTPURLResponse로 변환하고 statusCode를 확인합니다. 코드를 형식이 지정된 Error 경우로 매핑합니다. 연결 실패에는 URLError를 사용합니다. try/throw로 오류를 전파하고 형식이 지정된 catch 블록으로 처리합니다.
자주 묻는 질문
“오류 처리와 HTTP 상태 코드” 강의는 무료인가요?
네 — “오류 처리와 HTTP 상태 코드” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“오류 처리와 HTTP 상태 코드”에서 뭘 배우나요?
응답 상태 코드를 확인하고 오류를 형이 지정된 도메인 오류로 매핑합니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Swift Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“오류 처리와 HTTP 상태 코드” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- async/await를 사용한 URLSession data(from:)
- Codable: JSON 인코딩과 디코딩
- 오류 처리와 HTTP 상태 코드
- 재시도 로직과 백그라운드 URLSession