Easy Understanding

2021년 4분기 자바 Trend. 어떤 기술들이 인기 있을까? 본문

Java

2021년 4분기 자바 Trend. 어떤 기술들이 인기 있을까?

appleg1226 2022. 2. 12. 23:52

사실 재작년(2020) 말에 자바에 대한 리포트를 둘러보다가 흥미로운 게 있어서 공부할 겸 정리를 했었다.

 

(https://appleg1226.tistory.com/10?category=891724)

 

2020년 3분기 자바 Trend. 어떤 기술들이 인기 있을까?

요새 자바에 대해서 좋은 정보를 얻을 수 있는 커뮤니티가 어디없나 찾아보다가, 영어로 된 커뮤니티 중 좋은 곳을 찾았습니다. InfoQ라는 곳이고 각종 가이드, 기사, 팟캐스트 등을 이용해서 기

appleg1226.tistory.com

 

마침 2022년 1월에 InfoQ에 같은 주제로 새로운 Report가 올라온 것을 확인하고, 

그 사이에 어떤 점들이 많이 바뀌었을지 궁금해서 쭉 둘러보았다.

 

https://www.infoq.com/articles/java-jvm-trends-2021/?topicPageSponsorship=053253e5-684d-4280-842d-77fee1f5b1a9 

 

Java InfoQ Trends Report—December 2021

This article provides a summary of how the InfoQ Java editorial team and various Java Champions currently see the adoption of technology and emerging trends within the Java and JVM space in 2021.

www.infoq.com

 

이번에도 제프리 무어의 '기술 수용 주기'를 기준으로 정리해 놓은 것을 확인할 수 있었다.

기술 수용 주기로 표현한 2021 JAVA 트렌드(출처: infoQ)

한번 쭉 둘러보면서 이전과 비교도 하고,

어떤 새로운 기술들이 등장했는지, 어떤 것들이 화제인지에 대해서도 조사해보는 시간을 가졌다.

 


1. Late Majority 군(이미 많은 사람들이 사용하는 안정화된 기술들)

1) Java 8,  11

작년만 해도 자바 8은 가장 많이 사용되는 버전이었다.

그 이유는 버전 8이 좋은 버전이어서는 아니었다.

대체할 게 별로 없고, 버전업을 했을 때의 호환성 문제 등 때문에 옮기지 않은 듯하다.

게다가 신뢰하고 사용할 수 있는 LTS 버전이 11밖에 없었는데, 아래를 보면 알겠지만 8이 지원 기간이 더 길다.

(https://www.oracle.com/java/technologies/java-se-support-roadmap.html)

자바의 LTS Support 기간
- Java 8: 2014년 3월 ~ 2030년 12월
- Java 11: 2018년 9월 ~ 2026년 9월
- Java 17: 2021년 9월 ~ 2029년 9월

그래도 최근에는 자바 8과 11의 점유율이 비슷해졌다고 한다.

 

사실 최근에 몇 번 정도 Kotlin에 스프링을 사용해본 적이 있는데 최신 언어라 그런지 사용 경험이 굉장히 좋았다.

 

그렇지만 스프링을 자바 위에서 사용하는 것보다는 고려해야할 것들이 계속 생겨나니 불편하기는 했다.

그래서 Spring Framework 라는 프레임워크를 계속 쓰려면,

Kotlin을 사용하기보다는 Java가 발전하길 기대해야겠다는 생각을 하곤 했다.

 

위 InfoQ의 트렌드 기사를 읽다보면,

자바가 최신 언어들의 패러다임을 받아들이고 빠른 주기로 새로운 버전을 내는 것에 대해서 긍정적으로 생각하는 의견들이 많다.

 

2) Oracle JDK

Oracle의 JDK는 이젠 돈을 내고 써야하는 JDK가 되었다.

그렇지만 이에 대한 쓸만한 Open JDK들이 계속해서 나타나고 있으며, 아래의 계속해서 등장한다.

 

