피드로 돌아가기
Dev.toBackend
원문 읽기
Identity와 Principal 분리를 통한 도메인 계층 권한 검증 구조 설계
How does your domain know your user?
AI 요약
Context
단일 User 객체에 Authorization, Business Rule, Audit Trail 속성을 혼재하여 발생하는 책임 과중 문제 분석. HttpContext 등 외부 의존성 노출로 인한 테스트 어려움 및 모듈 간 경계 침범 문제 발생.
Technical Solution
- IIdentity(누구인가)와 IPrincipal(무엇을 할 수 있는가) 인터페이스 분리를 통한 책임 격리
- User, System, Anonymous 세 가지 타입의 Identity/Principal 구현체 설계를 통한 상황별 접근 제어
- Handler 시그니처에 파라미터로 직접 주입하여 외부 컨텍스트 의존성을 제거한 Pure Handler 구조 채택
- DB 부하 최소화를 위해 실제 권한 확인 시점에만 데이터를 조회하는 Lazy Resolution 전략 적용
- Transaction 시작 전 단계에서 Resolve를 완료하여 모듈 간 DbContext 충돌 및 트랜잭션 범위 문제 해결
실천 포인트
1. User 객체를Identity(식별)와 Principal(권한)로 분리했는가?
2. Handler가 HttpContext나 Static Accessor에 직접 의존하지 않고 파라미터로 정보를 받는가?
3. 권한 조회 로직이 Lazy Loading으로 구현되어 불필요한 DB 쿼리를 방지하는가?
4. 모듈 경계 침범을 막기 위해 Resolve 단계가 Transaction 시작 전 단계에 위치하는가?