brunch

“무엇을 나누고, 어떻게 나눌 것인가”

도메인 주도 설계와 모듈러 디자인의 관계

by 심야서점
제목을 입력해주세요_-001 (84).png

최근 모듈러 디자인 교육 중 다음과 같은 질문을 받았습니다.

“도메인 주도 설계(Domain-Driven Design)와 모듈러 디자인(Modular Design)은 어떤 관계가 있나요?”


복잡한 소프트웨어를 설계하다 보면 이런 고민에 자주 마주칩니다.

“이 시스템, 도대체 어디부터, 어떻게 나눠야 할까?”
“기능별로? 계층별로? 아니면 부서나 담당자 기준으로?”


이때 떠오르는 두 가지 설계 개념이 있습니다.

바로 "도메인 주도 설계(DDD)"와 "모듈러 디자인(Modular Design)"입니다.


각기 다른 배경에서 출발한 개념이지만,

복잡한 시스템을 잘게 나누고, 효과적으로 연결하려는 목적은 같습니다.


저에게는 도메인 주도 설계가 모듈러 디자인보다 먼저 다가온 개념입니다.

처음 ‘도메인 주도 설계’ 책을 읽었을 때는 “당연한 얘기를 이렇게 길게 써놨나?” 하며 가볍게 넘겼지만, 지금 돌아보면 그 반응 자체가 개념을 제대로 이해하지 못한 채 무시했던 태도였음을 반성합니다.


☞ 도메인 주도 설계: ‘무엇을 나눌 것인가’를 결정하는 언어


도메인 주도 설계는 소프트웨어를 ‘비즈니스 의미’ 단위로 나누자고 말합니다.


예를 들어 쇼핑몰 소프트웨어를 만든다고 해봅시다.

쇼핑몰의 주요 업무는 ‘주문’, ‘결제’, ‘배송’ 등으로 구체화됩니다.


이 각각은 명확히 구분 가능한 기능이며, 독립된 팀이 담당해도 무리가 없을 정도로 경계가 뚜렷합니다.

도메인 주도 설계에서는 이러한 경계를 "Bounded Context(경계가 있는 컨텍스트)"라고 부릅니다.


즉, 기술적인 기준이 아니라 비즈니스 언어로 시스템을 나누는 것이죠.

이 접근법은 “누가 어떤 책임을 맡아야 하는가”에 대한 명확한 기준과 설계 가이드를 제공합니다.


☞ 모듈러 디자인: ‘어떻게 나눌 것인가’를 구현하는 구조


모듈러 디자인은 시스템을 작고 독립적인 ‘모듈’이라는 블록들로 구성하자는 접근입니다.


각 모듈은 고유한 역할을 가지며,

다른 모듈과는 표준화된 인터페이스를 통해 소통합니다.

이 방식은 시스템의 유연성을 높여주며,

각 기능을 독립적으로 개선하거나 교체하기 쉽게 만듭니다.


☞ 함께 보면 강력한 이유: 의미와 구조의 만남, 비즈니스와 기술의 결합


두 개념은 서로를 보완합니다.

차이 표.png

결국,

도메인 주도 설계는 "무엇을 나눌 것인가"를 알려주고,
모듈러 디자인은 "어떻게 나눌 것인가"를 알려줍니다.


☞ 정리하며


도메인 주도 설계와 모듈러 디자인은

복잡한 시스템을 잘게 나누고, 각 부분에 책임을 부여하며, 서로를 유기적으로 연결하는 사고방식입니다.


소프트웨어가 점점 복잡해질수록

이 두 개념은 서로를 보완하는 강력한 설계 프레임워크가 됩니다.


도메인 주도 설계는 시스템을 나눌 방향과 기준을 제시하고, 모듈러 디자인은 그것을 기술적으로 구현하는 방식을 제공합니다.

keyword
매거진의 이전글복잡성을 이기는 설계, 구조적 설계와 모듈화 전략