Java 21을 시작해보자

한승남·2025년 1월 18일
0

BackEnd

목록 보기
4/4
post-thumbnail

웹 POS 시스템 개발 팀 프로젝트를 시작하기에 앞서

신규 팀 프로젝트에서 JDK 21을 활용해보자고 했다

왜...?

JDK 21에 경량 스레드 모델 Virtual Thread가 정식 Feature이 되었기 때문이다!

그런데

??? : Virtual Thread가 뭐에요?
??? : 우리 프로젝트에 어디에 사용하면 좋아요?

그러게요? 공부해봅시다!

Java 21 공부 시작!

Virtual Thread란?

기존 자바는... Platform Thread

하나의 스레드 처리
Java에서 스레드 쓴다는 것은 OS Thread를 사용한다는 것

  • 각 스레드마다 대량 메모리를 처지한다
  • Thread 최대 가용 개수는 OS에서 생성할 수 있는 최대 Thread 개수를 초과 할 수 없다

Virtual Thread를 통해 High Concurrency(동시성)을 높인다

  • 1:1 -> N:1 또는 M:N 방식 매핑

  • 블로킹 I/O(예: DB 쿼리, HTTP 호출) 상황에서 커널 스레드가 대기하지 않고, 가상 스레드만 ‘park’되어 다른 Virtual Thread가 CPU를 쓸수 있게 한다.

  • Virtual Thread로 스택 메모리를 필요 시점에만 할당/해제

  • JVM 내부 스케줄러가 관리함에 동시연결이 수만개 달해도 상대적으로 부드럽게 처리

우리 프로젝트에서는 POS/ERP 등 I/O 중심 서비스에 다중 요청을 동시에 처리해야 하는 상황 이 많을 예정이다.
여기서 성능 이점을 확보

하지만

“중소 규모” 트래픽만 예상한다면, 기존의 스레드 풀 모델(예: 200~300개 정도)도 크게 문제없이 돌아간다.

즉, 프로젝트 규모가 그리 크지 않다면 “Virtual Thread의 성능 이점”이 체감되지는 않을 것

다만, 학습 목적으로 Virtual Thread를 경험해보자!

주의점

프레임워크 호환성

  • Spring Boot 3.4.x 버전을 사용하면서 서블릿 컨테이너와 서드파티 라이브러리 호환성을 체크할 필요가 있다

No Pooling

Virtual Thread는 생성비용이 작기 때문에 스레드 풀을 만드는 행위 자체가 낭비다
그렇기에 필요할 때마다 생성하고 GC가 소멸하도록 방치해버리는게 좋다

Avoid Pinning

Virtual thread 내에서 synchronizedparallelStream 혹은 네이티브 메서드를 쓰면 virtual thread가 carrier thread에 park 될 수 없는 상태가 되어버린다
-> 이를 Pinned(고정된) 상태, 이는 예상한 virtual thread의 성능저하를 유발할 수 있다.

Thread Local

Virtual Thread는 수시로 생성되고 소멸되며 스위칭된다. 그렇기에 항상 크기를 작게 유지하자

참고 자료

우아한 기술블로그, Java의 미래, Virtual Thread
카카오페이 테크, Virtual Thread에 봄(Spring)은 왔는가

profile
오미자를 좋아하는 개발자

0개의 댓글