CWN(CHANGE WITH NEWS) - 외신, 클라우드 네이티브를 위한 주요 자바 프레임워크 선정

  • 흐림고창군17.8℃
  • 흐림서산17.2℃
  • 구름많음춘천16.4℃
  • 흐림해남16.9℃
  • 흐림군산17.5℃
  • 흐림완도18.7℃
  • 흐림울진16.7℃
  • 박무홍성16.9℃
  • 구름많음철원14.9℃
  • 구름많음제주20.1℃
  • 흐림영광군17.5℃
  • 흐림안동15.2℃
  • 흐림서청주16.1℃
  • 박무청주18.8℃
  • 흐림보성군17.2℃
  • 흐림대구17.1℃
  • 흐림대전16.9℃
  • 흐림청송군13.6℃
  • 흐림영주14.3℃
  • 구름많음성산19.4℃
  • 흐림천안16.2℃
  • 흐림거창14.5℃
  • 흐림이천15.8℃
  • 흐림장수13.7℃
  • 흐림부안18.1℃
  • 흐림강진군17.4℃
  • 흐림동해18.1℃
  • 구름많음인제15.4℃
  • 박무북춘천16.2℃
  • 흐림강화15.1℃
  • 흐림태백11.9℃
  • 흐림봉화12.8℃
  • 흐림문경15.5℃
  • 흐림임실15.4℃
  • 구름많음강릉19.4℃
  • 흐림영월15.3℃
  • 흐림창원19.2℃
  • 흐림서귀포22.1℃
  • 흐림파주15.6℃
  • 구름많음부산21.3℃
  • 흐림정선군13.8℃
  • 구름많음고산22.0℃
  • 구름많음울산16.8℃
  • 흐림전주18.1℃
  • 흐림제천13.9℃
  • 흐림고창17.2℃
  • 흐림홍천16.1℃
  • 흐림거제17.9℃
  • 흐림진주15.4℃
  • 흐림백령도19.0℃
  • 흐림금산15.0℃
  • 흐림원주16.0℃
  • 흐림고흥16.8℃
  • 흐림정읍17.5℃
  • 흐림추풍령14.3℃
  • 흐림광양시18.3℃
  • 흐림밀양16.9℃
  • 흐림양평16.1℃
  • 흐림포항18.6℃
  • 흐림의령군14.4℃
  • 흐림진도군17.6℃
  • 흐림영천14.9℃
  • 흐림광주18.4℃
  • 흐림여수20.0℃
  • 흐림통영18.9℃
  • 구름많음북부산17.2℃
  • 흐림구미16.4℃
  • 흐림충주15.8℃
  • 흐림목포19.5℃
  • 구름많음양산시17.9℃
  • 흐림상주15.8℃
  • 흐림세종16.3℃
  • 구름조금울릉도20.3℃
  • 흐림부여16.2℃
  • 흐림순창군16.2℃
  • 흐림경주시15.2℃
  • 흐림영덕18.5℃
  • 흐림의성15.1℃
  • 흐림김해시18.3℃
  • 흐림북창원18.6℃
  • 흐림합천16.1℃
  • 흐림산청15.6℃
  • 흐림보령18.5℃
  • 흐림남원16.0℃
  • 흐림보은15.0℃
  • 흐림남해19.0℃
  • 박무서울17.4℃
  • 흐림흑산도20.6℃
  • 구름조금속초18.8℃
  • 흐림동두천15.4℃
  • 박무인천18.0℃
  • 구름많음대관령11.6℃
  • 흐림수원16.3℃
  • 흐림순천14.8℃
  • 흐림함양군15.3℃
  • 구름조금북강릉17.8℃
  • 흐림장흥16.7℃
  • 2025.10.02 (목)

외신, 클라우드 네이티브를 위한 주요 자바 프레임워크 선정

최정인 / 기사승인 : 2022-06-29 04:35:31
  • -
  • +
  • 인쇄

프로그래밍 언어 자바는 출시 후 약 30년이 지난 언어로, 생활 속 애플리케이션 곳곳에 사용된다. 그러나 수십 년간 큰 인기를 누린 자바도 취약한 분야가 있다. 바로 수백만 유저를 연결해야 하는 서버의 영역이다. 초기에 서버 측 애플리케이션을 제작하는 툴로 자바가 최적이었던 시기도 있었다. J2EE, 하이버네이트(Hibernate), 스프링(Spring)과 기본 자바 서브렛 모델을 이용하면 비교적 간단하게 강력한 웹 애플리케이션을 개발할 수 있었다.

자바스크립트와 Node.js가 등장하면서 형세는 바뀌었다. 개발자들은 Node.js에 열광하였으며 자바스크립트 런타임 환경으로 변경했다. 그 배경에는 크게 두 가지 이유가 있다. 첫째, 개발자들은 서버와 브라우저 클라이언트에서 같은 코드를 실행할 수 있었다. 두 번째로 Node.js 서버의 반응형 모델은 압도적으로 빠른 처리 속도를 제공하였다.

