만드려고 하는 타이어 서비스에는 크게 두 종류의 서비스가 필요하다.
규모가 작은 서비스는 하나의 프로젝트에 기능을 다 넣으면 되겠지만, 서비스가 커지고 복잡도가 높아지면 역할과 기능 단위로 프로젝트를 분리하고 싶어지는 순간이 온다.
특히 MSA 를 적용하려면 서비스 자체를 나눠서 각각 별도로 배포해야 한다.
하지만, 서비스를 나누는 것과 별개로 각 서비스가 공통적으로 사용해야 하는 부분이 존재하는 경우가 있는데 타이어 서비스가 이런 상황이다.
"erp-service" 나 "client-portal" 양쪽 모두 타이어 관련 정보, 회원 관련 정보, 주문 및 주문 내역 등의 데이터에 접근한다.
완전히 프로젝트를 분리하면 Entity 나 Repository 등 중복되는 코드가 상당히 많이 발생하게 된다.(Entity 를 수정하려면 양쪽 프로젝트를 다 수정해야한다!)
또 Util 이나 Constant 등 공통적으로 사용하고 싶은 코드들도 있을 수 있다.
이럴 때 적용할 수 있는 게 멀티 모듈이며, 하나의 프로젝트 안에 각 서비스를 모듈화하여 동작하도록 만드는 것을 의미한다.
각 모듈 간에는 의존성이 존재하며, 공통된 모듈을 서로 다른 모듈이 의존할 수도 있다.
예를 들면 데이터 도메인 관련 코드들(Entity, Repository)을 하나의 모듈에 몰아넣고 각 비즈니스 모듈들이 이런 도메인 모듈을 의존하면 도메인 코드가 하나로 관리될 수 있다.
사실 이번에 개발할 타이어 서비스는 꼭 멀티 모듈로 나눠야만 할 정도로 규모가 있는 서비스는 아니지만, 공부도 할 겸 아래와 같이 멀티 모듈로 분리해서 개발해보려고 한다.
향후에 관리/모니터링 기능을 가지고 있는 tire-admin 이나 배치 서비스를 위한 tire-batch 모듈을 추가해볼 계획도 있지만, 일단 지금은 이렇게 4개의 모듈로 시작해보려고 한다.