
JVM의 1장의 주제는 JVM의 역사를 시작부터 차근차근 설명해주면서 JVM이 어떤 배경으로 발전을 해왔는지 어떤 문제를 해결하려고 했는지 등을 소개해주면서 회사와 단체와의 갈등, 오픈소스 커뮤니티와 회사와의 갈등 사례들을 소개해주면서 JVM이 생각보다 안정적으로 발전해온 것이 아니라 여러 고난과 혼돈 속에서 만들어진 기술이라는 것을 알 수 있었던 챕터였습니다.
자바의 버전의 역사의 변곡점
1. 성능의 혁명: Java 1.3 (HotSpot VM 기본 탑재)
- 핵심: JIT 컴파일러(HotSpot) 도입
- "자바는 느리다"는 꼬리표를 떼고, C++에 준하는 성능을 확보하여 기업용 서버 시장을 장악하기 시작한 시점입니다.
JIT 컴파일러가 가진 강점
- 핫스팟(중요): 모든 언어를 기계어로 바꾸는 건 비효율적이기 때문에 런타임에서 자주 사용되는 영역만 최적화를 진행
- 네이티브 코드 변환: 핫스팟으로 지정된 코드를 기계어로 바꾼 뒤 캐시에 저장하여 번역 비용을 아낌
- 메서드 인라인: 메서드에 있는 코드를 가져와서 호출하는 코드 쪽에 붙여넣음, 메서드를 왔다갔다하는 비용을 아끼기 위함
- 루프 펼치기: 루프의 조건을 점프하여 반복횟수를 줄임
- 데드코드 제거: 절대 호출될 수 없는 코드를 제거하여 실행 비용을 줄임
2. 생산성의 혁명: Java 5 (언어의 성숙)
- 핵심: 제네릭(Generics), 어노테이션(Annotation)
- 타입 안정성을 확보하고, XML 설정 지옥을 탈출하게 해 주었습니다. 스프링(Spring)과 같은 거대 프레임워크가 발전할 수 있는 토대가 되었습니다.
3. 패러다임의 혁명: Java 8 (현대화)
- 핵심: 람다(Lambda), 스트림(Stream)
- 객체지향에 함수형 프로그래밍을 접목했습니다. 코드가 간결해지고 데이터 처리가 강력해지며, 자바 수명을 10년 이상 연장시킨 최대 업데이트입니다.
4. 동시성의 혁명: Java 21 (미래 경쟁력)
- 핵심: 가상 스레드(Virtual Threads)
- 기존 스레드 모델의 한계를 돌파했습니다. 복잡한 비동기 코드(Reactive) 없이도 적은 리소스로 막대한 트래픽을 처리할 수 있게 되었습니다.
이전에는 스레드 하나가 운영체제 스레드와 1:1로 연결되어 비용이 매우 비쌌기 때문에, 동시에 처리할 수 있는 요청 수에 물리적인 한계(메모리 부족 등)가 있었습니다.
하지만 가상 스레드는 수천, 수만 개의 가상 스레드를 적은 수의 실제 스레드(Carrier Thread) 위에서 가볍게 교체하며 실행할 수 있어, 하드웨어 리소스를 극한으로 효율적으로 사용하게 되었습니다."
JVM 시장의 최근 횡보
오라클에 인수 된 뒤에 JVM은 좀 더 폴리글랏한 환경에서 운영될 수 있도록 그랄 컴파일러와 같이 다른 언어도 지원해줄 수 있는 컴파일러를 만들고 있습니다. 그리고 웜업을 하던 과거와 다르게 임베디드, 클라우드 환경에서도 경량화된 형태로 활용할 수 있도록 정적 이미지 기술을 활용하여 최근에는 AI를 위해 GPU와 NPU에도 자바 코드를 사용할 수 있도록 하도록 기능을 제공하고 있습니다.
이전에 JVM은 무겁다는 말과 자바는 정적이다. 라는 말이 어색하게 들릴 정도로 JVM은 IT 트렌드에 맞춰 유연하고 빠르게 변화하고 있다는 것을 알 수 있었습니다. 최근에 자바스크립트와 파이썬이 사용 순위로 자바를 추월하면서 빠르게 발전하고 있지만 엔터프라이즈급 시스템을 운영할 때에는 JVM 계열의 언어들이 강점을 발휘하고 있고 꾸준히 다른 생태계에서도 활용될 수 있도록 발전하고 있기 때문에 쉽게 시장에서는 없어지지 않을 것 입니다.
'JAVA' 카테고리의 다른 글
| 자바(JAVA)에서 정확한 실수 처리하는 방법 (0) | 2022.03.05 |
|---|