피드로 돌아가기
Dev.toBackend
원문 읽기
Adapter 계층 Exception Translation을 통한 Domain 무결성 확보 및 벤더 종속성 제거
Translate Infrastructure Errors at the Adapter, Not in Your Domain
AI 요약
Context
Infrastructure Exception이 Use Case까지 전파되어 도메인 로직이 SQLSTATE 등 특정 DB 벤더의 에러 코드에 의존하는 Leak 현상 발생. 이로 인해 데이터베이스 교체 시 애플리케이션 전반의 수정이 불가피하며, In-memory Fake를 활용한 단위 테스트 작성이 어려운 구조적 한계 노출.
Technical Solution
- Repository 구현체(Adapter) 내부에 try/catch 블록을 배치하여 Infrastructure Exception을 즉시 포착하는 구조 설계
- 벤더 전용 예외를 Domain Layer에서 정의한 전용 Exception(예: EmailAlreadyTaken)으로 변환하여 상위 계층으로 전달
- Exception Chaining의 $previous 인자를 활용하여 원본 스택 트레이스를 보존함으로써 운영 단계의 디버깅 가능성 유지
- Application 및 Domain 계층 내 벤더 네임스페이스(Doctrine, GuzzleHttp 등) 참조를 금지하는 엄격한 경계 설정
- CI 단계에서 grep 또는 deptrac를 활용하여 도메인 영역 내 벤더 라이브러리 유입을 강제로 차단하는 자동화 검증 도입
실천 포인트
1. Use Case 내에 DB/HTTP 라이브러리 전용 Exception 클래스가 import 되어 있는지 확인
2. Adapter 계층에서 발생한 예외를 도메인 예외로 변환할 때 원본 예외를 $previous로 전달하고 있는지 검토
3. CI 파이프라인에 도메인/애플리케이션 계층의 벤더 종속성 체크 스크립트(grep 등) 추가 적용
태그