3) Java EE 8

Java EE는 자바 Enterprise Edition의 줄임말인데, 자바의 스펙으로서 많은 자바 어플리케이션들에서 사용되고 있다.

우리가 사용하는 jsp, jpa, servlet과 같은 스펙이 다 여기에 해당한다.

개발할 때 상단의 javax.* 로 시작하는 라이브러리들이 이에 해당한다고 보면 된다.

다만 이것도 조만간 보내줘야 할 날이 오고 있다. 이유는 아래에...

 

4) Groovy(Grails) / Clojure

여전히 같은 JVM 언어로서 안정적으로 사용되고 있는 언어들이다.

작년에 이 위치에 있던 Scala는 여기에서 빠지고 Scala 2와 3로 최신 기술 쪽에 편입되어 있다. 

왜일까..?

 

5) Spring Framework 5 / Spring Boot 2

스프링은 자바에서 가장 안정적인 프레임워크다.

작년엔 따로 버전 표기는 없었는데 이번 트렌드 리포트에서 버전을 표기한 것은,

Innovators 그룹에 있는 Spring 6와 Boot 3 때문인 것으로 보인다.

 

6) Hibernate

위와 더불어 더이상 할 말이 있을까? 

자바에서 여전히 가장 유명한 Data Persistence 기술이다.

다만, 아래의 MicroStream이라는 새로운 데이터 처리 기술의 부상으로, 슬슬 긴장해야 하지 않을까 싶다.

 


2. Early Majority 군(많은 사람들이 사용하지만 대규모 도입은 되지 않은 기술들)

1) Jakarta EE 8

위의 Java EE 8이 이클립스 재단으로 이관되었기 때문에, 명칭이 Jakarta로 바뀐 버전이다.

https://www.samsungsds.com/kr/insights/java_jakarta.html

 

Java EE에서 Jakarta EE로의 전환

Java EE에서 Jakarta EE로의 전환

www.samsungsds.com

스프링 사용자라면 이후 Spring Framework 6와 Spring Boot 3 부터는,

기존 JAVA EE 8에서 Jakarta EE 9으로 바뀐다고 하니 알아두면 좋을 듯하다.

 

2) Quarkus

작년에는 Early Adopters 군에 있던 그 프레임워크다.

https://quarkus.io/

 

Quarkus - Supersonic Subatomic Java

Quarkus: Supersonic Subatomic Java

quarkus.io

 

맨 위에서 그래프에 보면 중간에 'CHASM'이라는 칸이 있는데,

'제품이 시장 진입 초기에서 대중화로 시장에 보급되기 전까지 일시적으로 수요가 정체되거나 후퇴하는 단절 현상'

이라고 한다.

 

즉 대중들의 지지를 얻어 주류로 등장하게 되었다는 것이다.

(InfoQ의 기사 본문에도 이 Quarkus에 대해 응원하고 있는 사람들이 다수 있다.)

 

이게 그렇게까지 대단하고 실제로 많이 인기가 있다니 솔직히 우리나라에서는 체감이 안 되긴 한다.

작년에 리포트를 본 뒤로 지금까지, 그 누구도 이 단어에 대해서 이야기하는 걸 못 들어봤다.

아마 앞으로는 좀 다르려나?

 

솔직히 나도 써보고 싶기는 한데, 이걸 실제로 회사에서 의견으로 낼 수 있는 가능성이 있는 곳이 있을까 싶다.

아마 Spring에서 지원하고 있는 것들에 대해서 확실한 솔루션과 문서들이 나타난다면 그땐 어떨까 생각해 본다.

 

다만 그때가 되어서야 처음 듣는다는 얘기를 듣는 것 보다는, 조금씩 특징을 알아 놓으면 좋을듯.

https://www.baeldung.com/spring-boot-vs-quarkus(Spring과 Quarkus의 성능 비교)

 

3) Kotlin

