이해

모듈이란?

일일일코_장민기 2024. 5. 4. 17:58
728x90

조만간 MSA를 구현한 프로젝트를 만들 예정이다. 어떻게 해야 되는지 알아보던 도중 '모듈'이란 단어가 나와 찾아보았다.

 

모듈

- 코드를 더 쉽게 구조화하고 관리할 수 있게 해주는 것

- 프로젝트의 각각의 기능이나 부분

- 독립적으로 배포될 수 있는 코드의 단위

 

모듈의 장점

- 전체 프로젝트를 이해하고 관리하기 쉬움

- 각각의 부분을 독립적으로 개발하고 테스트할 수 있음

- 필요에 따라 유연하게 조합하여 전체 시스템을 만들 수 있음

 

패키지와의 차이

- 패키지: 클래스와 인터페이스를 그룹화하는 단위

- 모듈: 패키지를 그룹화하는 단위

            모듈 디스크립터 파일(module-info.java)에 의해 정의

            다른 모듈에 대한 의존성을 명시적으로 선언하여 모듈 간의 의존성을 명확하게 관리

 

멀티 모듈 프로젝트

- 상호 연결된 여러개의 모듈로 구성된 프로젝트

- 멀티 모듈 프로젝트의 각 모듈은 전체 서비스의 구성요소로서 동작

- 역할, 의존성의 분리를 통해 시스템의 분리 및 통합을 유연하게 만들어줄 수 있는 좋은 아키텍처를 만들 수 있음

- 역할과 의존성을 잘 분리할수록 모놀리틱 <-> MSA간 전환이 용이(클린 코드)

 

여러 형태의 멀티 모듈

1. 단일 모듈 멀티 프로젝트

- 같은 도메인에 대해 별도의 여러 프로젝트로 구성

-->  중복되는 코드가 많이 발생

--> 복붙

==> 휴먼 에러 위험

 

1.1 단일 모듈 멀티 프로젝트(사설 저장소 사용할 경우)

- Nexus 등을 사용하여 사설 저장소에 공통된 코드를 라이브러리화 하여 배포

--> 휴먼 에러 위험 저하

--> But 공통된 코드가 수정되면 이를 배포하고 빌드하는 사이클이 추가

==> 번거로움 + 여러 개의 IDE 요

 

2. 멀티 모듈 단일 프로젝트

- 하나의 프로젝트에서 ‘모듈’을 여러개로 분리하여 관리

--> 공통된 코드(commons)가 모두 프로젝트가 아닌 모듈(서브 프로젝트)이 됨

--> 코드 일관성 관리 주체를 시스템으로 옮겨올 수 있으며, 공통 코드가 수정되었을 때 별도의 빌드/배포 사이클이 필요하지 않으며, IDE 또한 하나만 실행해 사용

 

2.1 실패한 멀티 모듈 단일 프로젝트
- 공통되는 로직을 분리해서 common(core)라는 모듈을 만들다 중복되는 코드를 모두 몰아 넣음

--> common 안에서 비즈니스가 흐르기 시작

--> common만 굉장히 큰 프로젝트로 구성

==> common 내부가 스파게티 코드(분해도 어려움)

 

출처: https://hyeon9mak.github.io/woowahan-multi-module/#%EF%B8%8F-%EB%A9%80%ED%8B%B0-%EB%AA%A8%EB%93%88-%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0

 

 

이 이상은 프로젝트를 만들면서 몸으로 느껴봐야겠다...

'이해' 카테고리의 다른 글

엔티티와 레코드  (0) 2024.05.06
JDK와 JRE  (0) 2024.05.04
클린 코드  (0) 2024.04.30
간단한 IT 용어 정리(프로토콜/HTTP/아키텍처/REST)  (0) 2024.04.30
기술면접을 위한 스프링과 스프링부트 이해  (1) 2024.04.26