TIL

TIL 2024-07-24 도메인 주도 설계란 무엇일까

wonow_ 2024. 7. 24. 22:00

 

도메인 주도 설계

소프트웨어 개발자는 개발만 아는 것이 아닌, 도메인에 대해서 이해를 해야한다.

 

예를 들어서 물류 시스템을 개발한다면 운송, 배송 과정 등을 배워야한다.

개발자는 소프트웨어 사용자에 대해서 이해를 해야한다는 것이다.

 

물류 시스템을 개발하기 위해서 배송 과정, 연료 등의 정보는 아주 귀중한 정보다.

하지만 트럭이 어떻게 움직이는지, 트럭이 무슨 색인지 등의 정보는 가치가 없다.

지식을 취사선택 해야한다는 것이다.

 

도메인 주도 설계는 이러한 고찰을 반복하는 설계를 통해, 이용자의 세계와 소프트웨어 구현을 연결하는 것이 목적이다.

 

도메인

소프트웨어 개발에서 도메인은 프로그램이 쓰이는 대상 분야를 의미한다.

더 중요한 것은 도메인에 무엇이 포함되어있는 것인가다.

 

물류 시스템을 예로 들면 창고, 운송 수단, 화물 등이 있다.

 

이용자에게 직면한 문제를 해결하려면, 이용자들의 문제를 정확히 이해하는 것이 중요하다.

 

최신 프레임 워크, 개발 기법, 최신 기술만을 중시하며 문제를 해결하려 하면 목적 없는 소프트웨어가 만들어지는 참사가 일어난다.

그래서 개발할 때는 도메인 지식에 초점을 맞춰야 한다.

 

도메인 모델링

모델링이라는 단어는 개발자에게 친숙한 단어다.

하지만 모델링이 뭐냐라고 물어본다면, 답을 하기 쉽지 않다.

 

책을 예로 든다면,

 

독서가에게 책은 읽는다는 행위를 가져다 주는 물건이다.

서점에게 책은 상품이다.

 

같은 대상이라도 중점이 달라진다.

 

이렇게 개념을 추상화하는 작업을 모델링이라고 한다.

도메인 주도 설계에서는 도메인 개념을 모델링한 모델을 도메인 모델이라고 한다.

 

도메인 분야 관계자는 도메인 관련 지식은 뚜렷하지만, 소프트웨어 지식은 없다.

소프트웨어 개발자는 소프트웨어 관련 지식은 뚜렷하지만, 도메인 관련 지식은 없다.

 

그래서 도메인 문제를 해결하려면 둘이 문제를 협력해야한다.

 

도메인 객체

도메인 모델은 어디까지나 개념을 추상화한 지식이다.

그래서 어떠한 매체를 통해 표현돼야만 문제를 해결할 수 있는 힘을 갖는다.

 

도메인 모델을 소프트웨어 형태의 동작하는 모듈로 나타낸 것이 도메인 객체다.

 

오랜 시간 고민한 도메인 모델이 있더라도 해당 모델이 이용자의 문제를 해결하는 것과 관련이 없다면, 그 도메인 모델을 객체로 구현하는 일은 쓸데없는 것이다.

 

도메인 객체가 도메인 모델을 충실히 반영한다면, 도메인의 변화를 쉽게 코드로 옮길 수 있다.

 

도메인 개념이 투영된 도메인 모델은 변화를 충실히 반영할 수 있다.

 

도메인에 대한 어중간한 이해는 도메인을 구현하는데 방해가 된다.

이를 해결하려면 도메인 모델을 이해하고, 도메인 개념을 추상화하는 방법을 바꿔야 한다.

 

서로 영향을 주고 받는 반복적인 개발로 이를 실현할 수 있다.