DDD(Domain Driven Design) - Domain, BC (Bounded Context), Context Mapping, Ubiquitous Language
프로젝트가 진행됨에 따라, 서비스 혹은 회사가 성장함에 따라 요구사항은 다양해지고 기존의 시스템에도 변경이 일어난다. 이는 불가피하게 시스템의 복잡성을 증가를 수반하게 된다. 따라서, 시간이 지날수록 클린 코드와 클린 아키텍쳐를 이룰 수 없게 될지 모른다. 이를 Software Entropy 라고 부른다. https://www.webopedia.com/TERM/S/software_entropy.html 시스템에 수많은 변경과 반영이 일어나면서, 적절한 관심사 분리와 클래스와 모듈간의 결합도를 낮추는것을 유지하는것은 점점 더 어려워 지며, 아키텍쳐 레벨에서 가이드라인을 강제하지 않을 경우 시스템의 새로운 기능 및 변경이 더이상 힘들어질 수 있다. 전통적인 MVC (Model-View-Controller) 아키텍쳐에선, "M" Layer 는 모든 비즈니스 로직을 가지고 있다. 그러나 MVC 에서에는 깔끔하고 적절하게 책임의 경계를 이루기 어렵다. 몇가지 패턴들은 해당 문제를 완화시킬 수 있지만, 여전히 로직과 책임이 새어나갈 여지가 있다. 반대로, 비즈니스 전문가들과 요구 사항을 수집하고, 기술적인 팀과 비기술적인 팀 사이에서 합의점을 찾아는 과정에서, 시스템을 설계하고 수행할 때 양측은 서로 자신의 부분에 맞게 잘못 해석할 여지가 있다. 결과적으로 이는 원래의 목표와는 다르게 프로젝트에 반영될 여지가 충분하다. 그리고, 변수와 클래스 메서드 등을 네이밍할 때 개발자들이 가장 힘들어 하는 부분이다. 우리는 다른 개발자가 명확하게 코드에서 작성자의 의도를 이해할수 있도록 해야하며, 또한 비즈니스 관계자(기획자, 테스터 등)들 및 이해관계자들과 의사소통을 할 때도 충분하게 활용할 수 있어야한다. DDD 는 소프트웨어 프로젝트에서 충돌하는 기술팀과 비기술팀을 조정하면서 동시에 성공적인 시스템 구축을 쉽게하는 기술들과 패턴을 제안하며 기존의 문제들을 해결할 수 있다. DDD 란 무엇인가 ? 먼저 Domain 이 무엇인지 알...