멀티 모듈은 하나의 큰 소프트웨어 프로젝트를 독립적인 기능을 수행하는 여러 개의 작은 모듈 단위로 나누어 관리하는 구조를 말합니다.
- 패키지 vs 멀티모듈: 빌드 경계
- 멀티모듈 vs MSA: 프로세스·배포 단위의 경계
예를 들어 API 서버, 배치 프로그램, 공통 도메인 모듈을 분리하고 필요한 의존성만 연결할 수 있습니다. 이렇게 하면 모듈 간 의존 관계가 명확해지고, 공통 코드를 재사용하기 쉬우며, 모듈별 테스트와 배포 범위를 관리하기 편해집니다. 여러 실행 애플리케이션이 같은 도메인 코드를 사용할 때 특히 유용합니다. 다만 모듈을 너무 잘게 나누거나 공통 모듈에 모든 코드를 몰아넣으면 오히려 의존성이 복잡해집니다. 따라서 변경 이유와 책임을 기준으로 경계를 나누고, 순환 의존을 피해야 합니다.
모듈을 나누는 기준을 어떻게 정하고, 모듈 간 순환 의존이 생기면 어떻게 해결하나요?
함께 변경되는 코드와 책임을 기준으로 경계를 정합니다. 순환 의존이 생기면 어느 쪽이 다른 쪽의 구현을 알아야 하는지 다시 살피고, 필요한 계약을 상위 추상화나 별도 모듈로 옮겨 의존 방향을 한쪽으로 정합니다. 단순히 순환을 숨기려고 공통 모듈에 모든 코드를 옮기지는 않습니다.
공통 모듈에 어떤 코드를 넣어야 하며, 공통 모듈이 비대해지는 문제는 어떻게 막나요?
여러 모듈에서 같은 의미로 사용하는 안정적인 모델이나 유틸리티를 넣습니다. 특정 애플리케이션의 비즈니스 로직까지 넣으면 변경 이유가 다른 코드가 결합되므로, 소유 모듈을 명확히 하고 공통화의 이점이 실제로 있는지 검토합니다.
멀티모듈과 마이크로서비스는 무엇이 다른가요?
멀티모듈은 코드를 나누는 빌드 구조이고, 마이크로서비스는 서비스를 독립적으로 배포하고 운영하는 아키텍처입니다. 멀티모듈 프로젝트를 하나의 애플리케이션으로 배포할 수도 있고, 여러 서비스가 각각 멀티모듈로 구성될 수도 있습니다.