REST API는 현대 웹 애플리케이션에서 가장 많이 사용되는 데이터 전송 방식입니다. 그러나 빈번한 API 호출로 인해 서버 부하가 증가하거나 응답 속도가 느려질 수 있습니다. 이를 해결하기 위한 방법 중 하나가 Caching(캐싱)입니다. 이번 글에서는 REST API의 성능을 극대화할 수 있는 세 가지 주요 Caching 전략과 실습 예제를 소개합니다.
1. 브라우저 캐싱
브라우저 캐싱은 클라이언트가 캐싱된 데이터를 활용하도록 하는 전략입니다. HTTP 응답 헤더에 Cache-Control이나 ETag를 설정하여 브라우저 캐싱 동작을 제어할 수 있습니다.
예제: Cache-Control 설정
Spring Boot에서 Cache-Control 헤더를 설정하는 예제입니다.
@RestController
@RequestMapping("/api")
public class CacheController {
@GetMapping("/products")
public ResponseEntity<List<String>> getProducts() {
List<String> products = Arrays.asList("Laptop", "Phone", "Tablet");
return ResponseEntity.ok()
.cacheControl(CacheControl.maxAge(60, TimeUnit.SECONDS)) // 60초 동안 캐싱
.body(products);
}
}
실행 결과
클라이언트는 처음 호출 후 60초 동안 캐싱된 데이터를 사용하며, 서버에 요청을 보내지 않습니다.
2. 서버 사이드 캐싱
서버 사이드 캐싱은 서버에서 API 요청의 결과를 캐싱하여 동일한 요청이 반복될 때 데이터를 빠르게 반환하는 전략입니다. Spring Boot에서는 Spring Cache
를 활용하여 쉽게 구현할 수 있습니다.
예제: Spring Cache 사용
아래는 @Cacheable
을 사용한 서버 사이드 캐싱 예제입니다.
@Service
public class ProductService {
@Cacheable("products")
public List<String> getProducts() {
try {
Thread.sleep(2000); // 데이터베이스 조회 시뮬레이션 (2초 지연)
} catch (InterruptedException e) {
e.printStackTrace();
}
return Arrays.asList("Laptop", "Phone", "Tablet");
}
}
@RestController
@RequestMapping("/api")
public class ProductController {
private final ProductService productService;
public ProductController(ProductService productService) {
this.productService = productService;
}
@GetMapping("/products")
public List<String> getProducts() {
return productService.getProducts();
}
}
결과
첫 번째 호출 시에는 데이터베이스 조회로 인해 2초가 소요됩니다.
하지만 이후 호출은 캐싱된 데이터를 반환하므로 즉시 응답됩니다.
3. Content Delivery Network(CDN) 캐싱
CDN 캐싱은 클라이언트 요청을 전 세계 여러 CDN 서버로 분산시켜 성능을 향상시키는 전략입니다. 주로 정적 콘텐츠(이미지, JavaScript, CSS)뿐만 아니라 REST API 응답에도 활용됩니다.
설정 예제: NGINX를 사용한 CDN 캐싱
NGINX를 사용하여 REST API 응답을 캐싱하는 예제입니다.
server {
listen 80;
server_name api.example.com;
location /api/ {
proxy_pass http://backend-service;
proxy_cache my_cache;
proxy_cache_valid 200 1m;
add_header X-Cache-Status $upstream_cache_status;
}
}
위 설정은 NGINX가 /api/로 시작하는 요청의 응답을 1분 동안 캐싱합니다. X-Cache-Status
헤더를 통해 캐싱 상태를 확인할 수 있습니다.
정리
REST API 성능 최적화를 위해 브라우저 캐싱, 서버 사이드 캐싱, CDN 캐싱을 적절히 조합하면 트래픽을 효율적으로 관리하고 응답 속도를 크게 향상시킬 수 있습니다. 이번 글에서 소개한 전략과 예제를 활용하여 API 성능을 개선해 보세요!
'트러블슈팅' 카테고리의 다른 글
레거시 오라클 쿼리 리팩토링: 주문번호 부분입력으로 편의성 추가(Feat. 성능 최적화) (0) | 2024.04.19 |
---|---|
JVM , 아파치, 아파치 톰캣 튜닝 (35) | 2023.09.22 |
오라클 ORA-00018: 최대 세션 수를 초과했습니다 (0) | 2023.09.21 |