자바도 이에 맞추어 진화하였다. 일부 개발자들은 구글 웹 툴키트를 이용하여 자바를 자바스크립트로 변환하였다. 또한, 서버 측 자바의 속도를 높이기 위한 노력도 있었다. 초기 서버 측 자바 프레임워크는 수신 리퀘스트마다 스레드가 부여된다는 결정적 단점이 있었다. 수신 및 발신 데이터를 정리하기에는 편리하지만, 서버가 수용할 수 있는 사용자 수가 제한되기 때문이다. Node.js는 다른 모델을 이용하므로 훨씬 많은 사용자를 수용할 수 있다.

최근 들어 자바 개발자들은 Node.js의 장점을 끌어와 클라우드 네이티브 자바 프레임워크에 적용하기 시작했다. Node.js의 접근법을 이용하여 보다 가벼운 기능을 지원하고 클라우드 위에서 빠르게 실행하고 중단할 수 있도록 개발하였다. 또한 최소의 서버 인스턴스로 빠르게 개발할 수 있도록 추가 라이브러리를 활용한다. 클라우드 네이티브 자바 프레임워크는 여러 마이크로 서비스가 하나로 작동하면서도 각각이 독립적으로 설치되고 재시동될 수 있도록 지원한다. 그와 동시에 빠른 구축 및 설치 속도도 지원한다.

이제는 클라우드 네이티브를 활용하고자 하는 자바 개발자들에게 다양한 선택지가 존재한다. 그렇다면, 크라라우드 네이티브 세계에서 사용하기 가장 좋은 자바 프레임워크는 무엇일까? 해외 IT 매체 인포월드가 크라우드 네이티브 개발을 위한 자바 프레임워크 8가지를 소개했다.

1. 마이크로낫(Micronaut)
마이크로낫 개발자는 스프링(Spring)이나 그레일즈(Grails) 같은 클래식 자바 프레임워크의 장점인 유연한 구성과 종속성 삽입 기능을 활용한다. 그와 동시에 메모리 사용량을 줄이고 더딘 스타트업과 같은 점을 개선하여 마이크로 서비스 개발에 최적화하였다. 주석 설계 시 종속성을 삽입할 수 있을 정도의 정보는 제공하면서도 메모리를 사용하는 리플렉션을 제거하여 기존 프레임워크보다 가벼워졌다. 또한 컴파일 시 구성되도록 하여 코드가 더욱 빠르고 가볍게 실행되도록 하였다.

마이크로낫은 자바, 코틀린, 그루비 등 다양한 JVM 기반 언어를 지원하며 여러 클라우드에서 교차 실행이 가능하다. 미리 구성된 구성 파일은 메이저 클라우드에서 서버리스 기능 사용을 간소화하며 메이저 데이터베이스 커넥션별로 사용법이 문서화되어 있다.

마이크로낫 개발자들은 개발 협업도 고려하여 프레임워크를 설계하였다. 마이크로낫을 종료하지 않고도 바로 유닛 테스트를 작성할 수 있도록 HttpClient가 프로젝트 내에 구현되어 있다. 이와 같은 테스트는 동적 프레임워크보다 더 간편하면서도 통합적인 테스트가 가능하다는 이점이 있으며 컴파일 시 많은 작업을 처리할 수 있다.

마이크로낫은 클라우드를 이용한 애플리케이션 개발에 국한되어 사용되지는 않는다. 본 프레임워크는 전통 웹 애플리케이션 개발에 필요한 일반적인 기능을 대부분 제공하며 데스크톱도 일부 지원된다. 마이크로낫은 GraalVM과도 연계되어 있어 네이티브 애플리케이션을 제작하기에도 좋다.

2. 쿼커스(Quarkus)
명령형 프로그래밍과 리액티브 프로그래밍을 적절히 혼합하여 사용하고 싶다면, 쿼커스를 고려해 볼 만하다. 쿼커스 제작팀은 클라우드 네이티브를 활용하는 가장 보편적인 사례를 분석하여 이들 사용 사례를 이용하여 프레임워크를 개발하였다. 그 결과 컨테이너를 활용하고 쿠버네티스 클러스터를 활용하는 프레임워크가 탄생하였다.

제작팀은 특히 부팅 시간을 최소화하여 쿠버네티스 클러스터의 확장성을 높였다. 이는 비일상적으로 호출되는 함수에 최적화된 특성으로 함수 호출 시에만 실행되어 전체 효율성을 높인다.

