DDD는 디자인패턴인가 아키텍처인가?
DDD(Domain-driven design)으로 프로젝트를 진행하게 되면서 DDD가 무엇인지 궁금해졌다.
DDD는 디자인패턴일까 아키텍처일까?
사소한 하나하나 다 궁금할 시기이지. 암암 그렇고말고.
구글링을 아무리 해봐도 뚜렷한 구분이 나오지 않았다. 그래서 공부한 내용을 바탕으로 팀장님께 문의를 드렸고 팀장님도 함께 고민해주셨다.
참 감사하다!
이번 포스팅은 스스로 공부하면서 작성한 포스팅이므로 정답이 아닐 수 있다.
나에게 가장 익숙한 프로젝트 구조는 MVC패턴으로 프레젠테이션로직, 비즈니스로직, 데이터베이스 로직을 구분한 구조이다. 이를 3계층 구조라고 부른다고 하셨다.
디자인패턴으로 보면 MVC패턴이지만 아키텍처관점에서는 3Tier Architecture라는 것이다.
디자인 패턴이란? 🤠
- 정의: 어떤걸 해결할려고 할때 효율적인 방법에 대해서 정해놓은 규칙
- 문제를 해결하기 위한 방법을 가이드
- 크기로 보면 패턴이 좀 더 아키텍쳐 보단 작은 느낌
소프트웨어 아키텍처란? 🤠
- 정의: 시스템, 컴포넌트 간의 관계가 어떻게 되어있냐 그런 구조적인 측면에서 정의한 것
- 특징: 언어적 혹은 시스템 구조적 등 여러가지 환경에 따라 구조가 달라서 해당 구조에서 사용할 수 있는 패턴도 달라짐
- 인프라 아키텍쳐(가장 광범위) -> 시스템 아키텍쳐 -> 소프트웨어 아키텍쳐(좁은범위)
디자인패턴 VS 소프트웨어 아키텍처 예시
디자인패턴 | 아키텍처 | |
---|---|---|
대표 예시 | MVC모델, Commnad, Factory, DAO | 데이터중심 스타일, 규칙기반스타일, 분산스타일, 파이프와 필터스타일 |
내가 내린 결론
다시 본래 질문으로 돌아가자.
DDD는 디자인패턴일까 아키텍처일까?
여기서 내가 내린 결론은 소프트웨어 아키텍처이다.
왜냐하면 DDD는 디자인패턴 같으면서도 구조적이다. 비즈니스와 디자인패턴, 아키텍쳐까지 포함하기에 디자인패턴보다는 큰 개념인 아키텍처에 적합하다.