Easy Understanding

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

Java

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

appleg1226 2020. 11. 6. 16:37

요새 자바에 대해서 좋은 정보를 얻을 수 있는 커뮤니티가 어디없나 찾아보다가,

영어로 된 커뮤니티 중 좋은 곳을 찾았습니다.

 

InfoQ라는 곳이고 각종 가이드, 기사, 팟캐스트 등을 이용해서 기술에 대한 자료들을 정리하고 있는 좋은 곳입니다.

이미 이 정도 규모면 아는 사람들은 다 아는 곳일 것 같은 느낌이 들었습니다.

(혹시 이외에도 괜찮은 곳이 있다면 정보 부탁드립니다)

 

InfoQ: Software Development News, Videos & Books

 

www.infoq.com

 

여기에서 본 것 중에 가장 흥미롭고, 한 번 정리해보고 싶은 글이 2020년 10월 29일에 InfoQ에 올라온 다음 글입니다.

www.infoq.com/articles/java-jvm-trends-2020/?topicPageSponsorship=aabffbf6-b3ab-440a-bde5-873b42c3d8ad&itm_source=articles_about_java&itm_medium=link&itm_campaign=java

 

Java InfoQ Trends Report—September 2020

This article provides a summary of how the InfoQ editorial team currently sees the adoption of technology and emerging trends within the Java space in 2020. We focus on Java the language, as well as related languages like Kotlin and Scala, the Java Virtual

www.infoq.com


2020 3분기 기술 트렌드 그래프

다음 그림은 본 리포트에서 정리한 기술 수용 그래프입니다.

왼쪽부터 오른쪽으로 갈수록 성숙한 기술이라고 보시면 됩니다.

기술 수용 그래프로 표현한 JAVA 트렌드(출처: infoQ)

위의 그래프에는 생략되어 있지만 왼쪽부터

Innovators / Early Adopters / Early Majority / Late Majority 의 카테고리로 구분됩니다.


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

1) Java 8

한 Research에 따르면(링크: snyk.io/blog/developers-dont-want-to-leave-java-8-as-64-hold-firm-on-their-preferred-release/) 2019년 자바 사용자들 중에서 가장 많은 비율을 차지하고 있는 것이 자바 버전 8입니다.

 

자바 8은 현재 가장 안정적인 버젼이며, 모던한 자바의 특징을 적당히 지원하고 있는

가장 신뢰성이 있는 버젼이라고 볼 수 있습니다.

 

굳이 다른 버젼으로 바꿔야할 필요성이 없다면, 저는 자바 8을 계속 사용할 것 같습니다.

역시 해당 조사에 의하면, 대부분의 유저들이 높은 버젼의 자바 사용의 필요성을 크게 느끼지는 않는듯 합니다.

 

2) JVM 언어: Clojure, Groovy, Scala

사실 저는 이 언어들의 인기를 느낀 개발자는 아닙니다.

과거 블로그들을 읽어보거나 발표 세션들을 보면 확실히 Scala의 비율이 높았었는데

요새는 정말 찾아보기 힘든 것 같습니다.

 

위의 언어는 자바를 대체하려는 목적들도 있었던 언어들이지만, 결국은 크게 성공하지 못한 것으로 보입니다.

저는 Groovy는 gradle에 쓰는 것 정도만 보았고, 나머지 언어들은 관련된 코드들을 많이는 접하지 못했습니다.

비록 이 언어들은 크게 성공을 거두지 못했지만, 요새 자바를 대체할만한 새로운 언어인 'Ko????' 가 참 핫하죠.

이건 아래에서 설명하겠습니다.

 

3) Spring

스프링은 더 이상 설명할 필요가 있나 싶습니다.

스프링과 더 나아가 스프링부트는 자바 웹 프레임워크의 대부분을 장악하고 있습니다. 

당장은 자바 진영에 크게 이를 뛰어 넘을만한 프레임워크는 없을 것 같습니다.

 

