들어가기 앞서
백엔드 개발자로 일을하다보면 한번쯤은 들어보는 키워드 중 하나가 DDD이다. DDD는 복잡한 비즈니스 로직을 다뤄야 하는 소프트웨어에서 특히 큰 힘을 발휘하여 유지보수를 잘하게 도와주는 패턴이자 사고방식이다. 주니어 시절에는 DDD라는 개념을 몰랐지만, 비즈니스 로직을 잘 관리하고 유지보수하기 쉬운 코드를 짜기 위해 고민했다. 지금 생각해보면 그때부터 DDD의 패러다임에 조금씩이나마 다가가고 있었던 것 같다.
필자는 지금 교육 도메인의 에듀테크회사에 몸담고 있는데, 회사 내 도메인의 복잡도가 생각 이상으로 엄청나다. 전 회사도 도메인이 복잡다고 생각했는데 현재 회사에 와보니 이전 회사의 도메인 복잡도는 상대적으로 낮았음을 깨달았다. “교육”, “학습” 이라는 도메인이다보니 컨텐츠를 어떻게 구성하고, 학생들이 어떻게 수업을 할 수 있고, 학습 데이터를 어떻게 표현해주냐에 따라 정말 많은 기능이 존재하고 있다.
회사에 와보니, 기본적으로 레이어드 아키텍처 + DDD를 쓴다고 되어있긴 했지만, 개선되어야할 점들이 상당히 많아보였다. 예를들면, 어플케이션 레이어와 도메인 레이어의 책임을 명확하게 분리해서 쓰지 않고 있었고, 도메인 로직이 파편화되어있거나, 도메인 레이어가 과도한 의존성을 갖고 있었다. 게다가 백엔드 팀이 약 9~10명으로 구성되어있고, 그 많은 인원들이 모놀리틱한 형태의 레포지토리를 유지보수하다보니 코드 복잡도가 금세 높아지는 일이 흔했다. 또한, 향후 MSA의 분리까지를 고려하고있다고는 하나, 내부 도메인들간의 결합도가 높아서 어떠한 기준으로 도메인을 찢을지에 대한 고민들도 상당히 많았다.
복잡한 도메인과 잠재적 이슈를 고려했을 때, 이를 개선하기 위해 DDD를 더욱 제대로 적용하는 것이 필요하다고 느꼈다. 이에 따라서 DDD를 본격적으로 파고들기 시작했다. 도메인 주도 설계(DDD)는 에릭 에반스가 2003년에 쓴 책으로, DDD의 효시이자 바이블이다. 그런데 사실 이 책은 번역이 매끄럽지 않고 내용도 쉽게 와닿지 않아서 여러 번 읽어도 내용을 100% 이해하기가 어려웠다. 에릭에반스의 DDD 외에도 다른 책을 읽어봐도 항상 드는 생각이 “그래서, 애그리거트는 어떻게 나눌 수 있는건데??” 라는 거였고, 원론적인 내용 말고 실전 예제들은 찾기 어려웠다.
그러다가 최근에 '오브젝트' 책의 저자로 유명한 조영호님의 도메인 주도 설계의 사실과 오해 라는 오프라인 강의가 NextStep에서 진행된다는 소식을 듣고, 5기(2024-08-25 ~ 2024-09-01)로 강의를 듣고 왔다. 강의는 두 개의 파트로 구성되어 있다. 첫 번째 파트에서는 에릭 에반스의 DDD 책을 읽고 이해하는 방법을 설명하고, 두 번째 파트에서는 실제 예제를 통해 도메인 모델을 어떻게 구축하는지 함께 살펴본다. 상세한 커리큘럼은 아래에서 확인 가능하다.
조영호님의 강의는 결론만 말하자면, DDD에 대해 더 깊게 이해할 수 있게 도움이 된 단비 같은 강의였다. 유비쿼터스 언어, 전략적 설계, 전술적 설계 등의 개념들은 이전에도 알고 있었고 부분적으로 회사에 적용해본적이 있었으나, 이를 100% 이해했다고 보긴 어려웠다. 강의를 통해 DDD가 어떠한 배경으로 생겨났고 어떠한 패러다임을 갖고 무엇을 하고싶은지, 그리고 DDD를 적용하기 위한 빌딩블록(전술적 설계)는 어떤식으로 적용해야할지 등을 한층 더 깊게 이해할 수 있었다. 너무 좋았던 강의 내용이라, 사내 스터디를 만들어 강의 내용을 전파하며 팀 내 DDD의 이해도를 높이려고 노력 중이며, 이를 바탕으로 새로운 사내 아키텍처를 만들어 팀에 도입하고 있는 중이다.
강의 내용 인덱스
아래는 강의 내용을 요약 정리한 포스팅의 인덱스이다. 도메인 주도 설계의 사실과 오해 (1) DDD 요약 은 강의의 첫번째 파트로 에릭 에반스의 DDD 책을 읽고 이해하는 방법을 설명한 내용을 요약한 포스팅이며, 도메인 주도 설계의 사실과 오해 (2)~(5)는 DDD의 빌딩블록(전술적 설계)에 대한 포스팅이다. 이를 참고해서 필요한 내용을 참고하면 좋을것 같다.
목차
Search