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 |