TypeScript/비동기/Lesson 06
에러 처리 — catch 의 err 는 unknown, 좁혀서 써라
30분·theory
이 챕터
6/7
TypeScript
에러 처리 — catch 의 err 는 unknown, 좁혀서 써라
💡 왜 배워야 할까요? — 잡았다고 다 끝난 게 아니다
🎯
JS 의 catch 는 err 가 any — `.message` 에 그냥 접근. TS 는 `unknown` 으로 강제해서 '진짜 Error 인지' 확인하게 합니다.
💼
throw 는 무엇이든 던질 수 있습니다 — Error, 문자열, 숫자, 객체. catch 에서 모양을 가정하면 위험.
⚡
커스텀 Error 클래스 (ApiError, ValidationError 등) 로 에러를 분류하면 호출부에서 다르게 처리할 수 있습니다.
🔗
try/finally 로 자원 정리(파일 닫기·잠금 해제) 를 보장합니다 — 에러가 나든 안 나든 실행.
🏢 실무에서는
API 호출 실패는 401/403/404/500 각각 다른 UX 가 필요합니다. 401 → 로그인 페이지, 403 → 권한 안내, 404 → 빈 상태, 500 → 일시적 오류 안내. catch 에서 `err.status === 401` 같이 분기하려면 에러 객체의 타입을 알아야 합니다 — TS 의 `instanceof ApiError` 가 그 안전한 진입점입니다.
unknown 좁히기 · 커스텀 Error · try/finally
1. catch (err) 의 err 는 unknown (TS 4.4+)
2. 좁히는 3가지 패턴
3. 커스텀 Error 클래스 — 에러를 분류한다
호출부에서:
4. try/finally — 정리는 항상 실행
💡 💡 에러 처리 TS 핵심 5
1. catch 의 err 는 unknown — 좁혀라
2. 커스텀 Error 는 클래스로 만들고 name 을 박아라
3. 에러 분류는 instanceof 로err.code === 'XYZ' 같은 문자열 비교는 오타·중복 위험. 클래스 기반이 컴파일 시점에 안전.
4. finally 는 항상 실행 — 자원 정리
파일 닫기·DB 연결 해제·잠금 해제 같은 작업은 finally 로.
5. 절대 빈 catch 쓰지 마라
최소한 console.error(err) 라도. 아니면 다시 throw.
⚡ 직접 실행해보기 — 커스텀 Error + instanceof
에러를 종류별로 던지고 catch 에서 분기 처리합니다.
✏️ JS 코드
📟 콘솔 출력
▶ 실행 버튼을 눌러보세요
⚠️ 브라우저 샌드박스에서 실행 — console.log()만 지원, alert/fetch 불가
확인 퀴즈
TS 에서 `catch (err) { ... }` 의 `err` 를 가장 안전하게 좁히는 방법은?
먼저 읽으면 좋은 개념: Fetch API — 제네릭 헬퍼 fetchJson<T>
다음 추천: 에러 처리 심화 — Result<T, E> 패턴