* 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 ...
'Computer Science > Spring' 카테고리의 다른 글
WebApplication 이해 (2) | 2024.12.18 |
---|---|
Spring과 Spring boot (0) | 2024.12.18 |
동기 방식으로 외부 서비스를 호출할 때 외부 서비스 장애가 나면 어떻게 조치할 수 있을까. (0) | 2024.12.10 |
JSON에 대해서 ( Serialiazation, Deserialization ) (2) | 2024.12.08 |
@Component, @Controller, @Service, @Repository 차이점 (1) | 2024.12.08 |