본문 바로가기

소프트웨어

[DDD]도메인 주도 설계 철저 입문!!(번역서)

 

참고 : wikibook.co.kr/ddd/?fbclid=IwAR13HW87BsEASt42GEF5JjI-54miBPBPMhlWeBF82E96hrzyWUgM1qLbr4o 

 

도메인 주도 설계 철저 입문: 코드와 패턴으로 밑바닥부터 이해하는 DDD

이해하기 쉬운 패턴부터 학습하자! 도메인 주도 설계를 쉽게 이해할 수 있는 입문서! 초심자라도 이해하기 쉽고 실천하기도 쉬운 패턴부터 시작해 구체적인 예제와 함께 도메인 주도 설계에서 �

wikibook.co.kr

참고 : DDD Start !! www.yes24.com/Product/Goods/27750871?OzSrank=1

 

DDD를 개념으로 이야기하기 보다 예로 설명을 해보자.

'온라인 서점'은 소프트웨어로 해결하고자 하는 문제 영역(업무 영역), 즉 도메인(domain)에 해당한다.

하나의 도메인은 다시 여러개의 하위 도메인으로 나눌 수 있다. 

예를 들면, 온라인 서점은 회원,혜택,주문,카탈로그,리뷰,정산,배송,결제 로 나눌 수 있다.

 

소프트웨어는 기본적으로 그 소프트웨어를 사용하는 사람의 입장에서 생각하고 만들어야 한다. 

그래서 일차적으로는 기술적인 부분보다 업무(도메인)를 이해하는 것이 매우 중요하다. 

하여 업무에 대해 충분히 이해한 후에 기술적으로 어떻게 반영할지를 고민해야 한다. 

이런 부분을 기본적으로는 알고있지만 개발자들은 기술로 구현해 내는 데에만 더 집착하는 경우가 많기 때문에, 이를 개선할 수 있는 방법이며, 소프트웨어 기술의 본질인 실제 사용하는 사람에 친화적인 프로그램을 만들기위한 설계 방법이라고 보면 될것 같다. 

 

해서 레거시(예전 시스템)의 경우에는 아래와 같이 단일하게 시스템을 구현하게 된다. 이렇게 될 경우 새로운 기능을 하나 올리기 위해서는 다른 사람이 구현해 놓은 부분도 적용하려면 다른 시스템도 개발이 완료되어야 같이 올릴 수 있다.

단일 시스템에서 기능이 늘어나는 경우

 

이렇게 단일 시스템으로 동작할때의 내부적인 동작상황을 살펴보면 아래와 같이 복잡하게 자원들을 사용하는 것을 볼 수 있다. 만약 문제가 발생하게되면 다른 기능이 돌아가지 않을수도 있고, 프로그램이 지연되는 등 문제가 발생할 수 있다.

단일 시스템에서 기능이 많아질때 실제 내부동작 모습

그래서 아래와 같이 각 도메인별로 시스템을 따로 따로 구분해서 만들고, 도메인들간에 호출을 해서 연동을 할 수만 있게 해주면, 하나의 도메인영역에서 기능을 수정하거나 추가할 경우에 바로 배포를 해버리면 된다. 도메인별로 개발을 하기때문에 개발 시간도 단축될 수 있다. 이렇게 영역별로 나눠놓지 않을 경우에는 다른 사람이 기능을 완료할때까지 기다렸다가 배포해야 하기 때문에 개발 시간도 오래걸린다.

도메인(회원,주문,결제,배송) 별 분산하여 시스템 구현

일단 DDD가 어떤식으로 만들어지는지에 대해 개념정도만 잡아두고 좀 더 살펴보면 될것 같다. 일단 여기에서는 대략적인 그림을 잡아 놓도록 하자.