에디터들은 스프링이 이미 많은 사람들이 사용하고 있는 안정화된 기술이라고 평가했습니다.

 

4) Hibernate

Hibernate는 요새 Spring과 함께 붙어서 거의 세트 메뉴가 아닐까 생각이 들 정도로 

스프링 JPA를 사용한다면 웬만하면 Hibernate도 사용한다고 보면 됩니다.

 

Hibernate는 JPA의 구현체로서 그 중에서 가장 유명한 ORM 프레임워크입니다.

외국에선 Hibernate는 이미 많이 사용되고 안정화된 보편적인 기술로 보입니다.

 


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

1) Java 11

위의 자바 8 설명에 나와있는 그래프가 Java 11의 현재 상태를 그대로 말해준다고 생각합니다.

Java 8에 이어서 가장 많은 사람들이 사용하는 Java 버전이 바로 JAVA 11입니다.

 

아무래도 11이 그 다음으로 많이 사용되는 이유는 바로 LTS(Long-Term Support)로

지정되어 있는 버전이기 때문입니다.

Java가 요새는 6개월에 한 번씩 출시를 하는데, 그 중에 11이 8 다음의 LTS 버전입니다.

 

Java 11을 8과 비교해봤을 때 다른 점은 이런 것들이 있습니다.

 

- var를 이용해서 변수 사용 가능

- 내장 httpclient 라이브러리 변화

- 추가된 가비지컬렉션

- 각종 마이너한 문법 변화들

 

사실 8이나 11이나 사용하는 데에 지장은 없기에 어떤 버전을 써야할지 쉽게 선택할 수는 없을 것 같습니다.

 

2) Kotlin (kotlinlang.org/)

 

Kotlin Programming Language

 

kotlinlang.org

최근에 JVM 언어 중에서 Kotlin은 정말 핫합니다.

분명 그 인기의 공에는 안드로이드가 Kotlin을 공식 언어로 채택한 것이 가장 크다고 생각합니다.

 

IntelliJ를 사용하고 있는 입장에서 Kotlin으로의 전환은 그렇게 어렵지 않았습니다.

개발 환경의 변화가 거의 없었기 때문이죠. 

Maven, Gradle을 이용하여 IntelliJ에서 자바 프로젝트를 만드는 것처럼 손쉽게 Kotlin을 개발할 수 있습니다.

 

이처럼 Kotlin은 Java 사용자들이 입문하기에 제일 쉬운 언어일 것입니다.

최근에는 스프링 프레임워크까지 정식으로 지원하여 아주 발을 제대로 넓혔죠.

 

그러나 Kotlin의 꿈은 자바 개발자들을 흡수하는 것보다 원대한 듯 합니다.

Kotlin을 이용해서 Javascript 개발을 할 수도 있고, Native 기술도 제공하고 있습니다.

이런 행보를 보면 코틀린이 이후로 도대체 어떤 분야로 발을 넓히게 될지 감이 안 옵니다.

 

이미 웹개발 또한 Spring을 대체할만한 Ktor라는 프레임워크를 Jetbrains 자체적으로 개발했습니다.

조만간 Kotlin의 날이 올지 안올지 예상은 할 수 없지만, 조금씩 공부하며 적용해보려고 합니다.

(링크: ktor.io/)

 

Ktor: Build Asynchronous Servers and Clients in Kotlin

Build Asynchronous Servers and Clients in Kotlin

ktor.io

 

 

3) Jruby(www.jruby.org/)

 

Home — JRuby.org

The Best of the JVM High performance Real threading Vast array of libraries It's Just Ruby Ruby 2.5 compatible Platform Independent Easy to install Easy migration No hassles

www.jruby.org

루비를 사용하시는 개발자들이라면 아마 들어보셨겠지만, 저는 Jruby는 처음 들어봤습니다.

JVM에서 돌아가는 Ruby로서 Java 코드와 Ruby 코드에서 서로의 Function을 호출할 수 있게 된다고 합니다.

