//
// NetworkError.swift
// HOLIX_iOS
//
// Created by 정정욱 on 5/19/25.
//
import Foundation
enum NetworkError: Int, Error, CustomStringConvertible {
var description: String { self.errorDescription }
case invalidURL
case requestEncodingError
case responseDecodingError
case responseError
case unknownError
case loginFailed = 400
case notFoundError = 404
case notAllowedMethod = 405
case internalServerError = 500
var errorDescription: String {
switch self {
case .invalidURL: return "잘못된 URL입니다."
case .requestEncodingError: return "요청 인코딩에 실패했습니다."
case .responseDecodingError: return "응답 디코딩에 실패했습니다."
case .responseError: return "응답 오류가 발생했습니다."
case .unknownError: return "알 수 없는 오류가 발생했습니다."
case .loginFailed: return "로그인에 실패하였습니다."
case .notFoundError: return "요청한 자원을 찾을 수 없습니다."
case .notAllowedMethod: return "지원하지 않는 HTTP 메서드입니다."
case .internalServerError: return "서버 내부 오류가 발생했습니다."
}
}
}
클라이언트(iOS)와 서버(API)는 서로 다른 레이어이기 때문에, 에러도 각자 책임과 역할이 있습니다.
| 구분 | 설명 | 예시 |
|---|---|---|
| 서버에서 정의하는 에러 (서버 에러) | API 응답 본문(code, message) 또는 HTTP 상태코드 |
HTTP 400, 401, 404, 500 {"code": 404, "message": "클럽을 찾을 수 없습니다."} |
| 클라이언트에서 정의하는 에러 (클라 에러) | URL이 잘못됨, 디코딩 실패, 로컬 캐시 실패 등 앱 내부 문제 |
.invalidURL, .responseDecodingError, .requestEncodingError, .noInternetConnection |
HTTP 404 Not Found
{
"code": 404,
"message": "해당 클럽을 찾을 수 없습니다."
}
response.statusCode로 이걸 보고,
NetworkError.notFoundError로 해석하거나"message"도 뽑아서 사용자에게 표시할 수 있음.invalidURL.responseDecodingError.requestEncodingError이건 서버랑 상관없이 클라이언트 앱 안에서 발생하는 문제