나는 솔직히 언어만 봤을 때 코틀린은 JVM 최고의 언어가 맞다고 생각한다.

깔끔한 문법, 안정적인 지원, 코루틴, 자바 라이브러리와의 연동 등 참 좋은 점들만 가득한 언어다. 

또한 국내에서는 많은 회사의 팀들이 코틀린으로 넘어간 상태다.

실제로 채용 공고를 보거나 면접 과정에서 이에 대해서 물어봤을 때, 코틀린의 도입이 이미 진행된 곳이 많이 있었다.

 

다만, 스프링과의 통합이 얼마나 Nice하게 이루어질까가 여전히 고민이다.

예를 들면, 정작 데이터를 편하게 다루기 위한 Data Class가 불편하다.

Coroutine도 더 나이스하게 쓰려면 Spring은 손이 많이 간다는 점 등 고민할 것들이 많다.

 

4) Amazon Corretto / Azul Zulu

위의 Oracle JDK에서 이어지는 내용인데,

두 기술 이름들은 모두 OpenJDK의 구현체이다. 

각 기업에서 직접 구현한 것이며, 각 회사의 입맛과 용도에 맞게 구현을 해 놓았다.

둘 다 TCK 인증(https://en.wikipedia.org/wiki/Technology_Compatibility_Kit)이 되었으며,

실제로 회사에서 사용되는 버전들이다.

 


3. Early Adopters 군(특정 유저들에게 사용되면서 발전하고 있는 기술들)

1) MicroProfile / Helidon

지난 리포트 때도 소개되었던 프레임워크들이다.

 

간단하게 정리하자면

'MicroProfile'은 JAVA EE 기반의 웹 프레임워크,

'Helidon'은 Oracle에서 MSA와 클라우드 기반의 개발 환경을 위해 밀고 있는 웹 프레임워크다.

 

위의 Quarkus는 주류가 되었지만 MicroProfile과 Helidon은 아직 CHASM을 넘지는 못한 것 같다.

그러나, 아래도 나오지만 Helidon은 MicroStream을 등에 업었다던데, 과연 더 나아갈 수 있을까 궁금해진다.

 

2) GraalVM(https://www.graalvm.org/)

GraalVM은 여전히 주목할만한 기술이라고 생각은 하고 있지만,

아직은 그 추이를 지켜봐야한다고 생각한다.

관련해서 NHN에서 블로그를 하나 남겼는데(https://meetup.toast.com/posts/273)

 

GraalVM, Spring Native 맛보기 : NHN Cloud Meetup

새로운 JVM인 GraalVM이 성능이 좋고, 클라우드에 친화적이라고 Oracle에서 소개를 하고 있습니다. 트위터에서도 사용 중이라고 하고 있습니다. 공식 홈페이지를 보면 부트 시간 50배 향상, 5배 작은

meetup.toast.com

정리하자면 아직 안정화된 느낌은 아닌듯하다.

그래도 네이티브 파일로 컴파일된다는 건 그냥 왠지 해보고 싶어진다.

 

스프링에서도 시험삼아 파일을 만들어 볼 수는 있는데, 다행히도 문서가 존재한다.

https://docs.spring.io/spring-native/docs/0.11.2/reference/htmlsingle/

 

Spring Native documentation

The GraalVM native image tracing agent allows to intercept reflection, resources or proxy usage on the JVM in order to generate the related native configuration. Spring Native should generate most of this native configuration automatically, but the tracing

docs.spring.io

 

3) Junit 5

이제는 자바 진영에서 표준이 되고 있는 Junit5 다.

엄청나게 많은 것이 바뀐 것이 아녀서, 기존의 4에서 넘어가는 건 문서 몇 번만 보면 가능한 수준이다.

 

작년에도 여기에 있던 것 같은데, 솔직히 이게 아직도 여기라는 건 이해가 안 된다.

주변에는 다들 잘 넘어가서 잘 쓰고 있는 것 같던데....

조만간 올라가지 않을까 싶다.

 

4) Scala 2

