TypeScript Error Handling: Replace Try-Catch with Result Typ

타이프스크립트에서 try-catch 사용 중단, 오류 반환 방식으로 전환

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

개발 툴

대상자

- 타겟: TypeScript 개발자, 중급 이상의 오류 처리 경험이 있는 개발자

- 난이도: 중급 (타입스크립트의 타입 시스템 이해 필요)

핵심 요약

  • 함수 시그니처의 진실성 강화 - Result 타입을 사용해 throw 대신 오류 반환
  • 타입스크립트의 오류 강제 처리 - switch 문을 통해 AppError 타입의 모든 경우 처리
  • 모듈 간 오류 전파 - AsyncResult를 통해 비동기 함수 간 오류 체이닝 가능
  • 오류 유형 명확화 - AppError, PaymentError 등 비즈니스 로직에 맞춘 커스텀 오류 타입 정의

섹션별 세부 요약

1. 기존 try-catch 패턴의 한계

  • 함수 시그니처의 오류 - Promise 반환 유형에 throw 가능성 생략
  • 오류 유형 불명확 - TypeScript로 Error 타입의 구체적 원인 파악 불가
  • 오류 처리 소홀 - try-catch 생략 시 예외 누락 가능성
  • 오류 문맥 손실 - 네트워크 오류, 검증 오류 등 구분 불가

2. Result 타입 기반 오류 처리 방식

  • Result 타입 정의 - ok: truevalue 반환, ok: falseerror 반환
  • AsyncResult 타입 사용 - 비동기 함수의 Promise> 반환 유형
  • 커스텀 오류 타입 정의 - AppError, PaymentError 등 비즈니스 로직 맞춤 오류 유형 정의
  • 명시적 오류 처리 - switch (result.error.type) 문을 통해 모든 오류 유형 처리 강제

3. 오류 체이닝과 모듈 간 전파

  • 체이닝 기능 - createOrder 함수에서 getUservalidateItems 결과를 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" 대신 구체적 오류 메시지 제공 가능