피드로 돌아가기
Dev.toBackend
원문 읽기
Reflection Mapper 제거를 통한 Domain 무결성 및 스키마 격리 구현
Hand-Rolled Mappers vs AutoMapper: Keeping the PHP Domain Pure at the Boundary
AI 요약
Context
Reflection 기반의 AutoMapper 사용으로 인해 Database Schema 변경이 Domain Layer로 직접 전파되는 강결합 문제 발생. 특히 nullable 컬럼 추가 시 Domain 내 Value Object에서 예기치 못한 TypeError가 발생하는 런타임 불안정성 노출.
Technical Solution
- Persistence Boundary에 명시적인 Hand-rolled Mapper를 도입하여 데이터 변환 계층의 Seam 구축
- Reflection을 통한 생성자 우회 대신 Domain 소유의 Named Factory(
fromPersistence)를 사용하여 Invariant 검증 강제 - 단순 스칼라 값의 복사가 아닌
total_minor와currency를MoneyValue Object로 통합하는 도메인 중심 변환 로직 구현 - Schema 변경 시 Mapper에 명시적으로 코드를 추가하기 전까지 Domain에 영향이 없는 Isolation 구조 설계
- Read-model 및 DTO에는 AutoMapper를 유지하고 Domain Aggregate로의 진입점만 수동 매핑하는 하이브리드 전략 채택
실천 포인트
1. Domain Aggregate로 진입하는 모든 Persistence Layer에 명시적 Mapper가 존재하는가?
2. Mapper가 생성자를 우회하여 객체를 생성함으로써 도메인 제약 조건을 무시하고 있지는 않은가?
3. DB 컬럼 이름 변경이 코드 수정 없이 런타임 에러로 이어지는 AutoMapper 의존성이 있는가?
4. 단순 데이터 전달 객체(DTO)와 비즈니스 로직이 포함된 Domain Object의 매핑 전략을 분리했는가?