Scala는 작년에 분명히 Late Majority에 있었는데 Scala 2는 이 자리에 위치했다.

이번에는 Scala 3도 Innovators에 추가되었다.

Kotlin은 벌써 위에 가 있는데, Scala는 다시 시작하는 것 같은 그래프 상에서의 위치가 인상적이다. 

요새 하둡쓰는 쪽에서 Scala 쓰는 것 말고는, 주변에서 별로 못 본 것 같다.

관련 자료도 적고...

 

5) JHipster(https://www.jhipster.tech/)

 

JHipster - Full Stack Platform for the Modern Developer!

JHipster is a development platform to quickly generate, develop, and deploy modern web applications and microservice architectures. We support many frontend technologies, including Angular, React, and Vue. We even have mobile app support for Ionic and Reac

www.jhipster.tech

 

JHipster는 Spring Initialzr 같은 프로젝트 셋팅 툴이다.

그런데 단순히 Spring만 해주는 게 아니라 더 나아가서,

Spring + FE(React, Vue, Angular) + 각종 DB(RDB, NoSQL) + 유명한 라이브러리들(Swagger 등)

설정까지 지원해주는 만능 이니셜라이저라고 보면 된다.

 

어디까지 다 해주는지 가늠이 안 가는데, 처음 들어가서 제공해주는 기능 풀을 보고 정말 놀랐다.

이런거까지 해놨다고? 라는 생각이 들었는데, 참 신기하다.

 

대충 보니까 관리용 어드민 페이지도 자동으로 만들어지는 듯 하다.

Health Check, Metric, Logging도 되고, 유저, 보안 관리도 되고, 심지어 DB 스키마도 추가할 수 있는 듯하다.

 

한 번 만들어서 놀아보고 싶은 생각이 드는 엄청난 툴인 건 확실하다.

다만, 현업에서 사용하기엔 너무 부담이 큰 것 같아서, 합의가 많이 필요할 것 같다.

소개 영상에 있는 아재도 그렇고, 기술이 그냥 힙스터 그 자체인듯. 

 


4. Innovators 군

1) Java 17+

위의 자바8에 대한 내용에서도 나왔지만, 자바 17은 자바의 가장 최신 버전이자, LTS 버전이다.

솔직히 말해서 자바 8 보다 드라마틱하며 언어적으로 큰 변화가 일어났느냐 하면 그렇지는 않은 것 같다.

좋은 문법 요소들이 추가되고 JVM 성능에도 다양한 변화들이 있었지만, 여전히 자바 8 정도는 아닐 것이다.

 

그래도 이제는 자바 17을 사용하는 것이 맞는 것 같다. 

자바 8은 너무 오래됐고, 자바 11은 자바 8보다 Support 기간도 짦은데 굳이 사용할 필요가 없다.

 

자바 릴리즈가 6개월 주기로 풀려서 그런지는 모르겠지만, 확실한 건 자바가 다시 살아나고 있다는 느낌이 든다.

게다가 17을 써야만 하는 이유는, 새로운 스프링 버전 때문인데 자세한 건 아래에서 이야기하겠다.

 

2) Jakarta EE 9

위의 Jakarta EE 8의 업그레이드 버전이다. 2020년 말에 등장했다.

최신 기술 사양은 아직 포함하지 않으며,

필요없는 것들을 정리하고 새로운 단계로 나아가기 위해 네임스페이스를 변경했다. 

이것도 이제는 익숙해져야 한다. 그 이유는 아래의 기술 때문인데,

 

3) Spring Framework 6 / Spring Boot 3

드디어 스프링과 스프링부트의 새 버전이 등장한다.

다만 많은 소프트웨어들이 큰 결단을 해야할 것 같다는 생각이 든다.

그 이유는 위에서 언급한 두 가지 스펙이 새로운 스프링의 스펙이 되기 때문이다.

 

  • Java 17+ (from Java 8-17 in the Spring Framework 5.3.x line)
  • Jakarta EE 9+ (from Java EE 7-8 in the Spring Framework 5.3.x line)

