헤헷,, 제가 한 건 아니고,, Spring Boot Scheduler가 한 것입니다,,
를 나타나내는 잔망루피입니다..
사용 방법이 간단해서 짧게 정리하면서 git bash에서 하염없이 백그라운드 요청을 했던 조그마한 실수도 공유합니다^^..
1. Spring boot Scheduler란
주로 백그라운드에서 반복적으로 수행해야 하는 작업을 위해 사용되며, 정해진 시간이나 주기에 따라 작업을 실행할 수 있게 해줍니다.
대기열에 계신 고객님들을 손수 대기열에서 제거해드릴 수 있지만, 저보단 Spring Boot Scheduler가 더 잘 할 것이라 믿습니다^^!
2. 설정
FlowApplication.java
@EnableScheduling
@SpringBootApplication
public class FlowApplication {
public static void main(String[] args) {
SpringApplication.run(FlowApplication.class, args);
}
}
@EnableScheduling을 통해 Scheduler 사용을 활성화힙니다.
3. Scheduler를 실행할 메서드 지정
UserQueueService.java
public class UserQueueService {
@Scheduled(initialDelay = 5000, fixedDelay = 10000) // 서버 시작 후 5초 뒤, 이후 10초마다 메서드 실행
public void scheduleAllowUser(){
log.info("called Scheduling...");
}
}
4. local/test 환경에서 Scheduler 동작 설정
application.yml
server:
port: 9010
spring:
data:
redis:
host: 127.0.0.1
port: 6379
scheduler:
enabled: true
---
spring:
config:
activate:
on-profile: test
data:
redis:
host: 127.0.0.1
port: 63790
scheduler:
enabled: false
테스트를 Scheduler를 실행하면 예상과는 다르게 동작할 수 있으므로 잠시 실행을 꺼둡니다.
public class UserQueueService {
@Value("${scheduler.enabled}")
private Boolean scheduling = false;
@Scheduled(initialDelay = 5000, fixedDelay = 10000)
public void scheduleAllowUser(){
if(!scheduling){
log.info("passed scheduling...");
return;
}
log.info("called Scheduling...");
}
}
환경 설정 value를 받아서 scheduling값에 할당해줍니다.
test 환경에서 enabled를 false로 설정해두었으니, passed scheduling을 호출하고 메서드는 종료될 것입니다.
🌹CMD를 이용해서 API 요청을 보낼 때, 주의할 점
$ curl -X POST localhost:9010/api/v1/queue?user_id=1001&queue=test1
[1]+ Done curl -X POST localhost:9010/api/v1/queue?user_id=1001
위에 처럼 요청하면, 의문의 [1]+ 함께 제 queue 파라미터를 무시합니다.
자판기에 동전을 넣고 음료수를 뽑아 먹으려했지만, 자판기가 동전을 먹은 경우랑 비슷한 것입니다..
하지만, 이 경우에는 제 탓도 있던^^...
Shell에서는 &가 명령어를 백그라운드에서 실행하도록 만들기 때문에, curl 명령어에서 &를 사용하면 URL의 쿼리 파라미터가 아니라 셸 명령어로 해석될 수 있습니다.
따라서 뒤에 붙은 queue=test1은 무시되거나 처리되지 않아 user_id 파라미터만 전달됩니다.
$ curl -X POST "localhost:9010/api/v1/queue?user_id=1001&queue=test1"
이런 경우에는 간단히, URL을 큰따옴표로 감싸서 셸이 URL을 제대로 인식하도록 하면 됩니다.
📑
참고 자료
Chat GPT
https://fastcampus.co.kr/dev_online_traffic_data
9개 프로젝트로 경험하는 대용량 트래픽 & 데이터 처리 완벽 마스터하기 | 패스트캠퍼스
실무에서 자주 일어나는 대용량 트래픽 & 데이터 처리 업무를 한번에 마스터할 수 있도록 모든 것을 담았습니다. 대기업 & 빅테크 현업 강사진 8인과 함께 하는 고퀄리티 현업 대비형 강의! 타사
fastcampus.co.kr
https://velog.io/@ktf1686/Spring-Spring-Scheduler-%EC%A0%81%EC%9A%A9%ED%95%B4%EB%B3%B4%EA%B8%B0
[Spring] Spring Scheduler 적용해보기
스프링 스케줄러는 Java에서 제공하는 스프링 프레임워크의 일부로, 애플리케이션 내에서 정기적으로 실행되어야 하는 작업을 스케줄링하는데 사용됩니다.스프링 스케줄러는 주로 백그라운드
velog.io
https://spring.io/guides/gs/scheduling-tasks
Getting Started | Scheduling Tasks
Although scheduled tasks can be embedded in web applications, the simpler approach (shown in this guide) creates a standalone application. To do so, package everything in a single, executable JAR file, driven by a Java main() method. The following snippet
spring.io
'MinimiProject > 아이돌 티켓팅 접속자 대기열 시스템' 카테고리의 다른 글
[대기열 시스템] Webflux와 Checked/Unchecked Exception (0) | 2025.02.23 |
---|---|
[대기열 시스템] 테스트를 위한 Embedded Redis (1) | 2025.02.17 |
[대기열 시스템] Custom Exception (0) | 2025.02.13 |
[대기열 시스템] Spring WebFlux와 BlockHound (0) | 2025.02.11 |
[대기열 시스템] NullPointerException: Mocking (0) | 2025.02.10 |