본문 바로가기
Computer Science/Spring

Spring 트래픽 처리 방법

by 꽃요미 2024. 12. 10.

* intro

 - 추후에 트래픽 문제를 해결하기 위해서 SpringBoot를 사용했을때 처리하는 방법을 알아두면 추후에 유용할것 같아서 미리 작성한다.

 

1. 로드밸런싱 (Load Balancing)

- 로드밸런싱은 여러 서버 ( 혹은 인스턴스 ) 로 트래픽을 균등하게 배분하여 특정 서버에 과도한 부하가 몰리지 않도록 하는 핵심적인 기법.

- Spring Cloud Gateway 나 Zuul( Netflix OSS) 같은 API Gateway를 사용해 트래픽을 마이크로서비스 아키텍처에 유연하게 분배.

- 컨테이너 오케스트레이션 도구 사용시 ReplicaSet 및 HPA 를 통해 가용 인스턴스 자동 스케일링. ( 어려움 )

 

스케일링

 - 수평 스케일링 : 애플리케이션 인스턴스 늘려서 요청 처리 능력 증대.

 - 수직 스케일링 : 인스턴스 CPU, 메모리, 디스크 성능 향상을 통해 처리 능력 강화.

2. 송수신 방법 최적화

- 트래픽 처리에서 요청/응답 처리의 효율성을 높이는 것은 매우 중요합니다. 동기화된 방식의 처리만 사용하면 특점에 요청이 몰릴 때 서버 스레드가 응답 대기 중 블록이 될 수 있다.

 

2-1 @Scheduled 어노테이션 활용

- Spring의 @Scheduled는 특정 시점이나 주기로 특정 로직을 실행하는데 사용됩니다. 이는 주기적인 배치 작업이나 특정 시간에 실행해야 하는 로직 처리에 유용함. 

- 대규모 트래픽 자체를 직접적으로 줄이는 것은 아니라, 트래픽 처리 로직을 주기적인 배치로 전환할 때 도움이 될 수 있다.

- 예를들어서 실시간 요청이 몰리는 대신, 특정 큐에 데이터를 쌓아두고 일정주기로 이를 배치 처리하는 형태로 분산 가능합니다.

 

2-2 Spring Quartz

- Quartz Scheduler는 Java 기반의 스케쥴러 라이브러리로, Spring과 쉽게 연동이 가능하다. Quartz는 고급 스케쥴링 가능 ( 크론 표현식, 분산 환경 지원, JobStore 설정 )을 제공함.

- 대규모 트래픽을 실시간으로 처리하지 않고 적절한 시점에 처리할 수 있게 함.

 - 예를들어 대용량 데이터 처리 작업을 오프 피크 시간대에 배치로 수행하거나, 이벤트를 큐잉해두었다가 특정 시간에 몰아서 처리가능함.

 

2-3 Spring Batch

- Spring Batch는 대규모 데이터 세트를 효율적으로 처리하기 위한 프레임워크. 주로 대량 처리 시 성능, 트랜잭션, 체크포인트, 재시작 등 안정적인 배치처리 기능을 제공합니다.

- Chunk 기반 처리, 스케줄러와 연동 가능, 다양한 ItemReader/Writer 지원.

 

 

2-4 Elastic Bulk Ingestor (Elasticsearch 연동)

- Bulk Ingestion : 요청이 들어올 때마다 실시간으로 문서를 하나씩 색인하는 대신, 일정량의 문서를 모아 Bulk Request로 Elasticsearch에 전달 함으로써 네트워크 부하를 줄이고 성능을 개선할 수 있다.

 

* 결론

Spring 환경에서 트래픽 처리는 단순히 한 가지 솔루션에 의존하기보다, 다음과 같은 다각도의 접근이 필요함

 

1. 인프라 및 아키텍처 레벨 : 로트밸런싱, 오토스케일링, CDN, 메세지 큐

2. 애플리케이션 레벨 : Spring Batch, Quartz 스케쥴링, 비동기/리액티브 처리, 캐싱

3. 데이터 및 Storage 레벨 : Elasticsearch Bulk Ingest.

4. 모니터링 및 개선 : Actuator ...