피드로 돌아가기
Dev.toBackend
원문 읽기

Your /Models folder is lying to you
.NET 프로젝트의 Models 폴더 패턴을 서비스 소유권 기반 구조로 재설계해 컨텍스트 불명확성 제거 및 파일 관리 효율성 향상
AI 요약
Context
기존 Clean Architecture 패턴에서 Models 폴더에 40~80개의 POCO 클래스를 일괄 보관하면서 각 모델의 용도, 소유 서비스, 생명주기가 불명확해져 코드 이해도가 저하되고 사용 중단된 클래스 식별이 어려워지는 상황이 발생했다.
Technical Solution
- 내부 전용 모델을 private nested class로 변경: 단일 서비스 내에서만 사용되는 POCO는 해당 서비스 클래스 내부에 private으로 정의해 파일 개수 감소 및 의도 명확화
- 서비스별 companion 파일 도입: 공개 범위의 모델은 ServiceName.Models.cs 또는 ServiceName.ModelName.cs 형식으로 서비스와 인접한 파일에 배치해 소유권 명시
- 개념적 종속 모델을 nested class로 구조화: User.Name처럼 부모 모델의 논리적 하위 구성요소는 별도 파일 대신 중첩 클래스로 정의해 관계 명확화
- 모델 공유 범위 재분류: POCO를 (1)단일 서비스 내부 전용 (2)특정 기능 영역 내 계약 (3)다중 서비스 공유 (4)부모 모델의 논리적 부분으로 4가지 역할군으로 구분해 배치 전략 결정
- 선택적 승격 전략 적용: 신규 모델 생성 시 "현재 여러 곳에서 사용되는가?"를 기준으로 평가해 필요시에만 공유 폴더로 이동하는 지연 공개 접근
Key Takeaway
Models 폴더는 컨텍스트 정보를 제거하는 평탄화 구조이므로, 모델의 실제 역할(내부 구현 세부사항 vs 계약 vs 공유 개념)에 따라 private nested class, 서비스 companion 파일, 공유 위치로 물리적으로 분산 배치하면 소유권이 파일명에 자동으로 인코딩되고 불필요한 공개 범위 제거로 삭제 결정이 명확해진다.
실천 포인트
.NET 백엔드 팀이 기존 Models 폴더 구조를 서비스 기준 분산 구조로 전환할 때, 먼저 현존 모델들을 용도별로 분류(서비스 내부 전용 vs 도메인 경계 간 공유)한 후 내부 전용 모델부터 private nested class로 전환하고 공개 모델은 ServiceName.cs 파일명 규칙으로 재배치하면 코드 리뷰 시 모델의 영향범위를 파일명만으로 파악 가능해지고 사용 중단 모델 제거 결정이 신속해진다.