쿼커스 프로젝트는 처음부터 자바에서 흔히 이용되는 라이브러리와 관습을 최대한 수용하여 개발하는 것을 목표로 하였다. 예를 들어, JAX-RS 주석은 REST 엔드포인트를 정의한다. 컨피규레이션도 이클립스 마이크로프로파일(Eclipse MicroProfile)로 시작한다. 제작팀은 또한 50개의 표준 자바 라이브러리를 활용하였기 때문에 자바 유저들은 다자인 패턴이 어느 정도 익숙할 것이다.

쿼커스 프레임워크는 다양하게 버전을 활용할 수 있다. 쿼커스 2.8의 경우 레스티지 리액티브 모델(RESTeasy Reactive model)을 이용하며 새로운 프로젝트를 활용하기 좋은 표준 옵션이다. 레스티지 리액티브는 더 간단하며 논 블록킹(non-blocking) 구조와 패턴을 제공한다. 리퀘스트 하나당 스레드를 부여하는 대신 논 블로킹 스레드 세트가 모든 I/O를 처리하며 코드는 필요할 때에만 호출한다.

쿼커스는 배포 옵션도 다양하게 제공한다. “컨테이너 우선”이긴 하지만 베어 메탈로도 실행 가능하다. 또한 펑키(Funqy)라고 하는 빌트인 구성 옵션도 존재하여 AWS 람다(AWS Lambda), 애저 펑션(Azure Functions), 네이티브(Knative) 함수를 생성하는 과정을 간소화한다.

3. 스프링 클라우드 펑션(Spring Cloud Functions)
스프링 프레임워크는 지난 20년간 다수의 프로젝트를 구성하는 기본 프레임워크였다. 따라서 자바 개발자라면, 매우 친숙할 것이다. 이에, 스프링 개발자들은 새로운 버전을 제작하여 클라우드 적용을 비롯하여 다양한 역할을 할 수 있도록 하였다. 스프링 클라우드 펑션(Spring Cloud Functions)에 존재하는 기능들은 웹 서비스, 스트리밍 프로세싱, 백그라운드 워크 등 다양한 테스크에 쉽게 재적용되도록 설계되었다.

스프링 클라우드 펑션은 스프링에 적용한 철학을 대부분 계승하여 탄생했다. 프레임워크에서 이용 가능한 클라우드 관련 함수들은 명령형이나 리액티브 스타일 둘 다 적용 가능하며, 둘을 섞은 하이브리드도 가능하다.

스프링 클라우드 펑션은 다양한 옵션을 제공할 수 있도록 초점을 두고 설계되었다. 프레임워크의 어댑터를 활용하면 함수를 AWS 람다(AWS Lambda), 마이크로소프트 애저(Microsoft Azure), 아파치 오픈휘스크(Apache OpenWhisk), 구글 클라우드 플랫폼(Google Cloud Platform) 등의 클라우드 환경에서 사용할 수 있다. 또한 아파치 카프카(Apache Kafka), 솔라스(Solace), 래빗MQ(RabbitMQ) 등 스트리밍 프레임워크에 적용 가능한 어댑터가 존재하며, 자체적으로 스프링 클라우드 스트리밍(Spring Cloud Stream)를 이용할 수도 있다. 패키징과 배포 과정은 대부분 자동화되어 있기 때문에 함수 개발에만 집중할 수도 있다.

스프링 클라우드 펑션 개발팀은 클라우드 적용에서 흔히 발생하는 문제점을 보완하기 위하여 노력하였다. 스프링 클라우드 스키퍼(Spring Cloud Skipper)를 이용하면 멀티 클라우드 간 배포가 가능하다. 스프링 클라우드 슬루스(Spring Cloud Sleuth)를 이용하면 데이터 플로우를 추적하여 디버깅할 수 있다. 스프링 클라우드 시큐리티(Spring Cloud Security)는 접근 권한이 있는 사람들만 함수를 실행할 수 있도록 애플리케이션 보안을 적용한다. 이외에도 여러 서브 프로젝트가 존재한다.

스프링 클라우드 펑션은 다양한 플랫폼에 비즈니스 애플리케이션을 배포할 때 활용하기 좋다.

4. 버텍스(Vert.x)
버텍스(Vert.x) 개발팀은 이벤트 루프를 단순화하고 데이터베이스 연결을 최적화하여 속도가 빠른 프레임워크를 개발하고자 하였다. 버텍스는 Node.js처럼 단일 이벤트 루프로 구성되어 있어 이벤트 실행 시 다양한 커넥션을 처리할 수 있다. 자바의 스레딩 모델을 활용하여 다수의 스레드로 구성된 이벤트를 처리할 수 있으며 멀티 코어에서도 실행할 수 있다.

버텍스 구조는 이벤트 스트림을 처리할 수 있는 파이프라인 생성과정을 단순화하도록 설계되었다. 프로미스(promies)나 퓨처(future)와 같은 컨스트럭트를 이용하며, 레이어드 콜백(layered callback) 없이 깔끔한 코드를 작성할 수 있도록 지원한다. 비동기 옵션은 간단한 함수 호출 체인으로 코드를 구성하여 가독성을 높였다.

