1. 언제 추상 클래스(Abstract Class) 또는 인터페이스(Interface)를 사용해야 하는가? [ 인터페이스와 추상 클래스의 특징 ] 인터페이스 인터페이스(Interface)는 상호 작용 방식을 명세해둔 것이다. 인터페이스의 호출자는 인터페이스의 구현에 대한 지식 없이도 원하는 기능을 수행할 수 있어야 한다. 예를 들어 우리는 자동차가 어떻게 움직이는지 세부 구현을 모르지만, 엑셀을 밟으면 앞으로 가고 브레이크를 밟으면 멈춘다는 약속을 통해 자동차를 운전할 수 있다. 따라서 인터페이스는 일종의 계약(contract)이라고도 불린다. 추상 클래스 추상 클래스(Abstract Class)는 인터페이스와 유사하다. 인터페이스와 마찬가지로 인스턴스화 할 수 없으며, 구현을 포함하거나 포함하지 않은 ..

1. JVM의 체크포인트 생성과 복구를 위한 CRaC 프로젝트 [ CRaC 프로젝트란? ] CRaC(Coordinated Restore at Checkpoint) 프로젝트는 실행 중인 Java 인스턴스에 체크포인트(이미지 혹은 스냅샷의 생성)를 생성하고 복구하는 방법을 연구한다. 이 프로젝트의 주요 목표는 자바 프로그램에 체크포인트 생성과 복구를 알리는 새로운 표준이 되는 독립적인 API를 개발하는 것이다. CRaC은 Azul Systems에서 개발하였으며 AWS Lambda에서 지원했던 기능으로, 현재는 OpenJDK 프로젝트이다. 이는 리눅스(Linux)에서 체크포인트/복원 기능을 구현한 CRIU 프로젝트를 기반으로 하며, 자바 애플리케이션에 맞게 몇 가지 개선 및 조정 사항이 추가되었다.이를 통해 ..

1. 가상 스레드의 도입 배경 [ 기존 자바 스레드 모델의 문제와 한계 ] 자바 개발자들은 약 30년 동안 서버 애플리케이션의 동시성 처리를 위해 스레드를 사용해왔다. 대표적으로 스프링 프레임워크는 멀티 스레드 모델을 사용하고 있으며, 1개의 요청을 1개의 스레드가 처리하는 thread-per-request 방식으로 동작하고 있다. 따라서 동시 요청이 많다면 스레드의 수 역시 증가해야만 이에 대응할 수 있다. 하지만 기존 JDK의 스레드는 운영 체제(OS) 스레드의 Wrapper이기 때문에, 사용 가능한 스레드의 수가 하드웨어 수준보다 훨씬 적게 제한되어 있었다. OS 스레드는 비용이 높아 요청량에 비례하여 늘릴 수 없기 때문이다. 가질 수 있는 스레드의 양은 제한적인데, 자바 스레드는 OS 스레드의 W..

자바 21이 2023년 9월 19일에 정식으로 출시되었습니다. 자바 17을 이을 차기 LTS 버전인 만큼 중요하기 때문에, 새롭게 추가되는 기능들에 대해 자세하 살펴보도록 하겠습니다. 1. Java 21의 등장 [ Java 21의 등장 ] 오라클의 Java Platform Group의 Chief 아키텍트인 Mark Reinhold가 JDK 17을 이을 차기 LTS(Long-Term Support) 버전인 JDK 21이 초기 배포 후보 단계(initial release candidate phase)에 도달했음을 발표했다. 예정된 일정에 따라 JDK 21은 2023년 9월 19일에 정식으로 출시되었다. JDK 21은 15개의 신규 기능으로 구성된 신규 기능으로 구성되며, 이들은 총 4개의 카테고리로 구분할 ..

이번에는 GraalVM이 제공하는 네이티브 이미지(Native Image)에 대해 알아보도록 하겠습니다. 1. GraalVM의 AoT 컴파일러(Ahead-of-Time 컴파일러) [ GraalVM이 제공하는 새로운 기술 ] GraalVM은 자바와 다른 JVM 언어들로 작성된 애플리케이션의 실행을 가속화하는 동시에 JavaScript, Python 등과 같은 런타임을 제공하도록 설계된 고성능 JDK이다. GraalVM의 다국어 기능을 사용하면 단일 애플리케이션에서 여러 프로그래밍 언어를 혼합하는 동시에 다른 언어를 호출하는 비용을 제거할 수 있다. GraalVM은 자바 애플리케이션을 실행할 수 있는 두 가지 방법을 제공한다. JIT(just-in-time) 컴파일러를 이용해 런타임 중에 컴파일 및 최적화 ..