August 29, 2019
발표자료: https://www.slideshare.net/ssuser59a869/ss-167401606
사람에게 의존적인 일관성으로 구성 되어 있었고, 세 프로젝트는 공유 되는 클래스들이 있었음. 내부 Nexus를 이용하고 있었고, 해당 세 프로젝트는 Nexus에서 일관성을 가지게 된다. 이렇게 구성 하는 것이 너무 복잡하고 개발 사이클이 복잡 하다.
내가 속한 환경에서도 생각해보면, 모듈 단위로 이미 구분이 잘 되어 있다. 만약 프로젝트 기준으로 나뉘게 되면, 너무 큰 범주로 작업 간 이동이 발생 하게 된다.
그런 환경은 내가 생각해도 개발 하기 쉽지 않다.
시스템으로 보장 되는 일관성을 얻고, 개발 사이클이 단순화 된다.
내가 속한 조직에서도 모듈 단위의 Role을 정의 해놓고, 그 규칙을 성립 해두었다. 그렇게함으로써 좋은 장점은 규칙을 위배 하지 않는 선에서 굉장히 깔끔한 구조를 가진다. 그리고, 양방향 의존성이 생기지 않도록 규칙을 가지고 있는데, 이 부분은 시간이 지날 수록 설계한 분의 엄청난 내공이 느껴진다.
멀티 모듈은 MSA와 비슷한 부분이 있더라.
설명을 들어보니, 결국에는 서비스의 구조를 단순화하고, 해당 구조를 조립하는 형태로 구성 하는 방식이 결국에는 유사한 모습을 띄게 된다고 생각이 들었다.
스파게티 코드
common에 문제가 생기면 각 도메인의 서비스에 문제가 생기게 된다.의존성 덩어리
공통 설절
내가 역할을 부여 하고 해당 역할만 지닌 모듈을 끼워 맞출 수 있다면, 그게 모듈화가 아닐까? 객체 지향 중심으로 모듈을 분리 한다. 그럼 결국 역할과 책임으로 구분 지을 수 있게 된다. 모호한 부분은 어떻게 나눌까에 대한 부분이 남았다. 그래서 오픈 소스의 라이브러리를 주로 염탐을 했다. 계층 하위로 역할과 책임을 주로 구분 지어 나누고, 계층과 계층끼리 이어질 수 있다. 다만, 라이브러리와 서비스의 경우는 기준이 다르다. 그래서 결국, 직접 나누는 것으로 결정 했다.
외부 통신을 담당 하는 모듈을 만들자.
Host, Header관리위에서는 사실 가장 주요한 부분은 예외처리를 어떻게 추상화 할지?에 대한 부분이 중요하게 생각 하셨다고 한다.
좋은 점은 스펙 변경에 대해 변경 포인트가 단일점으로 바뀌게 된다. 사용 추적에 대한 부분도 쉬워졌다.
infrastructure 대응을 위한 모듈
DB관련, QueryDSL, connector관련 의존성을 가지고 있다.multi infrastructure
Type, Util등을 정의 한다.Java 클래스만 작성 하도록 제한을 둠.Application.java는 Project package에서 1 depth로 유지 하여, Scan 기능을 활용.의존성을 숨기는 방법은 gradle에서 compile에서 implimentation으로 변경하면 된다.