버텍스 개발팀은 프레임워크의 유연성을 강조하여 설계하여 버텍스를 프레임워크가 아닌 툴키트에 비유하기도 한다. 코드는 모듈화되어 필요한 기능을 선택하여 이용할 수 있어 애플리케이션에 적합한 아키텍쳐를 직접 구성할 수 있다. 명령형 구조를 원하는 개발자들은 코틀린의 코루틴(coroutine) 지원 기능을 이용할 수 있다.

버텍스는 이클립스 생태계의 구성 요소로 필요에 따라 다양한 버전과 옵션을 선택하여 활용 가능하다. 가령 버텍스 애플리케이션 제너레이터(Vert.x application generator)는 템플릿 엔진이나 API 서포트와 같은 다양한 잠재적 종속성을 도입하여 자바 혹은 코틀린 코드를 생성한다.

5. 이클립스 마이크로프로파일(Eclipse MicroProfile)
이클립스 팀은 자카르타 EE(Jakarta EE)를 적용하여 소규모 마이크로서비스 아키텍셔를 실행하기 위하여 마이크로프로파일 프로젝트를 시작하였다. 오버헤드를 줄이면서도 마이크로서비스 아키텍처에 주로 활용되는 라이브러리를 연결하였다.

기존의 자바 EE(Java EE)나 자카르타 EE (Jakarta EE) 프로젝트와 구성과 아키텍처가 비슷하여 이들로부터 코드를 마이그레이션하고자 하는 개발자들에게 적합하다. 개발팀은 비슷한 기조를 유지하면서도 보다 가볍고 빠른 코딩을 지원하기 위하여 디테일을 개선하였다. 일부 개발자들은 다른 클라우드 네이티브 프레임워크를 이용하기 위한 발판으로 마이크로프로파일을 활용하기도 한다.

6. 드롭위저드(Dropwizard)
오래되었으며, 테스트를 통하여 안정성을 확보한 모듈을 이용하는 것을 즐기는 개발자라면 드롭위저드를 선호할 것이다. 드롭위저드 개발팀은 안정성과 성숙성을 개발 목표로 내세운다. 이들은 하이버네이트와 같은 데이터 커넥션 모듈에 다른 표준적인 웹 개발 요소를 적용하여 프레임워크를 설계하였다. 드롭위저드는 컨피규레이션(configuration)이나 로깅(logging) 같은 런타임 유지관리 프로세스나 종속성 삽입 기능을 효율화하였다.

드롭위저드는 기존의 애플리케이션을 보완하고 확장하고자 하는 개발자들에게 적합하다. 프레임워크 자체가 기존의 성숙하고 오래된 프레임워크와 접근법을 기반으로 개발되었기 때문에 안정적으로 호환된다.

7. 초기 단계에서 이용 가능한 클라우드 플랫폼
때로는 복잡한 프레임워크를 사용하지 않고도 클라우드에서 제공하는 기본 예제를 활용하면 충분히 좋은 함수를 작성할 수 있다. 이들 예제들은 개발자들이 쉽게 시작할 수 있도록 기본적인 것들을 지원한다.

가령, 구글 클라우드 플랫폼 개발팀은 서비스형 함수(function-as-a-service, FaaS)인 자바 함수를 위한 기본 프레임워크를 오픈 소스로 제공한다. 이 프레임워크는 구글 클라우드 플랫폼의 표준 트리거와 쉽게 통합될 수 있도록 개발되었으며 다른 로컬 기기에서도 실행 가능하다.

마이크로소프트도 자바를 위한 프레임워크를 오픈 소스로 제공한다. 이 프레임워크는 JSON 데이터를 자바 POJO로 변환하는 라이브러리처럼 데이터를 전송하는 태스크를 간소화하는 기능 등을 제공한다. 함수 트리거가 호출에 의하여 메타데이터를 공급하면 프레임워크는 이를 직접 처리한다.

이 두 프레임워크는 하나의 함수로 이루어진 단일 클래스만으로 여러 단순 태스크를 처리할 수 있도록 한다. 복잡한 프로젝트의 경우에는 이런 기본 툴과 위에 언급한 다른 프레임워크를 같이 활용해야 하겠지만, 간단한 경우에는 이 정도만으로도 충분하다.

[저작권자ⓒ CWN(CHANGE WITH NEWS). 무단전재-재배포 금지]

최신기사

뉴스댓글 >

- 띄어 쓰기를 포함하여 250자 이내로 써주세요.
- 건전한 토론문화를 위해, 타인에게 불쾌감을 주는 욕설/비방/허위/명예훼손/도배 등의 댓글은 표시가 제한됩니다.

댓글 0

Today

Hot Issue