우당탕탕

[Spring] Spring Boot 가상 스레드(Virtual Threads) 적용하기 1편 본문

Tech/Spring

[Spring] Spring Boot 가상 스레드(Virtual Threads) 적용하기 1편

모찌모찝 2025. 12. 31. 08:24
Spring Boot 가상 스레드(Virtual Threads) 적용하기 1편

 

안녕하세요! 이번에는 Java 21+의 가상 스레드(Virtual Threads)를 Spring Boot에 적용해 고성능 서버를 만들어 보겠습니다. 가상 스레드는 기존 플랫폼 보다 동시성을 활용하여 성능에 이점이 존재합니다.

Java 21 Virtual Threads 출처: Azul Systems

목표

가상 스레드로 Spring Boot 성능 최적화.
- Spring Boot 3.2+ + Java 21 프로젝트 생성
- application.properties 한 줄 설정
- 동시 요청 벤치마킹으로 효과 확인

MSA나 실시간 서비스에 딱!

1. 프로젝트 생성

https://start.spring.io 접속 후 아래와 같이 설정:

Project: Gradle - Groovy
Language: Java
Spring Boot: 4.0.1
Group: com.example
Artifact: virtualthread
Java: 21
Dependencies: Spring Web 추가

IntelliJ에서 열고 Gradle 새로고침 (코끼리 클릭). 오류 시 Java 21 SDK 설정하세요.

2. 가상 스레드 활성화

src/main/resources/application.properties에 아래 한 줄 추가:
<< spring.threads.virtual.enabled=true >>

이 한 줄로 Tomcat/Netty자동으로 별도 코드 변경 없이 가상 스레드를 사용하게 됩니다.

3. 테스트 컨트롤러 생성

src/main/java/com/example/virtualthread에 TestController.java:

package com.example.virtualthread;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;

@RestController
public class TestController {
    
    @GetMapping("/thread-test")
    public String testThread() throws InterruptedException {
        // 2초 지연 시뮬레이션 (블로킹 IO)
        Thread.sleep(2000);
        return "Virtual Thread ID: " + Thread.currentThread() + 
               " | Time: " + LocalDateTime.now();
    }
}

서버 실행 (http://localhost:8080/thread-test)

4. 성능 테스트 (Apache Bench 추천)

Apache Bench 설치 -> https://mozzi-devlog.tistory.com/115

터미널에서 100 동시 요청:

ab -n 1000 -c 100 http://localhost:8080/thread-test/

기존 스레드: 스레드 풀 고갈로 무한 대기 상태 지속
가상 스레드: 모두 병렬로 즉시처리 가능

이로써 Spring Boot 가상 스레드 기본설정이 완료되었습니다. 한 줄의 추가로 동시 처리 성능이 획기적으로 향상된 걸 느끼실 수 있을 겁니다. 실제 프로젝트나 고트래픽 서비스에 바로 적용해 보시면 바로 와닿을 것 같습니다 ㅎㅎ. 다음 편에서는 @Async 통합과 JMeter 벤치마킹으로 좀 더 깊게 파보도록 하겠습니다.

Comments