Offcanvas

How To / 개발자 / 애플리케이션 / 오픈소스

‘힐라에서 플링크까지’ 눈길 끄는 자바 프로젝트 7선

2023.05.15 Matthew Tyson  |  InfoWorld
자바 생태계는 그야말로 풍부하다. 온갖 프로그래밍 니즈에 대응하는 도구와 프레임워크들이 넘쳐난다. 특히 살펴볼 가치가 있는 오픈소스 자바 프로젝트 7가지를 정리했다. 
 
Image Credit : Getty Images Bank


자바(Java)의 세계가 워낙 방대하다보니, 일부 훌륭한 프로젝트를 놓치기 쉽다. 풀스택 애플리케이션 개발부터 마이크로서비스, Wasm, JVM의 대안에 이르는 자바 프로제트 7가지를 살펴본다. 

바딘(Vaadin)의 힐라(Hilla)
힐라(Hilla)는 자바(Java) 기반 백엔드와 자바스크립트(JavaScript) 프론트엔드를 갖춘 풀 스택 프레임워크이다. 반응형 프론트엔드 프레임워크인 React와 Lit를 지원한다.

힐라를 사용하면 ‘npx @vaadin/cli init --hilla foundry-hilla’와 같은 간단한 명령으로 새로운 풀 스택 프로젝트를 스캐폴딩 할 수 있다. 이는 NPM 명령이지만 Vite에서 빌드한 프런트 엔드 디렉터리가 있는 표준 메이븐(Maven) 레이아웃을 배포하며 모든 것이 ./mvnw 스크립트와 함께 실행될 수 있다.

힐라는 두 애플리케이션 절반 사이의 입력을 강제하므로 IDE가 Java API와 이를 사용하는 타입스크립트(TypeScript) 프런트 엔드에서 변경 사항을 감지하고 전파할 수 있다. 이 프레임워크에서는 자동 완성 및 리팩터링이 작동한다. 이 기능은 모든 타입스크립트(TypeScript) 세계의 tRPC와 비슷한 느낌이다.

힐라는 또한 최대 절전 모드에서 JPA를 통해 MySQL 및 PostgreSQL과 같은 여러 SQL 데이터베이스와 지속성을 통합한다.

힐라는 제이힙스터(jHipster)와 약간 비슷하지만 더 독단적(opinionated)이라고 볼 수 있다. 즉, 결합할 수 있는 기술 측면에서 유연성이 떨어지지만 잘 관리되고 문서화되어 있어 원활하게 이용할 수 있다. 자바로 풀 스택 앱을 구축해야 하고 프론트 엔드에 React 또는 Lit을 사용해야 한다면 힐라는 좋은 선택지일 수 있다.

제이힙스터(jHipster)
풀스택 프레임워크 분야에는 또 제이힙스터(jHipster)가 있다. 제이힙스터는 자바를 API 미들웨어로 사용하여 다양한 기술을 하나의 응집력 있는 스택으로 통합할 수 있는 매우 유연한 접근 방식을 취한다. 여러 반응형 프런트 엔드와 다양한 SQL 및 NoSQL 데이터 저장소 중에서 선택할 수 있다.

힐라(Hilla)와 마찬가지로 제이힙스터는 NPM 패키지인 ‘jhipster-generator’ 도구를 사용하여 애플리케이션을 생성하는 것으로 시작한다. 생성기는 기능에 대한 좋은 아이디어를 제공하는 설문지를 통해 안내한다. (ERR_PACKAGE_PATH_NOT_EXPORTED 오류가 발생하는 경우, ‘여기’를 참조하여 해결 방법을 확인하라.) 

제이힙스터는 모놀리식 애플리케이션, 마이크로서비스 아키텍처 또는 게이트웨이 중에서 선택할 수 있도록 하여 이 프레임워크의 범위를 어느 정도 파악할 수 있게 해준다. 모놀리식을 선택하면 스프링 웹플럭스(Spring WebFlux)를 사용하여 반응형 애플리케이션으로 만들 수 있다. 그런 다음 JWT 또는 오쓰2(Oauth 2)와 같은 다양한 스타일의 인증을 선택할 수 있다. 그리고 SQL, 몽고DB(MongoDB) 및 카산드라(Cassandra)와 같은 여러 데이터 저장소 중에서 고르고 Ehcache, Memcached, Redis와 같은 두 번째 수준 애플리케이션 캐시를 선택할 수 있다. 

