Schedule Email With Nodemailer
Gmail ์ฑ ๋น๋ฐ๋ฒํธ ์ค์
nodemailer๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ , ์ด๋ฉ์ผ์ ๋ณด๋ด๋ ์ฃผ์ฒด๊ฐ ํ์ํ๋ฐ, ์ด๋ฅผ ์ํด์ ์ด๋ฒ ํฌ์คํธ์์ Gmail์ ์ฌ์ฉํ ์์ ์ด๋ค. nodemailer๊ฐ Gmail์ ์ ๊ทผํ ๋ ์ธ์ฆ๋ ์ฌ์ฉ์์ธ์ง ํ์ธํ๊ธฐ ์ํด credentail ๊ฐ์ ๊ตฌ๊ธ ์์ด๋ / ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๊ณตํ๋๋ฐ, ์ด๋ ๋น๋ฐ๋ฒํธ๋ ๊ตฌ๊ธ ๊ณ์ ์์ ์์ฑํ ๋ฌด์์์ ์๋ฌธ์ 16์๋ก ์ด๋ฃจ์ด์ง ์ฑ ๋น๋ฐ๋ฒํธ์ด๋ค.
์ด๋ฅผ ์์ฑํ๊ธฐ ์ํด์ ๋ค์๊ณผ ๊ฐ์ ์กฐ๊ฑด์ด ๋ง์กฑ๋์ด์ผ ํ๋ค.
- ํ์ฌ, ํ๊ต, ์กฐ์ง์ ๊ณ์ ์ด๋ฉด ์๋๋ค.
- 2์ฐจ ์ธ์ฆ์ ํด์ผ ์ฌ์ฉํ ์ ์๋ค.
- ์ด๋ฌ๊ณ ๋์๋ ํ๋ฉด์ ํ์๋์ง ์์๋ค๋ฉด, ํ์ฑํ๋
2๋จ๊ณ ์ธ์ฆ
ํญ์ ๋ค์ด๊ฐ ์ ์ผ ํ๋จ์ ์ฑ ๋น๋ฐ๋ฒํธ๋ฅผ ์์ฑํด์ฃผ๋ฉด ๋๋ค.
Nest์์ Task Scheduling
Linux์์ ์ค์ผ์ฅด๋ง ์์
์ ์คํํ๊ธฐ ์ํด, cron
์ ์ฌ์ฉํ๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ์ node์๋ ์กด์ฌํ๋ค. nest์์๋ node์ cron
๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์์ ์ค์ผ์ฅด๋ง ์์
์ ์คํํ ์ ์๋ค.
|
|
register module
|
|
์์ ๊ฐ์ด ๋ชจ๋์ ๋ฑ๋กํ๋ฉด, ์ฑ ๋ด์ ์กด์ฌํ๋ ๋ชจ๋ ์ค์ผ์ฅด๋ง ์์
์ ๋ฑ๋กํ๋ค. ์ด๋ฌํ ๋ฑ๋ก์ nest lifecycle ์ค onApplicationBootstrap
์ด hook์ ์ผ์ผ์ผ ์คํ๋๋ค.
schedule decorator ์ ์ธํ๊ธฐ
cron job
๋ค์๊ณผ ๊ฐ์ด cron-pattern
, CronExpression enum
, Date object
๋ฅผ ์ด์ฉํด์ cron job์ ์์ฑํ ์ ์๋ค.
@cron(10 * * * * *)
@cron(CronExpression.EVERY_30_SECONDS)
@cron(new Date(Date.now()+10*1000))
: 10์ด ๋ค์ ํ๋ฒ ์คํ
cron-pattern
Interval
@Interval(10000)
์ ์ฑ์ด ์คํ๋๊ณ 10์ด ๋ง๋ค ์คํํ๋๋ก ์ค์ผ์ฅด๋ง์ ํ๋ ๋ฐ์ฝ๋ ์ดํฐ์ด๋ค. @Interval()
๋ฐ์ฝ๋ ์ดํฐ๋ setInterval()
์ ๊ธฐ๋ฐํ์ฌ ๋ง๋ค์ด์ก๋ค.
Timeouts
@Timeout(10000)
์ ์ฑ์ด ์คํ๋๊ณ 10 ๋ค์ ํ๋ฒ ์คํํ๋๋ก ์ค์ผ์ฅด๋ง ํ๋ ๋ฐ์ฝ๋ ์ดํฐ์ด๋ค. @Timeout()
๋ฐ์ฝ๋ ์ดํฐ๋ setTimeout()
์ ๊ธฐ๋ฐํ์ฌ ๋ง๋ค์ด์ก๋ค.
๋์ ์ผ๋ก scheduler ์ฌ์ฉํ๊ธฐ
์๋ฅผ ๋ค์ด, ํ์๊ฐ์
๋ก์ง ์ค ์ธ์ฆ๋ ์ฌ์ฉ์์ธ์ง ํ์ธํ๊ธฐ ์ํด ์ด๋ฉ์ผ๋ก ์ธ์ฆํ๋ฉด์ ๋ณด๋ด๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค๊ณ ๊ฐ์ ํ ๋, ์ด๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์ ์ธ์ฆ๋ ์ฌ์ฉ์์ธ์ง ํ์ธํ๋ ํ๋ฉด์ ๋๋ฌํ์ ๋, /email-scheduling/verify-user-with-email
api ์ ํด๋น ์ฌ์ฉ์์๊ฒ ์ด๋ฉ์ผ์ ๋ณด๋ด๋๋ก ๋์ ์ผ๋ก ์์
์ ์ํํ ์ ์๋ค.
์ด๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํด์ , ๋ค์๊ณผ ๊ฐ์ด SchedulerRegistry
instance๋ฅผ ์์ฑํด์ฃผ๋ฉด ๋๋ค.
|
|
ํ์ฌ ์์์ cron job์ ์์ฑํ ๋, ์ฒซ๋ฒ์ฌ ์ธ์๋ก cron-pattern
์ ๋๊ฒจ์ฃผ์์ง๋ง, date object
๋ Moment object
๋ฅผ ๋๊ฒจ์ค ์ ๋ ์๋ค.
Nodemailer ์ฌ์ฉํด์ ์ ํด์ง ์๊ฐ์ ์ด๋ฉ์ผ ๋ณด๋ด๋ ๊ธฐ๋ฅ ๊ตฌํ
api route handler
|
|
cron job creation
|
|
send email by using nodemailer instance
|
|
๋ง๋ฌด๋ฆฌ
์ ์ฒด ์ฝ๋๋ ๋ค์์์ ํ์ธํ ์ ์๋ค.