๐Ÿ“Œ Spring ์Šค์ผ€์ค„๋ง(Scheduling) ๊ธฐ๋ณธ ์ •๋ฆฌ

My Pale Blue Dotยท2025๋…„ 4์›” 29์ผ
0

SPRING

๋ชฉ๋ก ๋ณด๊ธฐ
28/36
post-thumbnail

๐Ÿ“… ๋‚ ์งœ

2025-04-29

๐Ÿ“ ํ•™์Šต ๋‚ด์šฉ

โœ… ์Šค์ผ€์ค„๋ง(Scheduling)์ด๋ž€?

  • ํŠน์ • ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ ๋˜๋Š” ํŠน์ • ์‹œ์ ์— ์ž๋™์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.
  • Spring์—์„œ๋Š” @Scheduled ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„ํŽธํ•˜๊ฒŒ ์Šค์ผ€์ค„๋ง ์ž‘์—…์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณ„๋„์˜ ์Šค๋ ˆ๋“œ ํ’€(1๊ฐœ ์Šค๋ ˆ๋“œ)์—์„œ ๋น„๋™๊ธฐ๋กœ ์‹คํ–‰๋œ๋‹ค.

โœ… ์Šค์ผ€์ค„๋ง์„ ์œ„ํ•œ ๊ธฐ๋ณธ ์„ค์ •

root-context.xml์— ์ถ”๊ฐ€ ์„ค์ •:

<context:component-scan base-package="com.example.app.scheduled" />

โœ… ์Šค์ผ€์ค„๋ง ํด๋ž˜์Šค ์˜ˆ์‹œ

package com.example.app.scheduled;

import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
@EnableScheduling
public class Scheduling {

    // 1์ดˆ๋งˆ๋‹ค ๋ฉ”์†Œ๋“œ ์‹คํ–‰ (์ฃผ์„์ฒ˜๋ฆฌ๋œ ์˜ˆ์‹œ)
    //@Scheduled(fixedRate = 1000)
    //public void t1() {
    //    System.out.println("Scheduling's t1() invoke..");
    //}

    // 3์ดˆ๋งˆ๋‹ค ๋ฉ”์†Œ๋“œ ์‹คํ–‰
    @Scheduled(cron = "*/3 * * * * *")
    public void t2() {
        System.out.println("Scheduling's t2() invoke..");
    }
}

๐Ÿ”น ์ฐธ๊ณ :

cron ํ‘œํ˜„์‹์€ "์ดˆ(0-59) ๋ถ„(0-59) ์‹œ(0-23) ์ผ(1-31) ์›”(1-12) ์š”์ผ(0-6, ์ผ์š”์ผ=0)" ์ˆœ์„œ๋กœ ์ž‘์„ฑ๋œ๋‹ค.


โœ… @Scheduled ์ฃผ์š” ์†์„ฑ ์ •๋ฆฌ

์†์„ฑ์„ค๋ช…
fixedRate๋ฉ”์†Œ๋“œ ์‹œ์ž‘ ์‹œ๊ฐ„ ๊ธฐ์ค€ ์ฃผ๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ (ms ๋‹จ์œ„)
fixedDelay๋ฉ”์†Œ๋“œ ์ข…๋ฃŒ ํ›„ ๋Œ€๊ธฐ ์‹œ๊ฐ„ ๊ธฐ์ค€ ์ฃผ๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ (ms ๋‹จ์œ„)
initialDelay์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์ž‘ ํ›„ ์ฒซ ์‹คํ–‰๊นŒ์ง€ ๋Œ€๊ธฐ ์‹œ๊ฐ„ (ms ๋‹จ์œ„)
cron์ •๊ตํ•œ ์‹œ๊ฐ„ ์ œ์–ด (์ดˆ, ๋ถ„, ์‹œ, ์ผ, ์›”, ์š”์ผ)

โœ… Cron ํ‘œํ˜„์‹ ์˜ˆ์‹œ

ํ‘œํ˜„์‹์„ค๋ช…
0/5 * * * * *๋งค 5์ดˆ ๊ฐ„๊ฒฉ์œผ๋กœ ์‹คํ–‰ (0์ดˆ๋ถ€ํ„ฐ ์‹œ์ž‘)
0 0/1 * * * *๋งค 1๋ถ„๋งˆ๋‹ค 0์ดˆ์— ์‹คํ–‰
0 0 9 * * *๋งค์ผ ์˜ค์ „ 9์‹œ์— ์‹คํ–‰

๐Ÿ”ฅ ์ •๋ฆฌ

  • ์Šค์ผ€์ค„๋ง์€ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ž‘์—…์„ ์ž๋™ํ™”ํ•˜๋Š” ๋ฐ ๋งค์šฐ ์œ ์šฉํ•˜๋ฉฐ, Spring์—์„œ๋Š” @Scheduled๋ฅผ ํ†ตํ•ด ์‰ฝ๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • fixedRate, fixedDelay, initialDelay, cron ์†์„ฑ์„ ๋ชฉ์ ์— ๋งž๊ฒŒ ๊ตฌ๋ถ„ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • Cron ํ‘œํ˜„์‹์— ์ต์ˆ™ํ•ด์ง€๋ฉด ๋‹ค์–‘ํ•œ ์ฃผ๊ธฐ์  ์ž‘์—…์„ ์ •๊ตํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ”— ์ฐธ๊ณ  ์ž๋ฃŒ


๋А๋‚€ ์ 

  • @Scheduled๋ฅผ ํ™œ์šฉํ•ด ์†์‰ฝ๊ฒŒ ๋ฐ˜๋ณต ์ž‘์—…์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ์ธ์ƒ ๊นŠ์—ˆ๋‹ค.
  • ํŠนํžˆ cron ํ‘œํ˜„์‹์„ ํ™œ์šฉํ•˜๋ฉด ๋‹ค์–‘ํ•œ ์กฐ๊ฑด์œผ๋กœ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์Šค์ผ€์ค„์„ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์–ด ์‹ค๋ฌด์— ๋งค์šฐ ์œ ์šฉํ•  ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค.
  • ์‹ค์ œ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋ฐ์ดํ„ฐ ์ •๋ฆฌ, ์ž๋™ ์•Œ๋ฆผ ๋ฐœ์†ก, ์ฃผ๊ธฐ์  ๋ฐฑ์—… ์ž‘์—… ๋“ฑ์— ์ ๊ทน ํ™œ์šฉํ•ด๋ณด๊ณ  ์‹ถ๋‹ค.

์š”์•ฝ

  • @Scheduled๋กœ ์†์‰ฝ๊ฒŒ ์Šค์ผ€์ค„๋ง ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๊ฐ€๋Šฅ
  • ์ฃผ์š” ์†์„ฑ(fixedRate, fixedDelay, initialDelay, cron) ์ดํ•ด ํ•„์š”
  • cron ํ‘œํ˜„์‹์œผ๋กœ ๋‹ค์–‘ํ•œ ์‹œ๊ฐ„ ์กฐ๊ฑด ์„ค์ • ๊ฐ€๋Šฅ

profile
Here, My Pale Blue.๐ŸŒ

0๊ฐœ์˜ ๋Œ“๊ธ€