[Java] ์ค์ผ์ค๋ฌ ๋ฐฐ์น
- -
ํฌ๋ก / ์ค์ผ์ค๋ฌ (๋ฐฐ์น) ์๋ฆฌ์ฆ
#1. ์ก ์ค์ผ์ค๋ฌ? ํฌ๋ก ํํ์?
์ค๋ฌด์์๋ ๋ฐฐ์น, ํฌ๋ก , ์ค์ผ์ค๋ฌ, ์์ฝ์์ , ์ก ๋ฑ์ผ๋ก ๋ถ๋ฅด๋๋ฐ ์ผ๋จ ์ ๋ฆฌ๋ฅผ ํ๊ณ ๋์ด๊ฐ๋ณด๊ฒ ์ต๋๋ค.
์ค์ผ์ค๋ฌ (Scheduler), ์ก ์ค์ผ์ค๋ฌ, ์์ฝ์์ :
- ์๋ฒฝ 3์์ ์ ๋ฐ์ดํธ ๋ฑ๊ณผ ๊ฐ์ ํน์ ์๊ฐ/์ฃผ๊ธฐ์ ์ด๋ค ์ผ์ ํ๋ ํํ ์์ฝ(๋ฐ๋ณต/๋น๋ฐ๋ณต) ํ๋ ์์ (Job)๋ค์ ์คํ์์ผ์ฃผ๋ ์ฃผ์ฒด์ ๋๋ค.
ํฌ๋ก (Cron) :
- https://en.wikipedia.org/wiki/Cron
- ๋ณธ๋๋ ์๋ฏธ๋ก๋ ์ ๋์ค๊ณ์ด์ ์ก์ค์ผ์ค๋ฌ ์์คํ ์ด์ง๋ง, ํ์ฌ๋ ๊ทธ๋ฅ ์ก ์ค์ผ์ค๋ฌ์ ๋์ผํ ์๋ฏธ์ฒ๋ผ ๋ถ๋ฆฝ๋๋ค.
๋ฐฐ์น (Batch) :
- ์ผ๊ด์ฒ๋ฆฌ๋ก ๋๋์ ์์ ์ ํ๋ ๊ฒ ์ ๋๋ค.
- ๋ค๋ง ๋๋ถ๋ถ์ ๋ฐฐ์น๊ฐ ์ค์ผ์ค๋ง ๋๊ธฐ ๋๋ฌธ์ ์ ์ข ์ด๋ ํ์ฌ์ ๋ฐ๋ผ์ ๊ทธ๋ฅ ๋ฐฐ์น๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํฉ๋๋ค.
- ๋๋ฌธ์ ๋ฐฐ์น๋ ๋ฐ๋์ ์ค์ผ์ค๋ง ๋๋ ๊ฒ์ด ์๋ ์ผ๊ด์ฒ๋ฆฌ ์ฆ, ์์ฝ์์ ์ด ๊ฑธ๋ฆฌ์ง ์๋ ์์คํฌ๋ฆฝํธ๋ SQLํ๋ก์์ ๋ ๋ฐฐ์น๊ฐ ๋ ์ ์์ต๋๋ค.
- ์ฆ, ์ฌ๊ธฐ์๋ ๋ฐฐ์น๋ผ๋ ํํ๋ณด๋จ ์ก์ด๋ผ๋ ํํ์ ์ฐ๋๋ก ํ๊ฒ ์ต๋๋ค.
์ก (Job) :
- ํํ ์ค์ผ์ค๋ง์์ ๋ฐฐ์น๋ผ๊ณ ๋ถ๋ฅด๋ฉด ์ก์ ๋๋ค.
- ์ข ๋ ์ ํํ ์๋ฏธ๋ก ์ค์ผ์ค๋ง์ด ๋ ๋ฐฐ์น๋ผ๊ณ ๋ณด์๋ฉด ๋ฉ๋๋ค.
- ๊ฒฝ์ฐ์ ๋ฐ๋ผ์๋ ํด์ผํ ์ผ๋ก ๋จ๊ณ๋ณ ์ก์ด ์์ ์ ์์ต๋๋ค.
ํฌ๋ก ํํ์ (Cron expression) :
- ๊ฐ๋จํ ๋งํด์ ์ค์ผ์ค๋ฌ๊ณ์ด์ ํํ์(expression) ์ ๋๋ค.
- ์ ๊ทํํ์๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ตฌํ์ฒด์ ๋ฐ๋ผ์ ์กฐ๊ธ์ฉ ๋ค๋ฅธ ๋ถ๋ถ๋ ์์ต๋๋ค.
- ์ฌ๊ธฐ์๋ ์คํ๋ง ์ค์ผ์ค๋ฌ / ์ฟผ์ธ ๊ธฐ๋ฐ์ ํฌ๋ก ํํ์ ์ฃผ๋ก ๋ค๋ฃจ๋๋กํ๊ฒ ์ต๋๋ค.
#2. ํฌ๋ก ํํ์
๋ฆฌ๋ ์ค / ์ ๋์ค ํฌ๋ก ํํ์
๋ถ์์ผ์์์ผ
0-59 | 0-23 | 1-31 / ? | 1-12 | 0-6 / ? |
์คํ๋ง ์ค์ผ์ค๋ฌ / ์ฟผ์ธ ํฌ๋ก ํํ์
์ด๋ถ์์ผ์์์ผ์ฐ๋
0-59 | 0-59 | 0-23 | 1-31 / ? | 1-12 | 0-6 / ? | ์๋ต๊ฐ๋ฅ |
์ฃผ์์
- ์์ 0-11์ด ์๋ 1-12 ์ ๋๋ค.
- ์์ผ์ 0:์ผ์์ผ ~ 6:ํ ์์ผ ์ด์ง๋ง 7๋ ์ผ์์ผ๋ก ๋์ด์์ต๋๋ค. ํ์ง๋ง ์ผ๊ด์ฑ์ ์ํด ์ผ์์ผ์ ํ์ชฝ์ผ๋ก ์ฐ๋๊ฑธ ๊ถ์ฅํฉ๋๋ค.
#3. ํฌ๋ก ํํ์ ์์
๊ธฐ๋ณธ์ ์ธ ํํ์์ ๊ฐ์ผ๋ ์๋๋ถํฐ๋ ์คํ๋ง ๊ธฐ๋ฐ์ผ๋ก ์ค๋ช ํ๋๋กํ๊ฒ ์ต๋๋ค.
์๋ฅผ๋ค์ด 2016๋ 11์ 20์ผ ์คํ 2์(14์) 10๋ถ 36์ด์ ์คํํ๋ ค๊ณ ํฉ๋๋ค. ์๋ฐ๊ธฐ๋ฐ yyyy-MM-dd HH:mm:ss ๋ก ํํํ๋ฉด 2016-11-20 14:10:36 ์ ๋๋ค. ํฌ๋ก ํํ์์ผ๋ก ํํํ๋ค๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
36 10 14 20 11 ? 2016
์ฌ๊ธฐ์ ๋ณด์ด๋ ? ๋ ์ค์ ๊ฐ ์์์ผ๋ก ์ค์ง ์ผ[day-of-month:1-31], ์์ผ[day-of-week:0-6]์์๋ง ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค. ์ข ๋ ์์ฉํด์ ๋งค๋ 11์ 20์ผ ์คํ 2์(14์) 10๋ถ 36์ด ์ ์คํํ๋ ค๊ณ ํ๋ค๋ฉด ์๋์ ๊ฐ์ด ํํํ ์ ์์ต๋๋ค.
36 10 14 20 11 ? *
ํน์
36 10 14 20 11 ?
์คํ๋ง ์ค์ผ์ค๋ฌ์ ์ฟผ์ธ ์์๋ ์ฐ๋๋ฅผ ์๋ตํ ์ ์์ต๋๋ค. ๋ํ *๋ ๋ชจ๋ ์กฐ๊ฑด ์ฆ, ์์ผ๋์นด๋์ ๋๋ค. ๊ทธ๋ผ ๋งค์ผ ์คํ 2์(14์) 10๋ถ 36์ด ์ ์คํ์ํค๋ ์์ ์จ๋ณด๋๋กํ๊ฒ ์ต๋๋ค.
36 10 14 * * ?
๊ทธ๋ผ ๋ค์ ๋งค์ผ ์๋ฒฝ 3์ ์ ๊ฐ์ ์คํ์ํค๋ ค๋ฉด ์ด๋ป๊ฒ ํํํด์ผํ ๊น์?
* * 3 * * ?
์์ฒ๋ผ ์ค์ ํ๋ฉด ์๋ฒฝ 3์๋ถํฐ ์๋ฒฝ 4์ ์ ๊น์ง 1์ด๋ง๋ค ์คํ๋ ๊ฒ์ ๋๋ค. ์๋๋ฉด ๋ชจ๋ ์ด ๋ชจ๋ ๋ถ 3์ ๋ชจ๋ ์ผ... ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
0 0 3 * * ?
๊ทธ๋์ ์์ฒ๋ผ ์ค์ ํด์ผ ์๋ฒฝ 3์ 0๋ถ 0์ด์ ์คํ๋ฉ๋๋ค. ๊ทธ๋ผ ์๋ฒฝ 3์๋ถํฐ 4์์ ๊น์ง 10๋ถ ๋ถํฐ 5๋ถ๋ง๋ค ๋๋ ํฌ๋ก ์ ์ค์ ํด๋ณด๋๋กํ๊ฒ ์ต๋๋ค.
0 10/5 3 * * ? [์์์๊ฐ]/[๋จ์]
์ด๋ ๊ฒ 3์ 10๋ถ 15๋ถ 20๋ถ 25๋ถ 30๋ถ 45๋ถ 50๋ถ 55๋ถ ์ด ์คํ๋ฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด๋ฐ๋จ์ ๋ฐฐ์น๋ ์ ๊ฐ๋ถํฐ ์คํ๋ฉ๋๋ค. ๊ทธ๋์ ๋ณดํต์ 0/๋จ์๋ฅผ ์๋๋ค. ๊ทธ๋ผ 10๋ถ๋ง๋ค ๋๋ ํฌ๋ก ์ ์ค์ ํด๋ณด๊ฒ ์ต๋๋ค.
0 0/10 * * * ?
์ด๋ ๊ฒ ์ค์ ํ๋ฉด [0๋ถ 0์ด], [10๋ถ 0์ด], [20๋ถ 0์ด], [30๋ถ 0์ด], [40๋ถ 0์ด], [50๋ถ 0์ด] ์ด๋ ๊ฒ ๋๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฐ์๋ ์๋์ ๊ฐ์ ํํ์๋ค์ด ์์ต๋๋ค.
#4. ํฌ๋ก ํํ์ ์ต์
? : ์กฐ๊ฑด์์ [์ผ, ์์ผ ์์๋ง ์ฌ์ฉ๊ฐ๋ฅ]
* : ๋ชจ๋ ์กฐ๊ฑด์์ ์ฐธ
์์์๊ฐ/๋จ์ (์ 0/5) : ํด๋น ์์์๊ฐ๋ถํฐ ํด๋น ๋จ์๋ ์ฐธ
์์๋ฒ์-๋๋ฒ์ (์ 3-5) : ์์ (3-5)๋ 3์์ 5๊น์ง (3, 4, 5) ์กฐ๊ฑด์ผ๋ ์ฐธ.
x,y,z... (์ 1,3,5) : ์์ (1,3,5) 1,3,5 ์ผ๋๋ง ์ฐธ.
L : [์ผ, ์์ผ ์์๋ง ์ฌ์ฉ๊ฐ๋ฅ]
- ์ผ์์ ์ฌ์ฉํ๋ฉด : ์(L) ๋ง์ง๋ง ๋ ์ง์
๋๋ค. ์๋ฅผ๋ค์ด 1์์ด๋ผ๋ฉด 31์ผ 2์์ด๋ผ๋ฉด ์ค๋
์ ๋ฐ๋ผ 28ํน์ 29์ผ 4์์ด๋ผ๋ฉด 30์ผ์ ์ฐธ.
- ์์ผ์์ ์ฌ์ฉํ๋ฉด : ์(6L) 6์(ํ ์์ผ) ๋ง์ง๋ง ํ ์์ผ์ ์คํ๋ฉ๋๋ค. ๋ง์ง๋ง์ฃผ๊ฐ ํ ์์ผ์ด ์๋ค๋ฉด ๊ทธ์ ์ฃผ ํ ์์ผ์ ์ฐธ.
W : [์ผ์์๋ง ์ฌ์ฉ๊ฐ๋ฅ]
- ๊ฐ์ฅ ๊ฐ๊น์ด ํ์ผ(์~ํ )๋ฅผ ์ฐพ์ต๋๋ค.
- 15W ๋ผ๊ณ ์ค์ ํ๋ค๋ฉด 15์ผ์ด ์~๊ธ ๋ฒ์๋ผ๋ฉด ํด๋น ๋ ์ง์์ ์ฐธ.
- 15W 15์ผ์ด ํ ์์ผ์ด๋ผ๋ฉด ๊ฐ์ฅ ๊ฐ๊น์ด ๊ธ์์ผ์ธ 14์ผ์ ์ฐธ.
- 15W 15์ผ์ด ์ผ์์ผ์ด๋ผ๋ฉด ๊ฐ์ฅ ๊ฐ๊น์ด ์์์ผ์ธ 16์ผ์ ์ฐธ.
# : [์์ผ์์๋ง ์ฌ์ฉ๊ฐ๋ฅ]
- ์๋ฅผ๋ค์ด 3#2 ๋ผ๊ณ ์ป๋ค๋ฉด (์์์ผ#2๋ฒ์งธ์ฃผ)๋ผ๋ ์๋ฏธ๊ฐ ๋ฉ๋๋ค.
- ์ฆ 2๋ฒ์งธ์ฃผ์ ์์์ผ์ ์ฐธ์ด ๋ฉ๋๋ค.
'Back-End > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JUnit] JUnit์ ์ด์ฉํ TDD(Test-Driven Development) (0) | 2023.03.01 |
---|---|
[Java 8] Stream API ๊ธฐ๋ณธ ๋ฌธ๋ฒ ๋ฐ ํ์ฉ ์์ (0) | 2023.02.28 |
[Java] ํธ๋ฆฌํ Lombok ๊ธฐ๋ฅ ์ ๋ฆฌ (0) | 2023.02.04 |
[Java] IntelliJ์์ lombok ์ฌ์ฉํ๊ธฐ (0) | 2023.02.04 |
[Java] ํ๊ฒฝ๋ณ์ ์ค์ (0) | 2023.02.04 |
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค. ๐