Ruby와 Java를 같이 사용할 일이 있다면 고려해볼 만한 기술인 것 같습니다.

 

요새 언어와 플랫폼을 넘나드는 기술들이 계속해서 나오고 있는 것을 보면서

프로그래밍 언어들의 경계가 앞으로 어떻게 될지 기대가 됩니다.

 

4) OpenJDK/Non-Oracle builds 

아마 이제부턴 기초 Java 수업에서 자바 설치를 교육할 때 Oracle 먼저 검색하라고 하지는 않을 것 같습니다.

Java의 현재 상황은 마치 대해적시대와도 같습니다.

Oracle JDK는 이미 Open JDK와 상황이 반대가 되고 있습니다.

 

출처: https://snyk.io/blog/36-of-developers-switched-from-oracle-jdk-to-an-alternate-openjdk-distribution-over-the-last-year/

 

Oracle에서 만든 JDK는 상업적으로 사용하려면 라이센스비를 지불해야 합니다.

그에 반해서 OpenJDK는 오픈소스 기반으로 무료로 사용할 수 있습니다.

이 OpenJDK는 여러 회사들에서 구현체를 개발하고 있으며, 하나의 버젼에 여러 개의 구현체가 있습니다.

출처: https://snyk.io/blog/36-of-developers-switched-from-oracle-jdk-to-an-alternate-openjdk-distribution-over-the-last-year/

 

위의 그래프를 보면 요새 OpenJDK의 사용은 어디하나 메이저하다고 볼 수 없고

골고루 퍼져있는 것을 보실 수 있습니다.

 

저도 요새는 그냥 Adopt OpenJDK를 사용하고 있습니다.

이후로 자바 구현체는 각자 필요성에 맞게 선택하면 될 것 같습니다.

 

(참고: jsonobject.tistory.com/395)


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

1) MicroProfile

도대체 이건 무엇인가 예측을 해봤지만 틀려버렸습니다.

Micro니까 MicroService일거고, Profile이니까 profile 파일을 나눠서 관리하나보다 라고 생각했지만

전혀 아니었네요.

 

MicroProfile은 의외로 JAVA EE와 관련된 프레임워크입니다.

기존 무거운 JAVA EE 라이브러리들과, JAVA EE에 포함되지 않은 기술들을 엮어서

MicroService에 최적화 되도록 만든 결과물이라고 합니다.

 

아마도 이 페이지를 보면 어떤 느낌인지 바로 이해하실 것이라고 생각합니다.(start.microprofile.io/)

 

Starter | MicroProfile

© 2019 Microprofile. Eclipse MicroProfile is an open source project under the Apache License 2.0. v1.4.0

start.microprofile.io

마치 Spring starter처럼 MicroProfile도 Starter를 이용해서 프로젝트를 쉽게 생성할 수 있습니다.

 

저는 주변에서 JAVA EE를 통해서 개발하는 사람들을 거의 본 적이 없어서 사실 이런게 있는지도 몰랐습니다.

 

2) Jakarta EE 

Jakarta EE는 JAVA EE의 새로운 이름입니다. Java EE는 엔터프라이즈 개발을 위한 자바 버전입니다.

많은 자바 개발자들이 사용하고 있는 Spring이 JAVA EE를 대체하는 기술 중 하나입니다.

 

여전히 JAVA EE는 무겁다는 인식이 크고, 다른 프레임워크에 비해서 인기도 적기 때문에 

JAVA EE에서 이름까지 새롭게 바꿔가면서 혁신을 이루고자 한 것으로 보입니다.

 

실제로 Jakarta EE의 방향성은 클라우드 네이티브에 초점을 맞추고 개발되고 있습니다.

(참고: jsonobject.tistory.com/444)

 

3) Helidon(helidon.io/)

 

Helidon Project

Java libraries crafted for Microservices

helidon.io