다음으로 제이힙스터 생성기를 사용하면, 검색 엔진을 위한 엘라스틱서치(Elasticsearch), 스프링 웹소켓(Spring WebSocket)을 사용하는 웹소켓(WebSocket), 비동기 메시지 브로커로 아파치 카프카(Apache Kafka), 오픈API(OpenAPI) 생성기를 사용한 API 우선 개발 등 몇 가지 다른 기술을 추가할 수 있다. 다음으로, 여러 프런트 엔드 프레임워크 중에서 선택하고 원하는 경우 여러 테마와 함께 관리자 UI를 생성할 수 있다.

제이힙스터는 또한 국제화 및 테스트 기능을 제공하며 메이븐(Maven)과 그래들(Gradle)을 모두 지원한다.

이는 상당히 강력한 기능이다. 도메인 모델과 데이터 구조 및 그에 어울리는 UI를 생성하는 기능도 있다. 제이힙스터는 다양한 유형의 자바 애플리케이션을 구축하는 데 적절한 선택이 될 수 있다.

그랄VM(GraalVM)
그랄VM(GraalVM) 프로젝트는 가상 머신을 보다 광범위하게 구현하기 위한 목적으로 2018년 3월에 시작되었다. 그랄VM은 JVM이 할 수 있는 모든 작업을 수행할 수 있으며, 다양한 언어를 사용하고 다양한 대상 실행 환경으로 결과를 보여줄 수 있다. 또한 성능을 향상시킬 수 있는 JIT(Just-In-Time) 컴파일러를 비롯한 여러 컴파일러 스타일이 통합되어 있다.

그랄VM은 C, C++, 러스트, 스위프 등을 포함해 LLVM으로 컴파일 되는 모든 언어를 실행할 수 있다. 또한 자바(Java), 스칼라(Scala), 코틀린(Kotlin) 및 그루비(Groovy)와 같은 바이트 코드 언어도 처리한다. 또한 자바스크립트(JavaScript), 파이썬(Python), 루비(Ruby), R 언어도 지원한다. (향후에는 그랄VM이 지그(Zig)도 지원하기를 기대한다.)

즉, 모든 종류의 언어에 대해 한 번 쓰고 어디서나 실행할 수 있는 JVM의 장점을 모두 누릴 수 있다. 예를 들어, 그랄VM은 GCC처럼 LLVM 바이트 코드로 컴파일 된 C 프로그램을 가져와서 lli 명령으로 실행할 수 있다. 또는 그랄VM은 clang을 사용하여 C 코드를 실행 파일로 바로 컴파일할 수 있다. 그랄VM은 많은(전부는 아니지만) 언어 및 플랫폼에 대한 독립 실행형 실행 버전을 출력한다.

또한 웹어셈블리(Wasm), 변형 리눅스(Linux), 맥OS, 윈도우, iOS 및 안드로이드와 같은 많은 대상 바이너리에 대한 지원도 포함된다. 많은 대상에서 그랄VM은 별도의 설치 없이 실행되는 네이티브 이미지를 지원한다. 또한 개발자는 JIT 컴파일, AOT 컴파일 및 해석과 같은 실행 모드를 선택하여 성능 프로필을 미세 조정할 수 있다.

그랄VM은 활발한 커뮤니티를 통해 잘 유지 관리되고 문서화되어 있다. 전체적으로 볼 때, 그랄VM은 일종의 범용 언어 도구가 되기 위해 노력하고 있는 매력적인 프로젝트이다. 자세한 내용은 그랄VM 프로젝트 홈페이지를 참조하라.

마이크로넛(Micronaut)
마이크로넛(Micronaut)은 최신 클라우드 및 서버리스 환경을 목표로 하는 새로운 자바 개발 도구이다. 다양한 통합 기술을 사용하여 프로젝트를 스캐폴딩, 구축, 실행 및 테스트하기 위한 명령줄 도구와 같은 풍부한 기능을 제공한다. 가장 중요한 점은 마이크로넛이 대규모 코드베이스에도 불구하고 시작 시간을 유지하는 AOT 지원 IOC(Inversion-of-Control) 프레임워크를 중심으로 설계되었다는 것이다.

