2 분 소요

책커버

1. 도메인 주도 설계란?

“개발자는 사용자의 세계에 대해 기본적으로 무지하다.”
- 도메인 주도 설계 철저 입문 p.2

개발자가 구현하고자 하는 서비스에 대해 잘 알고 많은 지식을 가지고 있는 경우도 있지만 그렇지 아니한 경우가 더욱 많을 것 같습니다.

더 유용하고 가치있는 소프트웨어를 만들기 위해서는 서비스에 대한 가치 있는 지식과 그렇지 않은 지식을 골라 코드에 녹여내야 합니다.

따라서 개발자는 사용자의 세계에 대해서 계속 탐구하고 사용자 세계의 문제점에 대한 해결 방안을 끊임 없이 고찰하는 태도를 가져야 합니다.

도메인 주도 설계의 목적은 이러한 개발자의 고찰을 반복하는 설계를 통해 사용자가 이용할 수 있는 소프트웨어를 구현하는데 있습니다.

2. 도메인 지식에 초점을 맞춘 설계 기법


그래서 결국 도메인이란 무엇일까?

책에서는 도메인은
“프로그램이 쓰이는 대상 분야”

라고 설명하고 있습니다.

회계 시스템을 예를 들어:
금전, 장부, 분계 등은 회계라는 도메인에 속합니다.

그렇다면 "도메인 지식에 초점을 맞춘다"는 무슨 말 일까요?

위에서 언급했듯 개발자의 목적은 도메인에서 사용자들이 직면한 문제를 해결하는 것입니다. 이를 위해서는 그들의 문제를 정확히 이해하는 것이 중요합니다.

이를 이책에선 "도메인 지식에 초점을 맞춘다"라고 합니다.

도메인 지식 중에서 문제 해결에 유용한 것을 뽑아내어 이를 소프트웨어에 녹여내는 능력이야 말로 좋은 개발자의 역량이라고 할 수 있습니다.

2.1 도메인 모델링이란?


모델이란 현실에서 일어나는 사건 혹은 개념을 추상화한 개념이다.

추상이란 여러 사물 혹은 개념에서 공통적인 것을 뽑아 파악하는 것.

현실의 모든 것을 반영하는 것이 아니다.


도메인 모델링 또한 도메인 지식을 추상화하여 선택적으로 적용하는 것입니다.

펜을 예를 들어 봅시다, 학생의 입장에서 펜은 공부의 도구이며 쓸 수 있다는 것이 가장 중요한 성질입니다.

반면 문구점의 입장에서는 펜은 상품이며 손상 정도나 마감이 더 중요한 성질일 수 있습니다.

이렇듯 같은 대상이라도 사용자에 따라 중점이 달라질 수 있다는 것입니다.

도메인에는 너무 많은 개념들이 있으므로 이를 모두 코드로 구현해 낸다는 것은 가히 불가능 하다고 할 수 있습니다.

때문에 사용자가 직면한 문제를 해결 할 수 있을 만한 도메인을 선택적으로 추상화 하는 작업이 필요합니다.

이것이 도메인 모델링 입니다.

도메인 모델링을 잘 수행하기 위해서는 해당 도메인 분야에 대해 많은 지식이 있는 관계자와 소프트웨어 지식을 가진 개발자 두 사람이 협력하여야 합니다.

2.2 지식을 코드로 나타내는 도메인 객체


도메인 모델은 어디까지나 개념을 추상화 한것에 불구함으로 문제를 해결할 수 있는 능력은 없습니다.

따라서 이를 도메인 객체 라는 소프트웨어 형태로 변경해야 합니다.

도메인 객체 또한 모든 도메인 모델을 변환 하는 것이 아닌, 사용자의 문제를 해결하는데 영향이 있는 도메인 모델만 변경 해야합니다.

여기서 중요한 점은,
사용자가 처한 세계는 항상 바뀐다는 것입니다. 우리가 처한 상황은 시간에 따라 변경됨으로 소프트웨어 또한 그에 맞춰 변화되야 합니다.

이럴 때 도메인 객체가 도메인 모델을 충실히 반영하고 있다면 도메인의 변화를 충분히 코드로 변경할 수 있습니다.

3. 이 책을 들어가며


도메인 주도 설계라는 말을 지속적으로 듣고 접하며 배워야겠다는 마음이 쌓여져 갔습니다. 하지만 웹상에 나오는 지식들은 너무 추상적이고 이해하기 힘들며 DDD라는 개념을 처음 접하는 저로써는 너무 힘든 과정이였습니다.

이 책을 통해 도메인 주도 설계의 개념을 잡아감과 동시에 하나씩 코드로 적용해 볼 생각입니다.

긴 글 읽어주셔서 감사합니다.

:bulb: 본 글은
도메인 주도 설계 시리즈로 작성 됩니다.
도메인 주도 설계 1
도메인 주도 설계 2
도메인 주도 설계 3
도메인 주도 설계 4

댓글남기기