오류 모델링
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
Node.js 및 TypeScript 기반 애플리케이션 개발자, 특히 오류 처리 및 로깅을 담당하는 개발자
핵심 요약
- 오류 유형 분류:
SyntaxError
,TypeError
,ValidationError
,Internal Server Error
등 오류의 원인과 대응 전략이 다름 - 오류 추적 강화:
Error.prototype.cause
를 활용해 오류 원인을 체인하여 추적 가능 - 오류 전환 전략: 외부 서비스 오류를
PaymentFailedError
등 맞춤 오류로 변환하여 사용자/운영자에 맞는 처리 가능
섹션별 세부 요약
1. 오류 유형의 개념적 이해
SyntaxError
: JSON 파싱 실패 시 발생, 외부 API 응답의 형식 검증 누락으로 인해 발생TypeError
: null 값에 접근 시 발생, 정적 코드 분석으로 사전에 탐지 가능ValidationError
: 데이터베이스 또는 도메인 레이어에서 발생, 사용자에게 명확한 피드백 제공Internal Server Error
: HTTP 500 상태 코드로 표현, 서버 측의 심각한 오류로 로깅 및 복구 필요
2. 오류 처리 전략
- 개발자 중심 오류:
SyntaxError
/TypeError
는 컴파일 시점 또는 정적 분석으로 사전 탐지, 런타임 시 로깅으로 대응 - 사용자 중심 오류:
ValidationError
는 사용자에게 피드백 제공, 오류 추적 시스템에서는 무시 - 서버 측 오류:
Internal Server Error
는 내부 로깅 시 많은 세부 정보 수집, 클라이언트에는 최소한의 정보 노출
3. 오류 전파 및 추적
- 스택 트레이스:
FunctionA() → FunctionB() → FunctionC()
순으로 오류 전파,catch
블록으로 중단 가능 - 오류 체인:
Error.prototype.cause
로 오류 원인 체인 생성, Sentry 등 오류 추적 도구에 추가 정보 제공
4. 오류 전환 및 처리 예시
- Stripe API 오류 처리:
```typescript
try {
stripe.pay();
} catch (stripeError) {
if (stripeError instanceof Stripe.InvalidCardDetails) {
throw new PaymentFailedError("Payment failed due to invalid payment details", { cause: stripeError });
}
}
```
- 오류 유형에 따른 대응:
- PaymentFailedError
: 사용자에게 재시도 요청
- GatewayAuthError
: 운영자에게 알림, FATAL 레벨 로깅
결론
- 오류 모델링 핵심:
Error.prototype.cause
를 활용한 오류 원인 체인, 오류 유형에 따른 대응 전략 구분 - 실무 적용 팁: 외부 서비스 오류를 맞춤 오류로 변환하여 사용자/운영자 분리 처리, 로깅 시 세부 정보 수집 후 클라이언트에는 최소 정보 노출
- 추천: 오류 유형을 사전에 정의하고, 각 오류에 맞는 데이터를 체계적으로 모델링하여 추적 및 복구 가능하게 설계