참고로 위의 스펙은 최소 스펙이다. 무조건 저 버전을 사용해야 한다.

그런데 아마도, 빠른 시일내에 스프링 6로 넘어가는 팀이 많지는 않을 것 같다는 생각이 든다.

자바 8에서 그렇게 오랫동안 남아있던 상황을 겪어봐서 그런 것일까. 

 

앞으로 스프링 세부 스펙이 어떻게 변할지는 모르겠지만,

현재 기준으로 아직 엄청난 변화는 위의 두 가지 밖에는 없어보인다.

(https://github.com/spring-projects/spring-framework/releases)

 

4) Spring Native

Spring Native는 위의 GraalVM 설명에서 문서 링크를 덧붙이기는 했다.

 

하지만 더 제대로 설명하자면,

Spring Native는 Spring Framework를 GraalVM을 통해서 네이티브 이미지로 변환시키는 데에 도움을 준다.

즉, 기존에는 JVM을 설치하고 그 위에서 돌아가야만 했던 스프링 어플리케이션을 단순히 명령어 만으로 실행시키도록 해준다.

$ .spring-application
빌드 후에, 이렇게 실행하면 돌아갈 것이다.

 

이렇게 되면 확실히 JVM에서 구동하는 시간보단 빠르다고 한다.

게다가 AWS Lambda 같은 서버리스 같은 환경에서 특히 강점이 있을 것 같다. 

가볍고 빠르다는 것은 클라우드 네이티브 환경에서 강점이다.

 

결국 이 프로젝트는 GraalVM을 지원하기 위한 모듈이라고 할 수가 있을 것 같은데,

위의 GraalVM에서도 설명되었지만, 아직은 Innovators 그룹에서 그 성장을 지켜봐야 할듯하다.

 

5) Microsoft Build of OpenJDK

마이크로소프트는 Adoptium의 멤버일뿐 아니라, 본인들만의 OpenJDK도 만들어서 배포했다.

마소는 당연히 C# 같은 언어만 사용할 것이고 다른 언어는 좋아하나 싶었는데, 꼭 그렇지도 않은 모양이다.

 

게다가 요새 VS Code에서의 Java의 지원도 강화됐다고 InfoQ 아티클에 써있다.

아직 안 써봤지만, 기능이 점점 강화되면 IntelliJ는 긴장해야할 지도 모른다.

이런 내용을 보면 자바 아직 안 죽었다는 생각이 계속 들긴 한다.

 

6) Eclipse Adoptium

이전의 AdoptOpenJDK는 TCK 인증조차 받지 못했던 JDK였지만,

새로 이클립스 재단으로 넘어간 Adoptium은 이젠 그런건 문제가 없다.

 

아마도 별 특별한 사정이 없으면 이걸 사용하면 되지 않을까 싶긴한데,

위에서 봤다시피, 많은 회사들이 다들 자기들만의 특색있는 JDK를 갖고 있어서 어떤 것이 베스트일까 골라보는 재미가 있을 듯 싶다.

 

정확한 JDK 배포명은 'Temurin' 이다.(https://adoptium.net/)

 

Adoptium

Eclipse Adoptium provides prebuilt OpenJDK binaries from a fully open source set of build scripts and infrastructure. Supported platforms include Linux, macOS, Windows, ARM, Solaris, and AIX.

adoptium.net

다만 기사에서 Adoptium에 대해서 비판한 게 확실히 공감이 됐다.

"Eclipse Temurin is the name of the OpenJDK distribution from Adoptium."

 

요지는 도대체 이름이 뭔지를 모르겠다는 것이다.

뉴비들이 도망가지 않게 브랜드는 확실히 통일하면 어떨까 싶다.

 

7) MicroStream(https://microstream.one/)

 

Home

MicroStream is the Next Generation Java Serialization and Java-Native Persistence & Communication

microstream.one

이것도 주목할만 하다.

하이버네이트에 도전장을 내밀고 있는 기술인데, Helidon과 통합되어 도약을 꿈꾸고 있는 기술이다.

 

JPA와 벤치마크를 비교하면서, 엄청난 성능 수치를 보여주고 있는데 혹하기는 한다.

스프링과의 통합도 백퍼센트는 아니지만 지원된다고 하니,

언젠가 한번 사용해보고 그 사용성에 대해서 평가해볼만 하겠다는 생각이 든다.

물론 실무에서는 적어도 Early Adopters 정도는 넘어가야 설득할 수 있지 않을까 싶긴 하다.

 

8) JPMS(Java Platform Module System)

