접합부 

접합부란 코드베이스의 나머지 부분에 영향을 주지 않는 격리된 코드 부분 

경계가 있는 콘텍스트는 훌륭한 접합부를 만든다


분해하기 : 접합부 주변으로 코드베이스의 구조 변경 

경계가 있는 콘텍스트 인식

콘텍스트들을 대표하는 패키지 생성 후 코드 이동 

이 과정에서 패키지 간의 의존성을 분석할 수 있는 코드 사용 가능 

경계가 있는 콘텍스트를 대표하는 패키지들은 실세계 에서 도메인과 같은 방식으로 상호작용해야 한다 

조금씩 깍아내듯이 점진적으로 분리해야한다.

코드베이스를 분리했을 때 가장 큰 혜택이 있는 부분을 먼저 분리


문제에 대처

저장소 계층을 두고, 객체 또는 데이터 구조를 데이터베이스와 매핑하기 쉽게 만들어서 코드를 데이터베이스와 바인딩 하는 것. 

특정 콘텍스트의 코드 내에 데이터베이스 매핑 코드를 함께 배치하면 어떤 코드가 데이터베이스의 어느 부분을 사용하는지 이해할 수 있다. 

예) 외부 키 관계 꺠뜨리기, 공유 정적 데이터, 공유 데이터, 공유 테이블


데이터베이스 리팩토링

단일스키마에서 스키마를 분리 > 어플리케이이션을 서비스로 분리 


트렌잭션

데이터베이스를 분리할 경우 단일 트랜잭션에 의해 제공되는 안정성을 잃는다

나중에 재시도 하거나, 전체 작어을 중지하는 것 또는 분산 트렌젝션을 사용할 수는 있다.

그러나 이러한 솔루션들은 복잡성을 증가시킨다.


리포팅 

데이터 저장 방법과 장소를 분리하는 것은 리포팅에 문제가 될 수 있지만 기존 프로세스와 협업 방식을 정하는 것은 의미가 있고 집중해야할 대상을 하나

씩 정해야 한다. 서비스 호출을 통한 데이터 추출, API를 통한 데이터 추출. BUT 대용량일 겨우 실패 


이벤트 데이터 펌프

개체의 상태가 변경될 떄 이벤트를 발생하고 리포팅 데이터베이스로 데이터를 밀어 넣는 자체의 이벤트 구독자를 작성할 수 있다.

당점은 필요한 모든 정보를 이벤트로 확산해야 한다. 


#필요에 따라 데이터를 다양한 장소로 라우팅할 수 있는 포괄적인 이벤트 시스템

#변경비용을 고려하면 가장 영향도가 낮은 실수부터 시도

#드러난 서비스 경계에 따라 접합부를 찾아서 시스템을 점진적인 방법으로 분해. 이 접합부의 발견에 능숙해지고 처음부터 서비스 분리의 비용을 줄이도록 작업하면서 어떠한 신규 요구 사항도 만족하도록 시스템을 계속 성장시켜야함,


+ Recent posts