Spring Boot 성능 최적화 4

2025. 10. 29. 21:15·TIL

API 레벨 성능 최적화

애플리케이션 성능은 DB나 JPA만으로 결정되지 않는다.
네트워크 대역폭, JSON 직렬화, 스레드 모델, 컨트롤러 구조 등 API 레벨에서 발생하는 오버헤드 역시 전체 응답 성능에 큰 영향을 준다.
이 글에서는 Spring Boot + Spring MVC 환경을 기준으로, 실전 서비스에서 가장 효과적인 API 레벨 성능 최적화 전략을 정리한다.


#JSON 직렬화 성능 최적화

대부분의 API는 JSON을 주고받기 때문에 직렬화 비용은 전체 API 속도에 직접적으로 영향을 준다.
Spring Boot는 기본적으로 Jackson(ObjectMapper)을 사용하며, 불필요한 옵션을 꺼두는 것만으로도 오버헤드를 줄일 수 있다.

불필요한 Jackson 기능 비활성화

mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

네이밍 전략 단순화

프론트엔드가 camelCase를 사용한다면 snake_case 변환을 끄는 것이 직렬화 비용을 줄이는 데 유리하다.
(최근 FE 트렌드 기준, camelCase가 더 일반적이다.)

JSON 라이브러리 선택

  • Jackson → 표준, 대부분의 프로젝트는 그대로 사용
  • Jsoniter → 초고성능 API에서만 고려

대부분의 서비스는 Jackson 설정 최적화로 충분하다.


#불필요한 객체 생성 줄이기

API 응답 구조가 클수록 객체 생성 비용도 커진다.
DTO를 불변 구조로 만들면 성능과 가비지 비용을 크게 줄일 수 있다.

Java record 활용

public record UserResponse(Long id, String name) {}

record는 직렬화 속도 향상, 스레드 안전성 향상, 가비지 생성 최소화 등 API 성능에 유리하다.


#API 응답 축소(Over-fetching 방지)

필요 이상으로 큰 JSON 응답을 내려보내면 직렬화 비용, 네트워크 비용, FE 렌더링까지 모두 느려진다.
서비스 성능 개선에서 “응답 줄이기”는 효과가 매우 크다.

최적화 전략

  • DTO Projection으로 필요한 데이터만 반환
  • 대형 List는 반드시 페이징 처리
  • 중첩 구조를 줄이고 단순한 응답 구조 만들기
  • 프론트 요청 파라미터 검증하여 불필요 필드 제거

#API 캐싱 적용

DB 튜닝보다 더 큰 효과를 내는 방법은 “DB를 아예 호출하지 않는 것”이다.
API 레벨에서도 캐싱을 활용하면 많은 트래픽을 효율적으로 처리할 수 있다.

1) 컨트롤러 레벨 캐싱

@Cacheable(value = "match", key = "#id")
public MatchDto getMatch(Long id) {
    ...
}

2) CDN 캐싱

정적 리소스뿐 아니라, 자주 조회되는 상품/게시글/랭킹 데이터는 CDN 캐싱을 적용하면 백엔드 서버 부담이 크게 줄어든다.
CloudFront + API Gateway 조합이 대규모 서비스에서 많이 사용된다.


#HTTP Keep-Alive와 압축(Gzip/Brotli)

Spring Boot 3.x에서는 HTTP/2 기반 전송이 기본적으로 빠르고 효율적이다.
압축 설정을 켜면 JSON 응답 크기가 큰 API에서도 전송 시간을 줄일 수 있다.

Spring Boot 압축 설정

server:
  compression:
    enabled: true
    mime-types: application/json,application/xml,text/html,text/xml
    min-response-size: 1024

#필터·인터셉터·어드바이스 최적화

API 요청 흐름에서 필터나 인터셉터는 가장 먼저 실행되기 때문에 병목이 되기 쉽다.
잘못 구성된 인증/로그 필터 하나만으로도 API 전체 성능이 저하될 수 있다.

최적화 포인트

  • 불필요한 필터 제거
  • 인터셉터에서 DB 접근 금지
  • ControllerAdvice의 메시지 생성 최소화
  • 모든 필터는 비즈니스 로직 최소화

마치며

API 레벨 성능 최적화는 단순히 코드를 정리하는 차원을 넘어, 전체 서비스 구조와 네트워크 비용을 고려하는 작업이다.
JSON 직렬화, DTO 구성, 캐싱, 필터/인터셉터 구성까지 종합적으로 조정했을 때 가장 큰 효과가 나타난다.

다음 글에서는 JDK 21 기반의 서버 스레드 모델 최적화(Virtual Thread)를 다룬다.
실제 서비스의 동시성 문제를 어떻게 해결하는지 자세히 살펴보겠다.

'TIL' 카테고리의 다른 글

Spring Boot 성능 최적화 6  (0) 2025.10.31
Spring Boot 성능 최적화 5  (0) 2025.10.30
Spring Boot 성능 최적화 3  (0) 2025.10.28
Spring Boot 성능 최적화 2  (0) 2025.10.27
Spring Boot 성능 최적화 1  (0) 2025.10.25
'TIL' 카테고리의 다른 글
  • Spring Boot 성능 최적화 6
  • Spring Boot 성능 최적화 5
  • Spring Boot 성능 최적화 3
  • Spring Boot 성능 최적화 2
twodc
twodc
매일의 배움과 고민, 그리고 작은 성장을 담은 개발자의 성장일지입니다.
  • twodc
    The Answer is 42
    twodc
  • 전체
    오늘
    어제
    • 분류 전체보기 (122)
      • TIL (122)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
twodc
Spring Boot 성능 최적화 4
상단으로

티스토리툴바