관리 메뉴

JIE0025

멀티모듈은 무엇이고 왜 사용할까 ? 본문

백엔드/자바, 코틀린

멀티모듈은 무엇이고 왜 사용할까 ?

Kangjieun11 2023. 5. 29. 15:31
728x90

 

✅ 개요

그동안 모듈 한개에서 전체 프로젝트 파일을 관리하는 프로젝트만 봐왔었다.

최근에 멀티모듈을 사용하는 프로젝트들이 존재하는것을 알게되었고, 왜 사용하는지 궁금해서 이 글을 적는다.

 

 

✅ 모듈의 정의

먼저 모듈이 무엇인지 정의를 해보자. 

 

모듈은 패키지의 한 단계 위의 집합이다.

 

나는 처음 모듈과 패키지에 대해 공부했을때,  어차피 둘다 폴더 구조를 나타낸다면 분류를 해야할 이유가 뭘까? 라는 의문이 생겼었다.

모듈과 패키지의 역할 차이를 제대로 이해해야지 이 의문을 해소할 수 있다.

 

✍️ 패키지 (Package)

클래스들을 모으기 위한 디렉터리 구조 

코드를 구조적으로 구성하고 관리하기 위해 사용한다. 

 

 

🖥 Example

아래는 이전 프로젝트에서 사용한 서버 패키지 구조인데

 

mybuddy 패키지 내부에 <도메인>패키지를 구성하고,

그 아래에 controller부터 dto, service repository를 패키지로 만들어 여러개의 클래스를 포함하도록 구성했다.

 

 

✍️ 모듈 (Module)

자바에서 모듈은 독립적으로 배포될 수 있는 코드의 단위이다.

 

 

🖥 Example

이전 프로젝트는 단일모듈로 구성되어 backend  내부에 모든 것이 구성되어있는것을 확인할 수 있다.

 

 

 

😉 멀티모듈 (MultiModule) 

멀티모듈을 만든다는것은, 상호 연결된 여러개의 모듈로 구성된 프로젝트를 의미한다.

각 모듈은 독립적으로 배포되어 전체서비스 구성요소로 작동된다.



> 다른 블로그에서 가져온 멀티모듈 구조 이미지 <

https://velog.io/@anna_developer/1-%EC%BD%94%ED%94%84%EB%A7%81-%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC-%EA%B5%AC%EC%A1%B0-%EB%B0%8F-%EC%84%A4%EB%AA%85

 

 

 

 

✅ 멀티 모듈은 왜 사용할까?

 

그렇다면 멀티모듈은 왜 사용할까? 단일모듈하고는 어떤 차이점이 있으며, 멀티모듈을 구성함으로써 얻게되는 장점에 대해 알아보자.

 

 


 

 

타 블로그에서 참고해서 내용을 거의 그대로 가져왔는데

이해가 확실하게 되지는 않아서, 좀더 이해가 되면 사진도 추가하고, 내 용어로 변경시켜야겠다.


😵 단일 모듈의 한계

과거의 스프링 기반 프로젝트들은 단일모듈로 구성되어 있었다. 

단일모듈을 사용하는것에서 문제가 발생했는데

  • 서로 다른 프로젝트에서 공통된 코드가 사용된다면, 코드를 복붙해서 사용해야한다.
  • 여러 프로젝트를 사용하기 위해 IDE, 인스턴스를 N개 실행해야한다.
  • 패키지끼리 의존성이 강해서 하나의 수정이 N개의 오류를 발생시킬 수 있다.
  • 프로젝트규모가 커지면 각 패키지가 담당하는 역할이 모호해진다.

 

😉 멀티 모듈의 장점

멀티모듈은 각각의 모듈이 독립적이고, 간섭하지 않아 위의 문제가 발생하지 않는다.

 

  • 중복 코드가 많이 사라진다.
  • 여러 프로젝트를 모듈화 시켜 하나의 IDE, 인스턴스에서 실행할 수 있다.
  • 각각의 모듈과 패키지가 독립적인 역할을 해서 의존성이 낮아진다.

 

 

✅ 멀티모듈 프로젝트 구성 예

 

 

👩‍💻 멀티모듈이 아닌 경우 

(회원 시스템 예시가 많아서)

회원 시스템을 만든다고 가정하자.

 

 

 

  • Member API - 고객의 화면단에서 호출하는 서버
  • Member Admin - 관리자 페이지에서 호출하는 서버
  • Member Batch - 주기적 작업 수행 서버

 

 

세개의 서버 모두 <회원>이라는 도메인에 대한 서버이므로, 중복되는 코드가 발생한다.

 

Member 도메인 모델에 대한 코드는, 3가지 프로젝트에 모두 발생하게 되며

 

 

 

만약 요구사항이 변경될 경우...

세 프로젝트에 있는 공통 코드를 모두 변경시켜주어야한다.

 

 

이렇게 사용하면 유지보수하기 어렵고, 변경에 유연한 대처를 할 수 없다.

 

 

 

 

👩‍💻 멀티모듈 구조

하나의 시스템에서 중심 도메인을 모듈로 분리해 보장 메커니즘을 제공받을 수 있게된다.

 

 

 

 

 

레퍼런스 글을 좀 더 읽다보면, 멀티모듈을 구성하는게 단순한 문제는 절대 아니다. 

 

 

우아한테크블로그에서도 발생할 수 있는 다양한 경우를 보여주는데 

이해가 잘 되지는 않는다. 

 

오늘 글의 목적은 멀티모듈을 왜 사용하는지, 무엇이 장점인지에 초점을 맞췄고, 개념적인것을 안 것으로도 만족스럽다.

추가적인 이해는 미래의 나에게 맡겨야지. 언젠가 멀티모듈 개발에 익숙해지면 그때 다시 읽자!

 

 

 

 


References

 

 

 

 

나중에 볼것  (멀티모듈 구성 및 관리)