728x90

헤헷,, 제가 한 건 아니고,, 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

 

728x90