여기에 서비스 검색, 추적 및 컨테이너화 된 배포와 같은 마이크로서비스 지향 지원까지 추가하면 마이크로넛은 최신 자바 개발을 위한 세심하고 매력적인 옵션이라고 볼 수 있다.

마이크로넛은 웹 기반 프로젝트 디자이너를 제공하여 마이크로넛 코어에 연결할 수 있는 다양한 도구를 파악하는 데 사용할 수 있다. 이 도구는 스프링 이니셜라이저(Spring Initializr) 또는 제이힙스터(jHipster)의 온라인 생성기와 유사하지만 고유한 방식으로 접근한다. 마이크로넛의 핵심은 반응형이다. RxJava 및 Reactor와 같은 반응형 구현을 지원하며 다른 모든 것은 이를 중심으로 구축된다. 마이크로넛에는 자체 반응형 HTTP 클라이언트가 포함되어 있다.

마이크로넛의 각 노드는 반응형 컴포넌트이며, 주키퍼(ZooKeeper)나 유레카(Eureka)와 같은 중앙 서비스 브로커를 사용하여 더 큰 마이크로서비스 아키텍처로 구성할 수 있다.

마이크로넛을 사용하면 스프링(Spring)과 폭은 비슷하지만 구체적인 구현 세부 사항에 더 중점을 둔 원스톱 쇼핑 프레임워크에서 모범 사례를 쉽게 채택할 수 있다. 자바 기반 클라우드 및 서버리스 환경에서 작업하는 개발자에게는 훌륭한 선택이 될 수 있다.

마이크로스트림(MicroStream)
자바 기반 객체 지향 지속성의 발달 과정에서 마이크로스트림(MicroStream)은 최종적인 개념적 구체화를 나타낼 수 있다. 마이크로스트림은 실행 중인 객체 그래프를 있는 그대로 가져와 객체 지향 프로그래밍 체계를 사용하여 기본 데이터 저장소 수에 관계없이 지속성을 유지할 수 있다.
마이크로스트림을 사용하면 프레임워크가 객체와 속성을 저장하고 복구하는 대부분의 작업을 수행하는 동안 개발자는 객체와 속성의 사고 영역에 머무를 수 있다. 개발자는 여전히 가져오기 전략 및 지속성 경계와 같은 메타 문제를 고려해야 하지만, 이러한 문제는 애플리케이션 코드를 간섭하지 않고 간단하게 정의되므로 지속성에 대해 고려하지 않아도 그대로 작동한다.
마이크로스트림에는 지속성 트리의 루트를 정의하는 개념도 포함되어 있다. 한 애플리케이션에는 목록1에서 보여지는 것처럼 둘 이상의 루트를 가질 수 있다.

목록 1. 마이크로스트림을 사용한 저장 및 복원
 
// Saving
EmbeddedStorageManager manager = EmbeddedStorage.start();
manager.setRoot(myObject);
manager.storeRoot();
//Restoring
EmbeddedStorageManager storageEngine = EmbeddedStorage.start();
myObject = (MyClass) storageEngine.root();

마이크로스트림은 자바의 객체 지속성에 대한 흥미로운 새로운 접근 방식이며 새로운 프로젝트에서 살펴볼 가치가 있다.

티VM(TeaVM)
자바를 웹어셈블리(Wasm, WebAssembly)로 컴파일하는 것은 아직 시도해보지 않은 영역이지만, 티VM(TeaVM)은 오늘날 이를 가능하게 한다. 티VM은 Java 바이트코드를 구글 웹 툴킷(Google Web Toolkit)과 유사한 자바스크립트(JavaScript) 및 Wasm으로 변환하는 것을 지원한다. 이를 통해 브라우저 내부에서 자바 코드와 라이브러리를 사용하는 웹 애플리케이션을 만들 수 있다.

