스프링 MVC(Spring MVC) 성능, 가상 스레드로 50% UP!
스프링 프레임워크(Spring Framework) 7.0.6 버전으로 업그레이드하고, 스프링 부트(Spring Boot) 애플리케이션에서 가상 스레드(Virtual Threads)를 활성화하여 처리량(Throughput)을 최대 50% 향상시킴
@Transactional 어노테이션(Annotation)을 활용하여 읽기 전용(Read-only) 작업에 불필요한 트랜잭션 관리 오버헤드(Transaction Management Overhead)를 제거하여 성능 개선
HTTP 헤더(HTTP Header) 최적화 및 스프링 프레임워크(Spring Framework) 7.0.6 버전의 추가 최적화를 통해 전반적인 처리량(Throughput) 향상을 달성
데이터 세트 크기(Data Set Size)에 따른 성능 변화를 분석하여 확장성(Scalability) 및 효율성(Efficiency)에 대한 심층적인 통찰력을 제공
가상 스레드(Virtual Threads)를 활용한 성능 개선
본문에서는 스프링 부트(Spring Boot) 애플리케이션에서 가상 스레드(Virtual Threads)를 활성화하여 처리량(Throughput)을 크게 향상시켰다고 설명한다. 가상 스레드는 JVM(Java Virtual Machine) 레벨에서 관리되므로, OS 스레드(OS Thread)보다 가볍고 컨텍스트 스위칭(Context Switching) 비용이 적다.
스프링 프레임워크(Spring Framework) 7.0.6 버전부터 가상 스레드를 지원하며, 이를 통해 작업 처리 효율(Work Processing Efficiency)을 극대화
가상 스레드는 I/O(Input/Output) 작업 시 블로킹(Blocking)되지 않고 다른 작업을 수행하여 전반적인 응답성(Responsiveness) 향상
실제 벤치마크 결과, 작은 데이터 세트(Data Set)에서 처리량(Throughput)이 최대 50%까지 증가
가상 스레드는 CPU 바운드(CPU-bound) 작업보다는 I/O 바운드(I/O-bound) 작업에 더욱 효과적이며, 스프링 MVC(Spring MVC) 애플리케이션의 성능을 향상시키는 데 기여한다.
트랜잭션 관리 오버헤드(Transaction Management Overhead) 제거
글에서는 읽기 전용(Read-only) 작업에 불필요한 트랜잭션 관리 오버헤드(Transaction Management Overhead)를 제거하여 성능을 개선하는 방법을 제시한다. @Transactional(propagation = SUPPORTS, readOnly = true) 어노테이션(Annotation)을 사용하여 읽기 전용 메서드(Method)에 트랜잭션(Transaction) 설정을 최적화한다.
불필요한 트랜잭션(Transaction) 시작 및 종료를 방지하여 CPU 사이클(CPU Cycle) 낭비 최소화
특히 작은 데이터 세트(Data Set)에서 베이스라인 오버헤드(Baseline Overhead)가 줄어들어 성능 향상 체감
주의사항: 모든 애플리케이션(Application) 및 엔드포인트(Endpoint)에 적용하기보다는 읽기 전용 작업에 한정하여 사용
이러한 최적화는 데이터베이스(Database) 접근 빈도가 높은 애플리케이션(Application)에서 특히 효과적이며, 전반적인 응답 시간(Response Time)을 단축시킨다.
HTTP 헤더(HTTP Header) 최적화 및 스프링 프레임워크(Spring Framework) 7.0.6
스프링 프레임워크(Spring Framework) 7.0.6 버전에는 HTTP 헤더(HTTP Header) 최적화 및 기타 성능 개선 사항이 포함되어 있다. 이는 HTTP 요청 처리 효율(HTTP Request Processing Efficiency)을 향상시키는 데 기여한다.
HTTP 헤더(HTTP Header)를 보다 효율적으로 처리하여 네트워크(Network) 오버헤드 감소
스프링 프레임워크(Spring Framework) 내부의 다양한 최적화를 통해 전반적인 처리량(Throughput) 증가
벤치마크 결과, 모든 데이터 세트(Data Set) 크기에서 처리량(Throughput)이 소폭 증가
이러한 최적화는 서버(Server)의 자원 사용량(Resource Usage)을 줄이고, 더 많은 요청(Request)을 처리할 수 있도록 돕는다.
데이터 세트 크기(Data Set Size)에 따른 성능 분석
본문에서는 데이터 세트 크기(Data Set Size)에 따른 성능 변화를 분석하여 확장성(Scalability) 및 효율성(Efficiency)에 대한 통찰력을 제공한다. 사이클 시간(Cycle Time)과 처리량(Throughput) 간의 관계를 선형 회귀 분석(Linear Regression Analysis)을 통해 파악한다.
사이클 시간(Cycle Time) = A + B * N 공식을 통해 프레임워크(Framework) 오버헤드(Overhead)와 데이터 처리 시간(Data Processing Time) 분리
A는 고정 오버헤드(Fixed Overhead), B는 데이터 항목(Data Item)당 처리 시간, N은 데이터 세트 크기(Data Set Size)
작은 데이터 세트(Data Set)에서는 프레임워크(Framework) 오버헤드(Overhead)가, 큰 데이터 세트(Data Set)에서는 데이터 처리 시간이 성능에 더 큰 영향
이러한 분석을 통해 애플리케이션(Application)의 성능 병목 지점(Performance Bottleneck)을 파악하고, 최적화 전략을 수립할 수 있다.