0Pricing
Swift Academy · 강의

오류 처리와 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 Error

Swift에서 상태 확인하기

비동기 요청 후 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. async/await를 사용한 URLSession data(from:)
  2. Codable: JSON 인코딩과 디코딩
  3. 오류 처리와 HTTP 상태 코드
  4. 재시도 로직과 백그라운드 URLSession
← Swift Academy(으)로 돌아가기