조만간 MSA를 구현한 프로젝트를 만들 예정이다. 어떻게 해야 되는지 알아보던 도중 '모듈'이란 단어가 나와 찾아보았다.
모듈
- 코드를 더 쉽게 구조화하고 관리할 수 있게 해주는 것
- 프로젝트의 각각의 기능이나 부분
- 독립적으로 배포될 수 있는 코드의 단위
모듈의 장점
- 전체 프로젝트를 이해하고 관리하기 쉬움
- 각각의 부분을 독립적으로 개발하고 테스트할 수 있음
- 필요에 따라 유연하게 조합하여 전체 시스템을 만들 수 있음
패키지와의 차이
- 패키지: 클래스와 인터페이스를 그룹화하는 단위
- 모듈: 패키지를 그룹화하는 단위
모듈 디스크립터 파일(module-info.java)에 의해 정의
다른 모듈에 대한 의존성을 명시적으로 선언하여 모듈 간의 의존성을 명확하게 관리
멀티 모듈 프로젝트
- 상호 연결된 여러개의 모듈로 구성된 프로젝트
- 멀티 모듈 프로젝트의 각 모듈은 전체 서비스의 구성요소로서 동작
- 역할, 의존성의 분리를 통해 시스템의 분리 및 통합을 유연하게 만들어줄 수 있는 좋은 아키텍처를 만들 수 있음
- 역할과 의존성을 잘 분리할수록 모놀리틱 <-> MSA간 전환이 용이(클린 코드)
여러 형태의 멀티 모듈
1. 단일 모듈 멀티 프로젝트
- 같은 도메인에 대해 별도의 여러 프로젝트로 구성
--> 중복되는 코드가 많이 발생
--> 복붙
==> 휴먼 에러 위험
1.1 단일 모듈 멀티 프로젝트(사설 저장소 사용할 경우)
- Nexus 등을 사용하여 사설 저장소에 공통된 코드를 라이브러리화 하여 배포
--> 휴먼 에러 위험 저하
--> But 공통된 코드가 수정되면 이를 배포하고 빌드하는 사이클이 추가
==> 번거로움 + 여러 개의 IDE 요
2. 멀티 모듈 단일 프로젝트
- 하나의 프로젝트에서 ‘모듈’을 여러개로 분리하여 관리
--> 공통된 코드(commons)가 모두 프로젝트가 아닌 모듈(서브 프로젝트)이 됨
--> 코드 일관성 관리 주체를 시스템으로 옮겨올 수 있으며, 공통 코드가 수정되었을 때 별도의 빌드/배포 사이클이 필요하지 않으며, IDE 또한 하나만 실행해 사용
2.1 실패한 멀티 모듈 단일 프로젝트
- 공통되는 로직을 분리해서 common(core)라는 모듈을 만들다 중복되는 코드를 모두 몰아 넣음
--> common 안에서 비즈니스가 흐르기 시작
--> common만 굉장히 큰 프로젝트로 구성
==> common 내부가 스파게티 코드(분해도 어려움)
이 이상은 프로젝트를 만들면서 몸으로 느껴봐야겠다...
'이해' 카테고리의 다른 글
엔티티와 레코드 (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 |