Virtual Thread의 탄생 배경Java 개발자들은 오랜 기간 동안 병렬 처리 단위로 스레드를 사용했다.스레드는 독립적으로 실행되며 각각의 스택(Stack)을 가지고 있고 프로세스보다 가벼워 컨텍스트 스위칭(Context Switching)이 빠른 장점이 있다. 그러나 자바 스레드는 운영체제(OS) 스레드의 Wrapper로 구현되어 있기 때문에 OS의 스레드보다 많은 수를 가질 수 없다. 게다가 OS 스레드는 비용이 비싸기 때문에 많은 수를 생성하기 힘들다. 문제는 많은 환경에서 Request-per-Thread 구조를 사용하고 있다는 것이다.이는 요청 하나에 스레드 한개가 작업을 진행하는 구조를 뜻한다.스레드 1개당 1MB 사이즈를 차지한다고 했을 때 8GB 메모리 환경에서 약 8000개의 스레드..
새로운 LTS 버전 Java 21의 등장Jrebel의 2023 Java Developer Productivity Report에 따르면 31%는 Java 8을 사용하고, 28%가 Java 11을, 그리고 19%가 다른 버전의 Java를 사용한다고 한다. 이런 상황 속 2023년 9월 19일 새로운 JAVA LTS 버전인 Java 21이 출시되었다. Java의 최신 버전을 적용하는 것은 아직 쉽지 않을지 모르지만 Java 21은 적용을 고려해 볼 만큼 좋은 발전들이 존재한다. Java는 언어의 발전을 위해 JEP(Java development Enhancement Proposal)를 사용해 새로운 기능들을 추가한다.JEP는 말 그대로 JDK를 향상시키기 위한 제안으로 새로운 기능을 Java에 추가할 수 있는..
예외 처리어떤 프로그램을 만들더라도 예외는 발생하기 마련이다.예전부터 이러한 예외처리를 위해 다양한 방법이 생겨났다. 기본적인 if문부터 시작해서 try-catch, throws 등등 예외 처리를 위한 많은 방법이 존재한다. 그러나 수많은 예외를 if문, try-catch 문으로 모두 처리하기에는 코드가 너무 복잡하고 어려워진다. 스프링은 @ExceptionHandler라는 어노테이션으로 매우 편리한 예외 처리 기능을 제공한다. @ExceptionHandler@ExceptionHanlder 어노테이션을 사용하면 컨트롤러(Controller) 계층에서 발생하는 예외를 처리할 수 있다. @RestController@Slf4jpublic class BoardController { @ExceptionHa..