[Spring] 멀티모듈

밀크야살빼자·2023년 7월 18일
0

멋쟁이사자처럼 연합 프로젝트를 진행하는 과정에서 저는 멀티모듈이라는 새로운 개념을 처음 접하게 되었습니다. 프로젝트를 효율적으로 수행하기 위해서는 멀티모듈에 대한 이해가 필수적이라고 판단했습니다. 따라서 프로젝트를 잘 마무리할 수 있도록 멀티모듈에 대해 알아보겠습니다.

멀티 모듈(Multi Module)

하나의 단일 프로젝트를 여러개의 모듈로 분리해서 구성하는 기법입니다. 각 모듈은 개별적으로 컴파일되어 라이브러리 또는 실행 가능한 파일로 생성됩니다.

모듈

패키지의 한 단계 위의 집합체이며, 관련된 패키지와 리소스들의 재사용할 수 있는 그룹입니다.

회원 시스템을 개발한다고 하면 다음과 같은 독립적인 프로젝트 단위가 있습니다.

  • member internal api
  • member external api
  • member batch

[ 단일 모듈 멀티 프로젝트 ]


위의 그림에서는 3개의 프로젝트가 모두 Member라는 동일한 도메인을 가지고 복사 붙여넣기를 통해 구현하고 있어 중복 코드가 발생할 수 있습니다. 이 경우 중복 코드에 수정이 필요할 때 유지보수가 어려워지며, 코드의 일관성과 변경 관리가 어려워질 수 있습니다.

[ 멀티 모듈 단일 프로젝트 ]


그래서 단일 프로젝트 내에 여러 개의 모듈을 가질 수 있는 구조가 도입되었습니다. 각각의 기존 프로젝트는 이제 모듈로 분리되어 있고, 공통 코드는 이를 통해 분리하여 재사용할 수 있습니다. 멀티 모듈 구조는 공통 코드를 효율적으로 관리하고 다양한 모듈에서 함께 사용할 수 있도록 합니다.

멀티 모듈을 사용하는 이유

  1. 코드의 중복을 줄일 수 있습니다.
    여러 서비스에서 공통된 로직을 운영할 때, 공통된 부분을 모듈화하여 의존성으로 추가하면 공유할 수 있습니다.

  2. 각 모듈의 기능을 파악하기 쉬워집니다.
    공통 기능을 의존성 주입으로 모듈별로 분리하여 작성하면 코드의 이해가 쉬워집니다.

  3. 빌드를 쉽게 진행할 수 있습니다.
    ./gradlew :moduleName:build 명령어를 통해 각 모듈을 쉽게 빌드할 수 있습니다.

단점

  • 설정 및 배포의 복잡성: 각 모듈을 개별적으로 설정하고 배포해야하기 때문에 복잡성이 증가할 수 있습니다.
  • 의존성 관리의 어려움: 모듈 간의 의존성을 관리하는 것이 어려울 수 있으며, 잘못된 의존성 설정은 문제를 발생시킬 수 있습니다.

동작 방식

  • 프로젝트를 작은 모듈로 분해하여 관리합니다. 각 모듈은 자체적인 기능을 수행하고 다른 모듈과 독립적으로 작동할 수 있습니다.

  • 각 모듈은 다른 모듈에 의존할 수 있습니다. 따라서 프로젝트의 각 부분이 필요한 리소스나 기능을 가져와 사용할 수 있습니다. 의존성 관리 도구를 사용하여 모듈 간의 의존성을 관리합니다.

  • 필요한 경우 모듈 간에는 인터페이스를 통해 통신할 수 있습니다. 이는 모듈 간의 결합도를 낮추고 유연성을 높여줍니다.


📜참고 자료

profile
기록기록기록기록기록

2개의 댓글

comment-user-thumbnail
2023년 7월 18일

글이 많은 도움이 되었습니다, 감사합니다.

답글 달기
comment-user-thumbnail
2023년 7월 18일

소중한 정보 잘 봤습니다!

답글 달기