Java/일반
Java Module
창욱씨
2020. 9. 7. 22:41
반응형
1. Java Module이란?
- Java 9에서 도입된 JPMS (Java Platform Module System)
- 패키지들의 집합을 하나의 단위로 묶어 캡슐화 + 의존성을 명시적으로 관리
module-info.java파일로 공개 범위(exports)와 의존성(requires)을 선언
2. Library vs Module
| Library | Module | |
|---|---|---|
| 캡슐화 | public이면 누구나 접근 가능 |
exports 해야만 외부 접근 가능 |
| 의존성 | build tool에서 암묵적 관리 | 코드 레벨에서 명시적 강제 |
| 배포 | JDK 전체 포함 | jlink로 필요한 모듈만 경량 배포 가능 |
Library는 코드 재사용의 단위, Module은 캡슐화 + 의존성까지 포함한 아키텍처 단위
3. 왜 Spring 생태계는 아직도 Library를 쓰나?
근본 원인 → Spring과 JPMS의 철학적 충돌
| 철학 | |
|---|---|
| JPMS | 명시적으로 허용한 것만 접근 가능 (화이트리스트) |
| Spring | 런타임에 Reflection으로 클래스/필드/메서드를 동적 탐색 (블랙리스트) |
- Spring의 DI 컨테이너는 Reflection 기반 → 모든 것이 열려 있어야 동작
- JPMS로 캡슐화하면 Spring이 접근할 수 없어 DI 자체가 불가능
- Spring이 JPMS를 지원하려면 DI 구조 자체를 재설계해야 함 → 사실상 Spring을 새로 만드는 것
- 따라서 Spring은 공식적으로 JPMS 미지원 선언
결과적으로
- Spring에 의존하는 라이브러리들도 자연스럽게 JPMS 미지원
- 의존성 체인 하나라도 Module이 아니면 전체가 무의미
- Java Module은 좋은 기술이지만 Spring 생태계에서는 사실상 그림의 떡
반응형