피드로 돌아가기
Dev.toBackend
원문 읽기
Custom Exception 도입을 통한 HTTP 의존성 제거 및 도메인 중심 에러 핸들링 체계 구축
Taming Error Handling in Laravel with Custom Exceptions
AI 요약
Context
비즈니스 로직 내 abort() 헬퍼 사용으로 인한 HTTP 컨텍스트 강제 결합 문제 발생. Controller 외 Service, Job, CLI 등 다양한 진입점에서 로직 재사용 시 세맨틱 불일치 및 단위 테스트의 어려움 초래.
Technical Solution
- 도메인 개념별 Base Exception 정의 및 getKey() 추상 메서드를 통한 폼 필드 매핑 구조 설계
- 각 실패 시나리오별 구체적인 Concrete Exception 클래스를 구현하여 도메인 신호를 명확히 정의
- Business Logic 내에서는 HTTP 상태 코드 대신 정의된 Domain Exception을 Throw 하여 관심사 분리 달성
- Controller 계층에서 Domain Exception을 Catch 하여 ValidationException으로 변환하는 어댑터 역할 수행
- 전역 Handler가 아닌 Controller 수준의 Catch 구문을 통해 엔드포인트별 유연한 응답 포맷 결정
- Laravel 표준 ValidationException 구조를 활용하여 프론트엔드와의 인터페이스 일관성 유지
실천 포인트
1. 비즈니스 로직(Action/Service) 내에 HTTP 상태 코드나 abort() 함수가 포함되어 있는지 검토
2. 에러 상황을 단순 메시지가 아닌 독립적인 Exception 클래스로 정의하여 타입 안정성 확보
3. Base Exception에 메타데이터(예: field key)를 정의하여 UI 매핑 로직을 캡슐화
4. 전역 Exception Handler는 로깅 및 500 에러 처리 등 공통 관심사에 집중하고, 도메인 에러 변환은 최상위 요청 처리 계층에서 수행