-
Notifications
You must be signed in to change notification settings - Fork 0
에러 핸들링
Hyemin Heo edited this page Jan 12, 2025
·
1 revision
레이어 단위라면 Supabase 레이어 내부에서 발생할 수 있는 에러 상황을 모두 하나의 타입에 저장해야 한다.
하지만 Auth, DB, Storage 각각의 에러의 성격이 달라서 ex) 업로드, 다운로드 에러와 세션 갱신 실패 에러가 같은 타입 안에 있어야 함
오히려 응집도가 떨어지는 상황이라고 판단해서 각 Manager 단위로 에러 타입을 따로 만듦
에러가 전파되는 과정에서 어떤 순서대로 에러가 전파되는지 확인할 필요가 있다고 생각함…
ex) MPC 통신 실패 → 인코딩/디코딩 에러 → 왜?
그래서 에러를 바인딩 해서 출력 해야할 것 같다.
do {
try ...
try ...
try ...
} catch {
SNMLogger.error(error.localizedDescription)
throw 어쩌구...
}
에러를 발생시키는 케이스는 크게 두 가지로 구분 가능
- 유저에게 알려야 하는 에러 ex) 로그인 실패, MPC 통신 실패…
- 유저에게 알릴 필요가 없는 에러 ex) 세션 갱신 실패…
두 가지 케이스를 구분하기 위하여 SNMError로 최종적인 에러 레벨을 결정하는 방식 채용
struct SNMError: LocalizedError {
enum ErrorLevel: String {
case user = "유저"
case developer = "개발자"
}
let level: ErrorLevel
let error: any Error
var errorDescription: String? {
"\(level.rawValue) 레벨 에러 \(error.localizedDescription) 발생"
}
}
모든 에러를 SNMError로 만들 필요는 없고, 최종적인 핸들링 작업이 들어가기 전에만 SNMError로 만들어주면 됨!