티VM은 먼저 코드를 하위 레벨 중간 표현으로 컴파일한 다음, 이를 추가로 최적화하고 웹어셈블리 명령어로 변환하는 방식으로 작동한다. 결과 코드는 매우 효율적이며 웹어셈블리를 지원하는 모든 최신 브라우저에서 실행할 수 있다.

티VM의 주요 이점 중 하나는 스프링(Spring)이나 하이버네이트(Hibernate)와 같은 인기 있는 자바 프레임워크를 지원한다는 점이다. 개발자는 이러한 프레임워크를 사용하여 복잡한 풀 스택 웹 애플리케이션을 구축한 다음 웹 기반 배포를 위해 코드를 Wasm으로 컴파일할 수 있다.

티VM은 아직 제작자가 일상 업무에 사용하고 오픈 소스 리포지토리에 수정 및 개선 사항을 올리는 신생 프로젝트에 불과하지만, 현재로서는 자바에서 Wasm으로 가는 가장 좋은 방법을 제공하는 것 같다.

전반적으로 티VM은 자바로 웹 애플리케이션을 개발하기 위한 유용하고 편리한 도구이며 브라우저 및 기타 Wasm 환경에서 자바로 작업할 수 있는 흥미로운 방법을 제공한다.

아파치 플링크(Apache Flink)
플링크(Flink)는 2011년에 시작되어 선도적인 이벤트 처리 프레임워크로 성장했다. 에어비앤비(Airbnb)와 넷플릭스(Netflix) 같은 많은 유명 기업에서 실시간 처리를 위해 사용하며, 비교적 관리하기 쉬운 패키지로 많은 기능을 제공한다. 

아파치 플링크(Apache Flink)는 내결함성과 상태 관리를 분산된 컨테이너 친화적인 형태로 통합한다. 동적 확장을 통해 자동으로 확장 및 축소하여 부하를 처리할 수 있다.

쿠버네티스(Kubernetes)를 사용하여 도커(Docker)에서 플링크(Flink)를 실행하는 것이 일반적이지만 플링크는 아파치 빔(Apache Beam)과 같은 프레임워크를 사용하여 AWS 람다, 애저 펑션 및 구글 클라우드 펑션과 같은 서버리스 인프라에서도 실행할 수 있다. 이렇게 하면 처리하는 동안 사용된 컴퓨팅 리소스의 비용만 지불할 수 있는 이점이 있으며 더 쉽고 효율적으로 확장할 수 있다.

플링크는 내부에 많은 기능을 가지고 있지만 간단한 기능은 이해하기 쉽다. 예를 들어, 목록 2에서 플링크는 포트 9999의 소켓을 감시하고 포트 9999에서 수신된 텍스트의 단어 수를 계산하여 콘솔에 데이터를 출력한다.

목록 2. 플링크를 사용한 간단한 텍스트 처리
 
DataStream<String> text = env.socketTextStream("localhost", 9999);

DataStream<Tuple2<String,Integer>> wordCounts = text
    .flatMap(new FlatMapFunction<String, Tuple2<String,Integer>>() {
        public void flatMap(String value, Collector<Tuple2<String,Integer>> out) {
            for (String word : value.split(" ")) {
                out.collect(new Tuple2<String,Integer>(word, 1));
            }
        }
    })
    .keyBy(0)
    .sum(1);

wordCounts.print();


플링크는 함수형 스타일로 작동하며, 플랫폼 자체에서 확장 가능하고 내결함성이 있는 방식으로 기능을 클라우드 인프라로 확장하는 것을 처리한다. 대체로 실시간 이벤트 처리를 하는 인상적인 프로젝트이다.

* Mattew Tyson은 다크 호스 그룹 설립자다. ciokr@idg.co.kr
CIO Korea 뉴스레터 및 IT 트랜드 보고서 무료 구독하기
추천 테크라이브러리

회사명:한국IDG 제호: CIO Korea 주소 : 서울시 중구 세종대로 23, 4층 우)04512
등록번호 : 서울 아01641 등록발행일자 : 2011년 05월 27일

발행인 : 박형미 편집인 : 천신응 청소년보호책임자 : 한정규
사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2024 International Data Group. All rights reserved.