이에 대해서는 작년에도 정리를 했지만, 여전히 이 자리에 있다.

자바 9에서 등장한 모듈 관련 기술인데, 과연 어떻게 진행될지 궁금하다.

지금은 Gradle로 멀티 모듈 관리를 하고 있는데 딱히 불편한 점이 없어서, 이 방법도 궁금하기는 하다.

 

9) Java on ARM

이것을 작년에는 단순히 임베디드 쪽일 것이라고 생각해서 넘어갔는데, 

지금 보니까 내가 그냥 알못이었다.

 

이미 Java 16부터 ARM 운영체제에 대한 지원이 있었고,

그 중 가장 대표적인 것이 Java 17에서 M1 Mac에 대해서 정식으로 지원된 것이다.(https://openjdk.java.net/jeps/391)

 

JEP 391: macOS/AArch64 Port

JEP 391: macOS/AArch64 Port AuthorsAnton Kozlov, Vladimir KempikOwnerVladimir KempikTypeFeatureScopeJDKStatusClosed / DeliveredRelease17ComponenthotspotDiscussionaarch64 dash port dash dev at openjdk dot java dot netEffortMDurationMDependsJEP 388: Wind

openjdk.java.net

아마 점점 지원되는 범위도 늘어나고 안정화될 듯하다.

 

10) Gluon / JavaFX(https://gluonhq.com/)

Gluon이라는 회사에서 JavaFX에 대한 Support를 진행하고 있는 듯 하다.

JavaFX는 자바로 데스크톱 앱을 만들기 위한 기술셋이다.

 

11) Scala 3

오! Scala 3!

사실 스칼라는 잘 모르지만, 여전히 발전하고 있구나라는 건 알 수 있었다. 

https://docs.scala-lang.org/scala3/new-in-scala3.html

 

New in Scala 3

The exciting new version of Scala 3 brings many improvements and new features. Here we provide you with a quick overview of the most important changes. If you want to dig deeper, there are a few references at your disposal: The Scala 3 Book targets develop

docs.scala-lang.org

 


결론

위의 내용들을 보면서, 과연 어떤 주제가 공통적으로 트렌드를 관통하고 있는가에 대해서 느낀 점을 정리해보았다.

 

1) 대안 웹 프레임워크의 성장

우선 Quarkus가 성장하여 스프링의 턱 밑까지 왔다는 것이 놀라웠다.

개인적으로는 가끔 스프링말고, 다른 건 어떨까 싶은 생각이 들때 토이프로젝트를 한 번 해보고 싶어졌다.

 

2) 오픈소스 자바 진영의 성장

Temurin의 등장, Jakarta EE의 확장, 여기저기서 등장하는 JDK 릴리즈들, 빠른 주기의 자바 업데이트 등

너무 많은 것들이 바뀌고 있다.

이제는 자바 트렌드에 대해서 이전보단 좀 더 민감하게 모니터링할 필요가 있을듯.

 

3) New Spring

이제 스프링에는 새로운 시대가 열린다. 

기능적으로 주목할만한 변화는 없지만 과연 다음 버전은 어떻게 될지,

다들 언제쯤 넘어가게 될지가 궁금해진다.