[DDD] CONTINUOUS INTEGRATION

CONTINUOUS INTEGRATION
- 내부적으로 균열이 발생할 때 이를 빠르게 포착하고 정정할 수 있을 정도로된 컨텍스트 내의 모든 작업을 빈번하게 병합해서 일관성을 유지하는 것을 의미한다.
필요성
- 다수의 사람들이 BOUNDED CONTEXT 내에서 작업할 경우 모델이 단편화될 가능성이 높다.
- 팀규모가 커지면 문제가 증폭된다. 또한 소수인원으로 구성된 팀도 심각한 문제에 마주한다.
- 시스템을 더작은 CONTEXT로 분할한다면 결국 가치 있는 수준의 통합과 응집성을 잃게 된다.
- 의사소통을 촉진하고 복잡도를 줄일 방법이 필요하다.
- 기존코드가 망가뜨릴지도 모른다는 두렴움에 코드를 중복시키는 등의 소심한 행위를 방지해줄 안정망이 필요하다.
종류
모델 개념의 통합
- 팀 구성원 간의 의사소통을 토대로 통합.
- 팀은 끊임없이 변화하는 모델을 함께 이해하고 이를 발전시켜야한다.
- UBIQUITOUS LANGUAGE를 통합
구현 수준의 통합
- 모델 내의 균열을 조기에 드러내는 체계적인 병합/빌드/테스트 프로세스를 토대로 통합.
- 통합을 위한 프로세스 특징
- 단계적이고 재생 가능한 병합/빌드 기법
- 자동화된 테스트 스위트
- 수정사항이 통합되지 않은 상태로 존재할 수 있는 시간을 적당히 짧게 유지하는 규칙
결론
- 단편화가 발생했다는 사실을 빠르게 알려줄 수 있는 자동화된 테스트와 함계 모든 코드와 그밖의 구현 산출물을 빈번하게 병합하는 프로세스를 수립하라.
- 개념이 각자의 머릿속에서 발전해감에따라 모델에 관한 시각의 차이를 해소하기 위해 끊임없이 UBIQUITOUS LANGUAGE를 사용하라.
- 필요이상으로 일이커지지 않게 한다. 오직 하나의 BOUNDED CONTEXT내에서만 필수적이다.
정리
- 함께 개발을 진행하다 보면 다른 사람이 작성한 코드를 이해하고 작성하는 게 쉽지 않을 수 있다. 또한 같은 개념으로 이야기한 후 개발을 진행해도 서로 다른 이해도가 반영이되는 경우가 많다. 뿐만 아니라 새롭게 입사해서 도메인의 정확한 이해 없이 코드를 작성하다 보면 문제가 될지 모른다는 생각에 중복코드를 만드는 경우도 많다.
이러한 문제를 통합을 위한 프로세스를 통해 안전장치를 마련해둘수 있다면 무결성을 유지하고 개발자에게 코드변경에 대한 자신감을 심어줄 수 있을 것 같다.