Helidon은 Oracle에서 18년에 발표한 웹 프레임워크입니다.

저는 과연 자바에 스프링에 도전하는 새로운 프레임워크가 나올 수 있을까라는 생각을 했었는데

이미 도전은 진행 중이었습니다.

 

Helidon은 가벼움(Lightweight), 빠름(Fast), 마이크로서비스(Crafted for MicroServices)

이 세 개를 중심으로 내걸고 있는 프레임워크입니다.

 

마이크로서비스에 특화되어 있으며 Docker, Kubernetes, Prometheus도 기본으로 지원합니다.

또한 GraalVM도 지원하고 아래와 같은 여러 최신 기술들을 지원하고 있습니다.

정말 요새 어플리케이션을 구성하는 데에 꼭 필요한 것들을 잘 모아놓았다는 느낌이 듭니다.

 

출처: https://helidon.io

 

다만 아직은 Early Adaptors 군에 포함된대로 그렇게 유명하지는 않지만

기술이 성숙함에 따라서 도입할 여지는 있어보이는 기술입니다.

 

4) Quarkus(quarkus.io/)

 

Quarkus - Supersonic Subatomic Java

Quarkus: Supersonic Subatomic Java

quarkus.io

Quarkus는 Red Hat에서 개발한 프레임워크입니다.

이 프레임워크는 애초부터 'Container First' 를 내걸고 있는 프로젝트입니다.

다른 기술들과 마찬가지로 마이크로서비스에 적합한 많은 개발 결과물들 중 하나입니다.

 

Quarkus가 말하는 가장 큰 강점은 빠른 속도입니다.

Helidon과 마찬가지로 GraalVM의 지원을 하며, 적용했을 경우 아래처럼 그 결과 성능이 굉장히 향상됩니다.

아래에 결과에도 나와있지만 속도나 메모리 사용량 차이가 기존 방식들과 비교했을 때

꽤나 차이가 나는 것을 보실 수 있습니다. 

출처: quarkus.io

 

Quarkus의 장점 중 하나는 자체적으로 다른 프레임워크의 문법을 지원하고 있다는 점입니다. 

특히 Spring의 각종 프로젝트들과 같은 문법으로 개발을 진행할 수 있습니다.

Spring Web, Data, Security, Cloud 같은 메이저한 기능들을 똑같이 이용할 수 있기 때문에,

성능을 위해서 스프링에서 넘어가고자 한다면 Quarkus는 큰 러닝 커브 없이 적용할 수도 있을 것 같습니다.

 

이후에 쿠버네티스를 사용하고, 더 나은 성능을 고려할 일이 생긴다면 Quarkus는 좋은 선택이 될 것 같습니다.

 

5) JUnit 5(junit.org/junit5/)

 

JUnit 5

Société Générale Use, Contribute and Attract: learn about Société Générale's open source strategy.

junit.org

Junit은 자바에서 가장 대표적인 테스트 프레임워크입니다.

개발자들 중에 정말 유명한 켄트 백(Kent Beck)을 중심으로 개발된 것이기도 합니다.

 

Junit 5는 업데이트가 이루어진지는 다소 지났지만 여전히 Early Adaptors 군에 분류되고 있습니다.

구글에 검색을 해봐도 아직까지는 4의 문법으로 작성된 코드가 더 많기는 합니다.

 

저는 Springboot starter를 이용해서 만들어진 그대로 사용을 하는데, 

이미 Junit 5 버전이 적용된채로 프로젝트가 생성되기 때문에 저에게는 조금 익숙하기는 합니다.

 

전체적인 틀은 크게 바뀌지 않았지만 세부적인 문법요소가 조금씩 바뀌었습니다.

예를 들면 @Before가 없어지고 @BeforeAll @BeforeEach 로 바뀌었다거나,

@DisplayName을 이용해서 테스트 메서드에 이름을 붙일 수 있는 기능 등이 추가되었습니다.

 

