인프런 커뮤니티 질문&답변
레이어드 아키텍처에서 도메인 중심 패키지 구조를 적용하거나 변화하는 시점이 있을까요?
작성
·
18
·
수정됨
0
안녕하세요 조영호님, 강의 복습하며 설계의 깊이를 더해가고 있는 수강생입니다.
8~9장을 통해 상/하위 모듈의 패키지 배치 원리를 배우며 실무 적용에 대해 고민이 생겨 질문 남깁니다.

그동안 실무에서 레이어드 아키텍처를 주로 사용하며 서비스와 도메인 로직을 구분해 왔는데, 복습하다보니 그간 해왔던 물리적인 패키지 분리(인터페이스와 구현의 분리 등)를 엄격하게 적용하는 것이 자칫 오버 엔지니어링이 아니었을까 하는 생각이 들었습니다.
# 프로젝트 패키지 구조 예시
Project
- ServiceInterface
- ServiceImplement
- RepositoryInterface
- RepositoryImplement
- Controller
- Model
최근에는 의식해서 도메인 모델을 만들어 보는데, 기존 레이어드 아키텍처의 패키지 구조 내에서는 '도메인의 응집도'와 '레이어의 규칙'이 충돌하는 지점이 생겨 배치가 모호해지곤 합니다. 이에 두 가지 질문을 드리고 싶습니다.
1. 단순히 레이어드 아키텍처로 감당하기 힘들어지는, 즉 '도메인 중심의 패키지 구조'로 변화해야 하는 구체적인 징후나 시점이 있을까요?
2. 모든 모듈에 엄격한 패키지 분리를 적용하기에는 비용이 부담된다고 생각되는데, 마치 절차지향과 객체지향 중 하나를 선택하듯, 패키지 수준의 격리를 우선적으로 적용하기 좋은 도메인 특성이 있을까요? (예: 정책 복잡도가 높아 사이드 이펙트가 빈번한 곳, 혹은 외부 인프라 변경에 민감한 핵심 도메인 등)
최근에는 조영호님의 도서/강의 통해 배운 내용을 의식하면서 실무에 적용해보는데, 예전보다 일 하는게 즐거워진거 같습니다.
미리 답변 감사드립니다.
좋은 하루 되세요. 🙇🏻
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. 이진우님, 깊이 있는 고민을 나눠주셔서 감사합니다. 패키지 설계에 대한 고찰은 개발자라면 누구나 겪게 되는 중요한 주제입니다. 특히 레이어드 아키텍처와 도메인 중심 설계 사이의 조화가 큰 이슈가 될 수 있습니다.
먼저, 두 가지 질문에 대한 답변을 드리겠습니다.
1. 도메인 중심 패키지 구조로의 전환 징후
레이어드 아키텍처가 도메인을 충분히 반영하지 못한다고 느껴지는 몇 가지 상황들이 있습니다:
복잡한 비즈니스 로직: 비즈니스 로직이 서비스 레이어에 과도하게 집중되는 경우, 이는 도메인 모델의 은유를 필요로 할 수 있는 신호입니다. 이때는 도메인 중심의 구조로 전환하여 비즈니스 로직을 도메인 객체로 캡슐화하는 것이 좋습니다.
서비스의 응집도 부족: 서비스 레이어에서 여러 개의 다른 도메인 모델이 혼합되어 사용하는 경우, 이는 모듈화가 필요하다는 신호입니다. 도메인 중심 패키지 구조는 응집도를 높이고 변경에 대한 안정성을 제공합니다.
요구사항 변경의 간편함 요구: 요구사항의 변경이 자주 일어나고, 이를 유연히 대처해야 하는 상황이라면, 도메인 모델 중심의 구조가 유리할 수 있습니다. 이는 설계의 안정성을 높이고 변경의 파급 효과를 줄입니다.
핵심 도메인의 중요성 증가: 비즈니스의 핵심 가치를 나타내는 도메인이 프로젝트에서 중요하게 부각될 경우, 이 부분을 별도의 도메인 패키지로 관리하여 초점을 맞추는 것이 유리할 수 있습니다.
2. 패키지 분리를 우선적으로 적용하기 좋은 도메인 특성
패키지 수준의 격리를 우선적으로 적용할 때 고려할 수 있는 도메인 특성은 다음과 같습니다:
정책 및 규칙의 복잡성: 정책이나 규칙이 복잡하여 코드 내부의 사이드 이펙트를 최소화해야 하는 경우, 이를 별도의 도메인 패키지로 관리하는 것이 좋습니다.
자주 변경되는 요구사항: 외부 프로젝트나 도메인의 특성상 자주 변화가 예상되는 경우, 독립성을 보장받기 위해 별도 패키지에서 관리하는 것이 유리합니다.
외부 의존성이 많은 도메인: 외부 API 호출이나 데이터베이스와의 상호작용이 빈번하고, 이는 시스템 전반에 영향을 미칠 수 있는 경우엔, 외부 변화에 민감한 부분을 모듈 단위로 격리하는 것이 안정성을 높이는 방법입니다.
추가 참고 자료
관련된 주제를 더 깊이 이해하기 위해, 아래의 기존 질문과 답변도 확인해 보시길 추천드립니다:
이 질문을 통해서도, 인터페이스와 구현의 분리 및 도메인 설정의 중요성을 논의한 부분이 도움이 될 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




