피드로 돌아가기
A Domain Logger Port: Decoupling From PSR-3 Without Losing Context
Dev.toDev.to
Backend

PSR-3 의존성 제거를 통한 Domain Layer 순수성 확보 및 Logger Port 설계

A Domain Logger Port: Decoupling From PSR-3 Without Losing Context

Gabriel Anhaia2026년 6월 13일9intermediate

Context

Application Layer 내 PSR-3 LoggerInterface 직접 사용으로 인한 인프라 의존성 누수 발생. 시스템 관리 관점의 Log Level(RFC 5424)이 도메인 로직에 침투하여 비즈니스 의미가 희석되는 설계 한계 직면.

Technical Solution

  • Domain 전용 인터페이스인 DomainLogger 포트를 정의하여 인프라 의존성을 Application Layer 외부로 격리
  • 8단계의 복잡한 Log Level을 도메인 중심의 event()와 failure() 두 가지 메서드로 단순화
  • 로그 메시지를 문장이 아닌 dot-namespaced 형태의 이벤트 이름으로 정의하여 분석 효율성 증대
  • context 데이터를 scalar 타입의 flat map으로 제한하여 JSON 직렬화 안정성 확보
  • Adapter 패턴을 적용하여 DomainLogger 호출을 Monolog 등의 실제 구현체로 매핑하는 구조 설계
  • CI 단계에서 도메인 경계 내 Psr\Log 임포트 여부를 검사하는 static analysis 규칙 적용

1. Application/Domain Layer 내에 외부 로깅 라이브러리 임포트가 존재하는지 확인

2. Log Level 결정 주체가 비즈니스 로직인지 인프라 계층인지 검토

3. 로그 메시지를 정형화된 이벤트 이름(예: order.placed)으로 대체 가능한지 분석

4. 로깅 인터페이스를 도메인 전용 Port로 분리하고 Adapter를 통해 구현체와 연결

원문 읽기