Spring Boot 성능 최적화 6
·
TIL
서버 메모리 · CPU 최적화 (Java 21 GC 튜닝 포함)애플리케이션 성능은 DB나 API 구조뿐 아니라, 서버 내부에서 발생하는 메모리 관리와 GC(Garbage Collection)에도 크게 영향을 받는다.특히 고트래픽 환경에서는 GC 중단 시간(STW)과 메모리 사용량이 시스템 지연의 직접적인 원인이 된다.이 글에서는 Java 21 + Spring Boot 3.x 환경에서 실무적으로 활용 가능한 메모리·CPU 최적화 전략을 정리한다.#Java 21의 GC 기본 이해Java 21에서는 G1 GC가 기본이며, 서버 환경에서는 ZGC도 도입이 활발해지고 있다.두 GC 모두 “Stop The World 시간을 최소화하는 것”을 목표로 한다.G1 GC 특징 (기본값)짧은 STW적당한 메모리 소비대부분의..
Spring Boot 성능 최적화 5
·
TIL
JDK 21 기반 서버 스레드 모델 최적화 (Virtual Thread)Java 21부터 Virtual Thread(가상 스레드)가 정식 기능으로 제공되면서, 서버 애플리케이션의 동시성 모델이 크게 발전했다.Spring Boot 3.x 역시 Virtual Thread 지원을 강화하며, 많은 서비스가 기존의 Platform Thread 기반 구조에서 더 효율적인 스레드 모델로 이동하고 있다.이 글에서는 Virtual Thread의 동작 방식과 Spring Boot에서의 최적화 전략을 정리한다.#기존 Platform Thread 방식의 한계기존 Java 서버는 OS 스레드를 직접 사용하는 Platform Thread 기반이었다.이 구조는 다음과 같은 문제를 가지고 있다:스레드 생성 비용이 비싸다동시 요청 수..
Spring Boot 성능 최적화 4
·
TIL
API 레벨 성능 최적화애플리케이션 성능은 DB나 JPA만으로 결정되지 않는다.네트워크 대역폭, JSON 직렬화, 스레드 모델, 컨트롤러 구조 등 API 레벨에서 발생하는 오버헤드 역시 전체 응답 성능에 큰 영향을 준다.이 글에서는 Spring Boot + Spring MVC 환경을 기준으로, 실전 서비스에서 가장 효과적인 API 레벨 성능 최적화 전략을 정리한다.#JSON 직렬화 성능 최적화대부분의 API는 JSON을 주고받기 때문에 직렬화 비용은 전체 API 속도에 직접적으로 영향을 준다.Spring Boot는 기본적으로 Jackson(ObjectMapper)을 사용하며, 불필요한 옵션을 꺼두는 것만으로도 오버헤드를 줄일 수 있다.불필요한 Jackson 기능 비활성화mapper.disable(Seri..
Spring Boot 성능 최적화 3
·
TIL
캐시(Cache) 기반 성능 최적화애플리케이션 성능 개선에서 가장 큰 효과를 내는 방법 중 하나는 ‘DB를 호출하지 않는 것’이다.캐시는 DB 조회를 대체할 수 있는 가장 강력한 수단이며, 조회 트래픽을 크게 줄여 전체 시스템 안정성을 향상시킨다.이 글에서는 Spring Boot + Redis 환경을 기준으로 캐시 기반 성능 최적화 전략을 정리한다.#왜 캐시가 중요한가?DB 조회는 I/O 기반 작업이기 때문에 네트워크 지연, 디스크 접근, 락(lock) 등이 포함되어 비용이 크다.반면 Redis 같은 인메모리 캐시는 초당 수십만 ~ 수백만 건의 요청을 처리할 수 있다.캐시를 적용하면 얻는 효과DB 부하 감소응답 속도 향상 (ms → μs 수준)트래픽 급증 상황에서도 안정적인 처리총 비용 절감 (RDS 스..
Spring Boot 성능 최적화 2
·
TIL
JPA 자체 성능 최적화JPA는 개발 생산성이 높지만 내부 동작을 이해하지 못하면 성능 문제를 일으키기 쉽다.이 글에서는 Spring Boot + JPA 환경에서 실무적으로 자주 활용되는 JPA 자체 성능 최적화 전략들을 정리한다.#영속성 컨텍스트(Persistence Context) 이해하기영속성 컨텍스트는 JPA의 핵심이며 성능 최적화와 직접 관련된다.영속성 컨텍스트가 수행하는 기능은 다음과 같다.1차 캐시 관리동일성 보장변경 감지(Dirty Checking)flush 시점 관리문제가 생기는 이유조회한 모든 엔티티가 캐시에 보관되며, 변경 감지를 위해 스냅샷이 유지되기 때문이다.대량 조회 시 메모리를 크게 소모하고 flush 시점마다 모든 엔티티를 비교하게 된다.최적화 전략단순 조회는 DTO로 조회읽..
Spring Boot 성능 최적화 1
·
TIL
DB 조회 성능 최적화DB 조회 성능은 대부분의 서버 애플리케이션에서 가장 중요한 최적화 포인트다.API 응답이 느린 원인의 상당수가 DB 접근에 있기 때문에, 조회 성능을 개선하는 것만으로도 전체 서비스의 체감 속도를 크게 끌어올릴 수 있다.이 글에서는 Spring Boot + JPA + MySQL 환경을 기준으로 실전에서 많이 사용하는 DB 조회 성능 최적화 방법들을 정리한다.#인덱스(Index) 설계인덱스는 조회 성능 최적화의 가장 기본적이면서도 가장 효과적인 방법이다.DB가 특정 조건을 빠르게 찾기 위해 사용하는 정렬된 자료구조라고 이해하면 된다.언제 인덱스를 사용해야 할까?WHERE 조건으로 자주 조회하는 컬럼ORDER BY / GROUP BY에 자주 사용되는 컬럼조인에 사용되는 외래키 컬럼날짜..
10/24
·
TIL
Redis Pub/SubRedis Pub/Sub 구조는 실시간 알림 시스템, 채팅, 비동기 이벤트 처리 등에 널리 쓰이는 핵심 기술이다.이번 글에서는 Pub/Sub의 개념부터 Redis를 활용한 실제 예시까지 정리해봤다.1. Pub/Sub이란? (Publish / Subscribe의 개념)Pub/Sub(Publish/Subscribe)은 ‘발행/구독’ 모델로 불리는 비동기 메시지 전달 구조다.일반적인 요청-응답 구조와 달리, 이벤트를 발행(Publish)하면 구독(Subscribe) 중인 모든 서비스나 모듈이 실시간으로 메시지를 전달받는 구조를 가진다.즉, 발행자는 수신자가 누구인지 몰라도 메시지를 보낼 수 있고, 수신자는 발행자의 상태에 상관없이 메시지를 받을 수 있다.2. Redis Pub/Sub의 ..
10/23
·
TIL
Spring REST Docs로 API 문서 자동화하기이번에는 Spring REST Docs를 활용해서 기존 컨트롤러 테스트에 API 문서화를 추가해봤다.테스트 기반으로 문서를 자동 생성해주는 도구라, 문서와 실제 코드가 따로 놀지 않게 만들어주는 것이 아주 큰 장점이다.기존 테스트에 REST Docs 적용사실 처음엔 어떤 결과물이 나오는지 전혀 감이 없었는데 적용해보니,테스트를 실행하면서 동시에 문서가 만들어지는 구조라 API 명세서를 따로 관리할 필요가 없다는 점이 꽤 매력적이었다.예를 들어 `AuthControllerTest` 같은 기존 테스트 클래스에 아래처럼 `restDocs.document()` 구문을 추가해주면,테스트 결과를 기반으로 자동으로 `.adoc` 파일이 생성된다..andDo(res..
10/20
·
TIL
AOP로 사용자 검증을 처리하는 이유와 전략JWT 기반 인증 시스템에서는 클라이언트가 토큰을 보관하고 요청마다 서버에 전달한다.하지만 토큰이 유효하다고 해서 무조건 신뢰할 수 있는 건 아니다. 다음과 같은 이유 때문이다.토큰이 위조되거나 탈취됐을 수 있고, 탈퇴한 유저일 수도 있다. 또 토큰의 userId가 실제 DB와 불일치할 수 있다.즉, 로그인 이후에도 사용자 검증이 필요함을 느꼈다.필터 vs AOP 사용자 검증은 어디서 처리해야 할까?필터 방식 JWT 인증 필터에서 토큰을 파싱하고 SecurityContext에 인증 정보를 설정하는 방식이다.모든 요청에 일괄적으로 적용이 가능하다는 큰 장점이 있었지만, 필터에서 userId로 UserRepository를 직접 조회하는 방식은 구조적으로 어색하기도 ..
10/19
·
TIL
Today I LearnedREST API를 구축하면서 가장 중요한 작업 중 하나는 API 문서를 작성하는 것이다.하지만 문서를 수동으로 작성하면 번거롭고, 실제 API와 불일치할 가능성도 높다.이런 문제를 해결하기 위한 방법 중 하나가 바로 Spring Rest Docs다.Spring Rest Docs란?Spring Rest Docs는 Spring MVC 기반 애플리케이션을 위한 API 문서화를 자동화하는 라이브러리이다.테스트 코드와 연동되어 API의 입력/출력을 기반으로 문서 스니펫을 생성하며,항상 최신 상태의 문서를 유지할 수 있다는 점이 가장 큰 장점이다. 주요 특징테스트 코드 기반 문서화: 테스트가 성공해야 문서가 생성된다.Asciidoctor 형식 사용: `.adoc` 문서를 HTML/PDF로..