행복한 아빠
Java Jigsaw가 도대체 뭐지? - Java9의 핵심 본문
Java 9 이야기가 솔솔 들립니다. Java 9의 특징 중 가장 주목할 만한 것이 Java jigsaw라는 프로젝트에서 착안한 모듈화 시스템이라는데 대충 소개한 글로는 뭔 소리인지 몰라서 한 번 찾아봤습니다. 자세한 스펙이나 기능요소보다는 Java Jigsaw가 말하려는 개념을 구체적으로 이해할 수 있도록 정리합니다.
새로운 모듈 시스템?
Java는 패키지의 name space나 패키징 방법을 제공하는 JAR 그리고 Maven이나 Gradle 같은 모듈 관련 기능 및 생태계가 비교적 잘 되어 있다고 믿었는데 난데없이 왜 새로운 모듈 시스템을 들고 나왔는지 이해가 안 갑니다.
그래서 Project Jigsaw DRAFT 문서의 프로젝트의 목적을 살펴봤습니다. (http://openjdk.java.net/projects/jigsaw/goals-reqs/03)
- SE 플랫폼과 JDK를 작은 컴퓨터 디바이스에 보다 쉽게 경량화(scalable down)할 수 있게 한다.
- Java SE 플랫폼의 전반적인 구현 부분과 특히 JDK 부분의 보안성과 유지관리성(maintainability)을 향상시킨다.
- 애플리케이션의 성능을 높일 수 있게 하고
- Java SE 그리고 EE 플랫폼에서 개발자들이 라이브러리와 애플리케이션 구성과 유지를 쉽게 만들어 준다.
뭐가 문제였나?
1 2 3 4 5 6 | module com.mycompay { // com.yourcomapny 를 사용할 거야 requires com.yourcompany; // com.mycompany를 사용할 수 있어 exports com.mycompany; } | cs |
예를 들어 위의 구성을 가지면 UserService 인터페이스로 이 컴포넌트를 사용해야 합니다. 그런데 누군가 내부 구현을 위한 UserHelper 클래스에 유용한 API가 있어 이것을 사용하게 되었습니다. 말릴 수가 없습니다. 그리고 이 컴포넌트 설계자는 누군가 UserHelper 를 호출 했을지도 모른다는 두려움에 기능 개선을 위해 UserHelper 클래스를 변경할 수가 없습니다.
이러한 제약은 아키텍처 문서나 개발자 가이드에 적시하여 규칙으로 관리할 수 밖에 없습니다. 그러나 누군가는 약속되지 않은 API 호출을 하고는 합니다.
Java jigsaw의 모듈화 시스템은 이러한 문제를 깔끔하게 해결합니다.
지금까지 잘 살고 있는데 왜?
https://bugs.openjdk.java.net/secure/attachment/57772/jdk.png
JDK의 모듈 구조는 위와 같은 형태로 작게 나뉘어 질 것이며, 표준 API(SE, EE)뿐만 아니라 3rd party 라이브러리 심지어 우리가 만든 라이브러리에서도 필요한 것만 골라서 배포할 수 있습니다.
넘어야 할 산들
언어 레벨에서의 모듈화 시스템
그래서
처음은 Java 클래스의 가시성 정도로 충분하다고 생각 했었지그러나 프로그램이 커지다 보니 클래스의 묶음도 필요 했지클래스 묶음 단위로 관리하고 싶었는데 클래스들 사이가 좋아 다른 동네의 클래스도 막 호출하는 거야도대체 어떤 클래스가 어떤 클래스를 호출 하는지 알 수가 없네안되겠어. 클래스 묶음에서 호출할 수 있는 대표를 정하고 대표 하고만 이야기 하도록 하자그래 클래스 묶음 단위로 관리하려고 하는 거야.그걸 모듈이라고 불러...
참조:
- http://openjdk.java.net/projects/jigsaw/
- http://blog.codefx.org/java/dev/motivation-goals-project-jigsaw/
'잡다한기록' 카테고리의 다른 글
Java Jigsaw가 도대체 뭐지? - Java9의 핵심 (7) | 2016.09.27 |
---|---|
(지난 간 이야기) CBD에 관하여 (0) | 2016.09.27 |
Vi를 좋아하시는 분들을 위하여 (0) | 2016.09.26 |
Install kamailio (SIP open source server) (0) | 2016.09.07 |
[UNIX] 파일 자르기 / 연결하기 (2) | 2010.10.01 |
FTP 디렉토리에서 심볼릭링크가 작동하지 않을 때 (0) | 2010.08.24 |
-
춘춘춘 2016.10.05 08:02 잘읽었습니다 외부라이브러리의 디폴트클래스를 접근하려고 같은 패키지명으로 사용한 클래스의 접근을 어떻게 풀지 궁금해지는군요
-
행복한아빠 2016.10.05 12:33 신고 감사합니다. 아직 시간이 많이 남아서 변동이 많을 거라 예상됩니다.
-
길박사 2016.10.06 10:26 docker가 쓰이는 추세를 확인시켜 주셔서 감사합니다. 확신이 없었는데요. Java Jigsaw쓰면 단점은 Pure Java의 이점이 상실된다는 건지요? 제작자가 생각지 못한 개발자가 쓸만한 API급이, 내부에 있어도 인제 함부로 못쓴다는 소리같은데요. 회사가 Sun에서 Oracle로 바뀌었으니, Javascript가 Nashorn 마냥 난무하는 이유를 알겠네요.
-
P모드진사 2017.03.31 07:10 신고 잘 보고 갑니다. 감사합니다.
-
거대한 개발자 2017.09.29 16:01 신고 좋은정보 감사드립니다.
잘 읽고 갑니다 ^^ -
LichKing 2017.10.23 17:01 신고 안녕하세요, 글 잘 봤습니다. 레거시코드와 하위호환성 관련부분이 잘 이해가 안가는데요.
하위호환성은 하위버전에서 작성한 코드가 9에서 잘 돌아가는걸 말하는게 아닌가요?
말씀하신부분을 제가 잘못이해한건지 모르겠지만 9에서 작성한 코드가 하위버전에서 잘 돌아야한다는 의미로 보여서 여쭤봅니다. -
johnna_endure 2020.02.21 15:43 신고 좋은 글 잘 읽고 갑니다~