본문 바로가기

개발 공부/설계

[Spring boot][Gradle] Multiple Module 전환기 - 1. Multiple Module의 필요성을 느끼게 된 계기와 장점

잘 정리된 멀티 모듈 구조 ㅎㅎ

🚀 계기: 싱글 모듈에서 멀티 모듈로

프로젝트에 새롭게 투입되어 관리자 서비스를 담당하게 되면서, 기존에 싱글 모듈로 구성된 서비스에 새로운 도전을 시작하게 되었어요. 처음엔 단순히 권한 관리 기능을 추가하는 것으로 출발했지만, 차상위 도메인을 다르게 해야 한다는 요구사항에 직면하며 멀티 모듈 구조로의 전환을 결정했습니다. 🌈 이 전환의 첫 번째 이유는 바로 Domain의 정합성을 보장하기 위해서였죠.

 

🌍 상황 설정: 두 개의 다른 관점, 하나의 DB

상상해 보세요. 하나는 사용자 관점의 서비스 (api.example.com)로, Vue.js를 프론트엔드로 사용합니다. 다른 하나는 관리자 관점의 서비스 (admin.example.com)로, 여기서는 JSP를 사용하죠. 두 서비스 모두 동일한 DB를 사용하면서, 동일한 Entity들을 공유합니다.

 

🌤️ 멀티 모듈의 해결책

하지만 문제는, 만약 DB나 Entity에 변경 사항이 생긴다면, 싱글 모듈 구조에서는 여러 문제가 발생할 수 있습니다. 개발 지연은 물론, 운영 중에도 치명적인 취약점으로 작용할 수 있어요.

🧑‍⚖️ 비교 지표 싱글 모듈 멀티 모듈
DB 변경 시 Entity 수정 용이성 🌩️ ☀️
변경 사항 발생 시 시스템 정상 작동 보장 🌩️ ☀️
효과적인 커뮤니케이션 보장 🌩️ ☀️

 

🚀 멀티 모듈의 장점

멀티 모듈 구조로 전환하면, Domain 관련 모듈을 별도로 구성해 이러한 문제를 해결할 수 있습니다. 더불어, 인증이나 유틸리티 같은 모듈을 공유함으로써 개발 속도를 향상시키고 비즈니스 로직의 일관성을 유지할 수 있죠. 결국, 멀티 모듈 구조는 개발과 운영 양쪽에서 효율성과 안정성을 높이는 스마트한 선택이 됩니다. 🚀

멀티 모듈 구조로의 전환은 위와 같은 상황 이외에서도 많은 장점들이 있어. 아래는 그 중요한 장점들입니다:

  1. 모듈화 및 재사용성: 각 모듈은 독립적인 기능을 가집니다. 공통 유틸리티, 데이터 모델, 비즈니스 로직 등을 별도의 모듈로 분리하면, 이들을 다른 프로젝트나 모듈에서도 쉽게 재사용할 수 있어요. 이는 코드의 재사용성을 극대화하고, 개발 시간을 절약합니다.
  2. 유지보수성 향상: 모듈별 독립성은 특정 기능의 변경이 다른 모듈에 미치는 영향을 최소화합니다. 이는 유지보수를 쉽게 만들며, 특히 대규모 시스템에서 그 중요성이 더욱 부각됩니다.
  3. 빌드 관리의 용이성: Gradle을 사용하는 멀티 모듈 구조는 빌드 과정을 효율적으로 관리합니다. 특정 모듈에 대한 빌드나 테스트가 간소화되어 전체 프로젝트의 관리가 더욱 용이해집니다.
  4. 독립적인 테스트 환경: 각 모듈은 자체적인 테스트 환경을 구축할 수 있습니다. 이는 모듈별 테스트 요구사항을 쉽게 충족시키고, 시스템 전체의 안정성을 높이는 데 기여합니다.
  5. 확장성 및 관리의 용이성: 프로젝트가 성장함에 따라 새 모듈을 추가하거나 기존 모듈을 확장하기 쉽습니다. 각 모듈을 독립적으로 관리함으로써 전체 시스템의 복잡성을 효과적으로 관리할 수 있습니다.
  6. 팀 작업의 효율성: 멀티 모듈 구조는 여러 개발자나 팀이 동시에 작업할 때 협업을 용이하게 합니다. 각 팀이나 개발자가 독립적으로 모듈을 개발하고 관리할 수 있어, 프로젝트 전체의 작업 효율성이 향상됩니다.

이러한 멀티 모듈의 장점들은 프로젝트의 구조를 강화하고, 개발 효율성을 증가시키며, 유지보수 및 확장에 있어서의 유연성을 제공합니다. 따라서, 멀티 모듈 구조는 복잡한 프로젝트의 관리와 개발을 효과적으로 지원하는 중요한 전략적 선택이 되었습니다. 🚀🌟

 

🌧️ 멀티 모듈의 단점 및 해결 방안

멀티 모듈 구조가 많은 장점을 가지고 있지만, 몇 가지 단점도 존재합니다. 아래에서 이러한 단점들과 그에 대한 해결 방안을 살펴보겠습니다.

1. 복잡성 증가

  • 단점: 여러 모듈을 관리하면서 생기는 의존성과 구성의 복잡성이 증가합니다. 각 모듈 간의 상호작용을 이해하고 관리하는 것이 어려울 수 있습니다.
  • 해결방안: 명확한 모듈 간 인터페이스를 정의하고, 모듈별 책임을 명확히 분리합니다. 또한, 문서화를 통해 각 모듈의 역할과 상호작용을 분명히 기록하는 것이 중요합니다.

2. 초기 설정의 어려움

  • 단점: 멀티 모듈 프로젝트의 초기 설정과 구성이 복잡하며, 이에 대한 이해와 시간이 필요합니다.
  • 해결방안: Gradle이나 Maven과 같은 빌드 도구의 사용을 통해 프로젝트 설정을 자동화하고 표준화합니다. 또한, 경험 있는 개발자의 지식 공유 및 교육을 통해 팀원들의 이해도를 높입니다.

3. 빌드 시간 증가

  • 단점: 여러 모듈로 인해 전체 프로젝트의 빌드 시간이 길어질 수 있습니다.
  • 해결방안: 모듈별 빌드 최적화 및 캐싱 메커니즘을 활용합니다. Gradle이나 Maven의 증분 빌드 기능을 이용해 변경된 부분만 빌드하도록 설정합니다.

4. 의존성 관리의 어려움

  • 단점: 서로 다른 모듈 간의 의존성 관리가 복잡해질 수 있습니다.
  • 해결방안: 중앙 집중식 의존성 관리 시스템을 도입하거나, 명확한 버전 관리 규칙을 설정합니다. 또한, 의존성 분석 도구를 사용하여 의존성 문제를 미리 파악하고 해결합니다.

5. 팀 간 협업 문제

  • 단점: 다양한 모듈을 관리하는 팀 간의 협업에 문제가 발생할 수 있습니다.
  • 해결방안: 명확한 커뮤니케이션 채널과 협업 규칙을 설정합니다. 정기적인 회의와 코드 리뷰를 통해 각 팀 간의 정보 교환을 활성화합니다.

🌈 결론

멀티 모듈 구조는 분명히 큰 이점을 제공하지만, 위와 같은 단점들을 관리하는 것이 중요합니다. 이러한 단점을 효과적으로 관리하고 해결하는 것은 프로젝트의 성공을 위해 필수적입니다. 철저한 계획, 올바른 도구의 선택, 그리고 팀 간의 원활한 커뮤니케이션은 멀티 모듈 구조의 성공적인 구현을 위한 핵심 요소입니다.