트러블슈팅
스케쥴링
우 석
2024. 4. 25. 17:14
[문제 상황 & 원인]
- 특정 조건에 의해 자동으로 포인트를 지급하는 메서드 수행과정
- @Scheduler 통해 구현한 서비스단 메서드로 단일 서버 환경에서 정상 동작.
- 하지만 배포 후 멀티 서버 환경에서는 해당 메소드가 서버의 수만큼 동작하여 리소스 낭비 + 포인트 추가 지급 문제 발생
[해결 과정]
- 멀티 서버 환경에서도 한 번에 메서드가 실행되어야 하기에 Spring batch, AWS Lambda를 이용하여 지정된 시간에 스케쥴링을 실행할 수 있다고 판단
- Spring batch는 스케쥴링 기능은 있지만 대용량 데이터 자동화 처리에서 사용하기 위해 나왔으며, 별도의 서버를 설치 및 구성해야 한다는 점에서 AWS에서 제공하는 서버리스 서비스인 Lambda와 EventBridge를 이용하여 스케쥴링을 구현

- Lambda에 실행 할 Http 메소드를 기재하고 원하는 시간에 EventBridge에서 이벤트를 발생시켜서 Lambda가 실행되도록 설정

추가 +
유저가 포인트 지급 요청을 알아내어 악용하는 문제를 방지하기 위해 특정 key를 사용하여 컨트롤러에 요청하도록 구현( Valid)