RSS DEV ์ปค๋ฎค๋‹ˆํ‹ฐ

๐Ÿ”ดNestJS๋กœ Cron Job ๊ด€๋ฆฌํ•˜๊ธฐ: ๋ฉ€ํ‹ฐ ์ธ์Šคํ„ด์Šค ๋ฌธ์ œ ํ•ด๊ฒฐ๊ณผ ์ž ๊ธˆ ๋ฉ”์ปค๋‹ˆ์ฆ˜

Cron ์ž‘์—…์€ ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค์—์„œ ๋™์‹œ์— ์‹คํ–‰๋˜์–ด ๋ฐ˜๋ณต์ ์ธ ์ž‘์—…๊ณผ ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜๋กœ ์ด์–ด์ง€๋ฉด์„œ ๋ฉ€ํ‹ฐ ์ธ์Šคํ„ด์Šค ํ™˜๊ฒฝ์—์„œ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ์ž ๊ธˆ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹จ์ผ ์ธ์Šคํ„ด์Šค์—์„œ๋งŒ ์ž‘์—…์ด ์‹คํ–‰๋˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. NestJS๋Š” cron ์ž‘์—…์„ ์œ„ํ•œ @nestjs/schedule ๋ชจ๋“ˆ์„ ์ œ๊ณตํ•˜์—ฌ @Cron, @Interval, @Timeout๊ณผ ๊ฐ™์€ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ cron ์ž‘์—…์„ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ๋ชจ๋“ˆ์€ ๋ฉ€ํ‹ฐ ์ธ์Šคํ„ด์Šค ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ๋นŒํŠธ์ธ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ธฐ๋ฐ˜ ๋น„๊ด€์  ์ž ๊ธˆ, Redis ์ž ๊ธˆ, API ํ˜ธ์ถœ์„ ํ†ตํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง, ํ๋ฅผ ์‚ฌ์šฉํ•œ ์ž‘์—… ๊ด€๋ฆฌ์™€ ๊ฐ™์€ ์ž ๊ธˆ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ค‘๋ณต ์ž‘์—…์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์ž ๊ธˆ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ์‹ ๋ขฐ์„ฑ, ์„ฑ๋Šฅ, ํ™•์žฅ์„ฑ๊ณผ ๊ฐ™์€ ์žฅ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Redis ์ž ๊ธˆ์€ ๋น ๋ฅด๊ณ  ๊ฐ€๋ณ์ง€๋งŒ ๋ณ„๋„์˜ Redis ์„œ๋น„์Šค๊ฐ€ ํ•„์š”ํ•œ ๋ฐ˜๋ฉด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ธฐ๋ฐ˜ ๋น„๊ด€์  ์ž ๊ธˆ์€ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ€ํ‹ฐ ์ธ์Šคํ„ด์Šค ํ™˜๊ฒฝ์—์„œ ์ž‘์—…์€ ํ์— ์ถ”๊ฐ€๋˜๊ณ  BullMQ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹จ์ผ ์ธ์Šคํ„ด์Šค์—์„œ๋งŒ ์ฒ˜๋ฆฌ๋˜์–ด ์ˆœ์ฐจ์ ์ธ ์ž‘์—… ์ฒ˜๋ฆฌ์™€ ์ˆ˜ํ‰ ํ™•์žฅ์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. PM2๋Š” ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ Node.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ์ธ๊ธฐ ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ์ž์ด์ง€๋งŒ ๋‹จ์ผ ์ธ์Šคํ„ด์Šค cron ์ž‘์—…๊ณผ ํŽ˜์ผ์˜ค๋ฒ„์— ๋Œ€ํ•œ ์ง€์›์ด ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. ์ „๋ฐ˜์ ์œผ๋กœ ์ž ๊ธˆ ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ ์ž‘์—… ๊ด€๋ฆฌ ์ „๋žต์„ ์‚ฌ์šฉํ•˜๋ฉด ์ค‘๋ณต ์ž‘์—…์„ ๋ฐฉ์ง€ํ•˜๊ณ  ๋ฉ€ํ‹ฐ ์ธ์Šคํ„ด์Šค ํ™˜๊ฒฝ์—์„œ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
dev.to
๐Ÿ”ดManaging Cron Jobs with NestJS: Solving Multi-Instance Issues and Locking Mechanisms
Create attached notes ...