일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 알고리즘
- 코틀린
- 자바
- SQL
- 코딩봉사
- 회고
- 프로그래머스
- 백준
- BFS
- 데이터베이스
- 공부일지
- 백준알고리즘
- 백준 알고리즘
- 문제풀이
- C++
- 시나공
- 1과목
- softeer
- CJ UNIT
- python
- SW봉사
- 스프링
- 소프티어
- 파이썬
- 코딩교육봉사
- kotlin
- programmers
- 정보처리산업기사
- MYSQL
- java
- Today
- Total
JIE0025
멀티모듈은 무엇이고 왜 사용할까 ? 본문
✅ 개요
그동안 모듈 한개에서 전체 프로젝트 파일을 관리하는 프로젝트만 봐왔었다.
최근에 멀티모듈을 사용하는 프로젝트들이 존재하는것을 알게되었고, 왜 사용하는지 궁금해서 이 글을 적는다.
✅ 모듈의 정의
먼저 모듈이 무엇인지 정의를 해보자.
모듈은 패키지의 한 단계 위의 집합이다.
나는 처음 모듈과 패키지에 대해 공부했을때, 어차피 둘다 폴더 구조를 나타낸다면 분류를 해야할 이유가 뭘까? 라는 의문이 생겼었다.
모듈과 패키지의 역할 차이를 제대로 이해해야지 이 의문을 해소할 수 있다.
✍️ 패키지 (Package)
클래스들을 모으기 위한 디렉터리 구조
코드를 구조적으로 구성하고 관리하기 위해 사용한다.
🖥 Example
아래는 이전 프로젝트에서 사용한 서버 패키지 구조인데
mybuddy 패키지 내부에 <도메인>패키지를 구성하고,
그 아래에 controller부터 dto, service repository를 패키지로 만들어 여러개의 클래스를 포함하도록 구성했다.
✍️ 모듈 (Module)
자바에서 모듈은 독립적으로 배포될 수 있는 코드의 단위이다.
🖥 Example
이전 프로젝트는 단일모듈로 구성되어 backend 내부에 모든 것이 구성되어있는것을 확인할 수 있다.
😉 멀티모듈 (MultiModule)
멀티모듈을 만든다는것은, 상호 연결된 여러개의 모듈로 구성된 프로젝트를 의미한다.
각 모듈은 독립적으로 배포되어 전체서비스 구성요소로 작동된다.
> 다른 블로그에서 가져온 멀티모듈 구조 이미지 <
✅ 멀티 모듈은 왜 사용할까?
그렇다면 멀티모듈은 왜 사용할까? 단일모듈하고는 어떤 차이점이 있으며, 멀티모듈을 구성함으로써 얻게되는 장점에 대해 알아보자.
타 블로그에서 참고해서 내용을 거의 그대로 가져왔는데
이해가 확실하게 되지는 않아서, 좀더 이해가 되면 사진도 추가하고, 내 용어로 변경시켜야겠다.
😵 단일 모듈의 한계
과거의 스프링 기반 프로젝트들은 단일모듈로 구성되어 있었다.
단일모듈을 사용하는것에서 문제가 발생했는데
- 서로 다른 프로젝트에서 공통된 코드가 사용된다면, 코드를 복붙해서 사용해야한다.
- 여러 프로젝트를 사용하기 위해 IDE, 인스턴스를 N개 실행해야한다.
- 패키지끼리 의존성이 강해서 하나의 수정이 N개의 오류를 발생시킬 수 있다.
- 프로젝트규모가 커지면 각 패키지가 담당하는 역할이 모호해진다.
😉 멀티 모듈의 장점
멀티모듈은 각각의 모듈이 독립적이고, 간섭하지 않아 위의 문제가 발생하지 않는다.
- 중복 코드가 많이 사라진다.
- 여러 프로젝트를 모듈화 시켜 하나의 IDE, 인스턴스에서 실행할 수 있다.
- 각각의 모듈과 패키지가 독립적인 역할을 해서 의존성이 낮아진다.
✅ 멀티모듈 프로젝트 구성 예
👩💻 멀티모듈이 아닌 경우
(회원 시스템 예시가 많아서)
회원 시스템을 만든다고 가정하자.
- Member API - 고객의 화면단에서 호출하는 서버
- Member Admin - 관리자 페이지에서 호출하는 서버
- Member Batch - 주기적 작업 수행 서버
세개의 서버 모두 <회원>이라는 도메인에 대한 서버이므로, 중복되는 코드가 발생한다.
Member 도메인 모델에 대한 코드는, 3가지 프로젝트에 모두 발생하게 되며
만약 요구사항이 변경될 경우...
세 프로젝트에 있는 공통 코드를 모두 변경시켜주어야한다.
이렇게 사용하면 유지보수하기 어렵고, 변경에 유연한 대처를 할 수 없다.
👩💻 멀티모듈 구조
하나의 시스템에서 중심 도메인을 모듈로 분리해 보장 메커니즘을 제공받을 수 있게된다.
레퍼런스 글을 좀 더 읽다보면, 멀티모듈을 구성하는게 단순한 문제는 절대 아니다.
우아한테크블로그에서도 발생할 수 있는 다양한 경우를 보여주는데
이해가 잘 되지는 않는다.
오늘 글의 목적은 멀티모듈을 왜 사용하는지, 무엇이 장점인지에 초점을 맞췄고, 개념적인것을 안 것으로도 만족스럽다.
추가적인 이해는 미래의 나에게 맡겨야지. 언젠가 멀티모듈 개발에 익숙해지면 그때 다시 읽자!
References
- https://hudi.blog/why-use-multi-module/
- https://velog.io/@soyeon207/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B6%80%ED%8A%B8-%EB%A9%80%ED%8B%B0-%EB%AA%A8%EB%93%88-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EB%A7%8C%EB%93%A4%EA%B8%B0
- 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
나중에 볼것 (멀티모듈 구성 및 관리)
'백엔드 > 자바, 코틀린' 카테고리의 다른 글
멀티스레딩의 개요 및 운영체제 기초 (0) | 2023.08.06 |
---|---|
[Kotlin] lateinit var, 언제 사용할까? (0) | 2023.06.08 |
[Kotlin] 컬렉션(Collection) (0) | 2023.05.25 |
[Kotlin] 코틀린 기초 (0) | 2023.05.24 |
[Kotlin] 코틀린이란 (왜 필요하고, 왜 배워야할까) (0) | 2023.05.23 |