아무래도 많은 사람들이 4에 익숙해져 있고 쉽게 넘어가지는 않는 분위기라고 생각해서

Early Adaptors군에 넣은 것이라고 생각합니다.

 

6) Static compliation(GraalVM, www.graalvm.org/)

 

GraalVM Community

Advanced Tools Debug, monitor, profile, and optimize resource consumption in Java and across multiple languages Learn more →

www.graalvm.org

위에서도 여러 번 나온 GraalVM입니다.

Oracle에서 개발했으며 기존 JDK들과 다른 특징들이 많습니다.

 

GraalVM의 컴파일러는 새로운 JIT 컴파일러를 제공하며

특이하게도 다양한 프로그래밍 언어들의 런타임도 지원합니다. 

또한 GraalVM Native Image 기술을 이용하여 정적 컴파일을 지원하는데, 

이 기술을 이용하면 어플리케이션의 시작 속도를 획기적으로 줄일 수가 있습니다.

 

정리하자면 GraalVM은 JDK 대신 사용하여 여러 프로그래밍 언어를 사용하고,

여러 기반 기술들을 이용하면 이전의 자바들보다 동작 시간을 빠르게 해주고 메모리 사용량을 줄일 수 있다.

고 보시면 될 것 같습니다.

 

위에서 말한 Helidon, Quarkus는 이미 GraalVM을 지원하고 있습니다.

 

자바는 느리다는 편견을 깨기 위한 기술들이 계속 개발이 되고 있는 것을 보니

'자바는 뒤쳐지고 있는 기술이다'라고 걱정하는 사람들은 그 걱정을 조금 더 미뤄도 될 것 같습니다.

 

GraalVM은 현업에서도 조만간 도입을 할만한 기술이라고 생각합니다.

그 전에 공부를 좀 해둬야겠어요.

 


4. Innovators 군

1) JPMS(Java Platform Module System)

'자바 플랫폼 모듈 시스템'은 자바에 모듈을 적용할 수 있도록 하는 기술입니다.

 

사실 JAVA 9에 등장한 기술로서 최신 자바 기술이라고 보기엔 나온지 좀 지난 기술이기는 합니다.

그렇지만 아직까지는 크게 사용되지 않는 기술이라 그런지, 해당 기사에서는 Innovators군에 편성되었습니다.

 

저는 지금까지 모듈화는 maven, gradle 같은 빌드툴에서 지원하는 기술들인줄만 알았는데,

JPMS를 이용하면 자바 자체적으로 모듈의 설정이 가능합니다.

 

패키지처럼 폴더를 나누고 module-info.java 파일을 통해서 모듈을 관리하게 됩니다.

이러한 방법에 대해서 모듈에 대해서 한 권으로 설명한 책이 있을 정도이니 공부는 좀 필요할 것 같습니다.

 

참조: geonyeongkim-development.tistory.com/60,  grokonez.com/java/java-9-module-system

2) Java on ARM

ARM 아키텍쳐는 임베디드 시스템에서 표준으로 사용되고 있습니다.

관련 자료들을 읽어봤는데, ARM 아키텍쳐에서 자바의 쓰임새가 확장될 것이다 라는 것들이 주제인 것 같습니다.

 

아무래도 임베디드 쪽에 대해서는 크게 관련이 있는 분야가 아니라서 이런 것이 있다 정도만 알고 지나가겠습니다.

 

참조: bell-sw.com/java/arm/performance/2019/01/15/the-status-of-java-on-arm/ 

 


결론

최신 트렌드를 관통하는 주제는 확실히 MicroService인 것 같습니다.

요새 Kubernetes를 중심으로 컨테이너 방식의 배포 방식은 업계의 표준이 되어가고 있다는 것이 느껴집니다.

 

특히 Helidon, Quarkus 같은 프레임워크들을 보면 갈아타고 싶다는 생각이 들기도 했습니다만,

앞으로의 생태계 발전을 눈여겨볼 필요가 있을 것 같습니다.