타이프스크립트에서 try-catch 사용 중단, 오류 반환 방식으로 전환
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴
대상자
- 타겟: TypeScript 개발자, 중급 이상의 오류 처리 경험이 있는 개발자
- 난이도: 중급 (타입스크립트의 타입 시스템 이해 필요)
핵심 요약
- 함수 시그니처의 진실성 강화 -
Result
타입을 사용해throw
대신 오류 반환 - 타입스크립트의 오류 강제 처리 -
switch
문을 통해AppError
타입의 모든 경우 처리 - 모듈 간 오류 전파 -
AsyncResult
를 통해 비동기 함수 간 오류 체이닝 가능 - 오류 유형 명확화 -
AppError
,PaymentError
등 비즈니스 로직에 맞춘 커스텀 오류 타입 정의
섹션별 세부 요약
1. 기존 try-catch 패턴의 한계
- 함수 시그니처의 오류 -
Promise
반환 유형에throw
가능성 생략 - 오류 유형 불명확 - TypeScript로
Error
타입의 구체적 원인 파악 불가 - 오류 처리 소홀 -
try-catch
생략 시 예외 누락 가능성 - 오류 문맥 손실 - 네트워크 오류, 검증 오류 등 구분 불가
2. Result 타입 기반 오류 처리 방식
- Result
타입 정의 -ok: true
시value
반환,ok: false
시error
반환 - AsyncResult
타입 사용 - 비동기 함수의Promise
반환 유형> - 커스텀 오류 타입 정의 -
AppError
,PaymentError
등 비즈니스 로직 맞춤 오류 유형 정의 - 명시적 오류 처리 -
switch (result.error.type)
문을 통해 모든 오류 유형 처리 강제
3. 오류 체이닝과 모듈 간 전파
- 체이닝 기능 -
createOrder
함수에서getUser
및validateItems
결과를Result
로 반환 - 오류 전파 -
if (!result.ok) return result
구문으로 오류 전달 - 타입 안전성 확보 -
AsyncResult
타입을 통해 비동기 함수 간 오류 전파 시 타입 체크
4. 실무 적용 예시 (UserJot SaaS)
- FeedbackError 타입 정의 -
BOARD_NOT_FOUND
,RATE_LIMITED
등 사용자 피드백 관련 오류 유형 - submitFeedback 함수 구현 -
AsyncResult
반환, 모든 오류 유형 명시적 처리 - 생산성 향상 -
Zero unexpected errors in production
달성, 사용자에게 명확한 오류 메시지 제공
결론
- 타입스크립트의 오류 처리 강화 -
Result
타입을 도입해try-catch
대신 오류 반환 - 실무 적용 권장 - 다음 프로젝트에서
Result
타입을 하나의 모듈에 도입해 시작 - 유지보수성 향상 - 오류 유형이 타입 시스템에 명시되어 있어 디버깅 및 유지보수 용이
- 사용자 경험 개선 - "Something went wrong" 대신 구체적 오류 메시지 제공 가능