
์ค๋ ์ฐ๋ฆฌ๋ ์์ ๋งํ๋ ๊ฒ์ ๋ง๋ค ๊ฒ์
๋๋ค ์๋ฑ์ค ๊ธฐ๋ฅ (๊ณต์๋ช
์นญ ), ์ฐํธ ์๋น์ค์ ๊ณต๋ชจ ํํ๋กญ๊ฒ ์ ๋ค์ด ์๋ ์ฌ์ฉ์์๊ฒ "๋น๋"๋ฅผ ๋ณด๋
๋๋ค(๋๋ด์
๋๋ค. ์ฐ๋ฆฌ ๋ชจ๋ ์คํธ์ ๋ฐ๋ํ๋ค๋ ๊ฑด ์์ง๋ง์).
๋๋ ๋ํ ์ ํต์ ์ธ ์๋ฒ์ ๋ฐ๋์(๊ทธ๋ฌ๋ ๊ด์ ์ฃผ์๋ ์๋)์ด๋ฉฐ ์์ ๋งํ๋ ๊ฒ์ ์ง์งํฉ๋๋ค. ์๋ฒ๋ฆฌ์ค (์๋ฒ๋ฆฌ์ค) ์๋ฃจ์
์ ์ฌ์ฉํ๋ ์ด์ ๋ ์๋ฒ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ ์ข์ํ์ง ์๊ณ (์ค์ ๋ก ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ๋ ๋ชจ๋ฅด๊ณ ) ๋๊ตฐ๋ค๋ ์๋ฒ๊ฐ ๋ก๋๋์ง ์๋ ์๊ฐ์ ๋น์ฉ์ ์ง๋ถํ๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ ๋ค๋ฅธ ๋ฌธ์ ๋ ๊ธฐ๋ฅ์
๋๋ค. ๋ ์์ด ๋ค๋ฅธ ์ฌ๋์ด ์ ํ๋ฅผ ๋ฐ๊ณ , ๋๋ ํตํ ์๊ธ๋ง ์ง๋ถํฉ๋๋ค. 2019๋
XNUMX์ ์ด Yandex๋ Yandex ํด๋ผ์ฐ๋ ๊ธฐ๋ฅ โ ๋ฌ์์์์๋ ์ฒ์์ธ ๊ฒ ๊ฐ์์ ์๋ฒ๋ฆฌ์ค. ๊ทธ๋ฆฌ๊ณ ํนํ ์ข์ ์ ์ ์จ๋ฆฌ์ค์ ๊ธฐ์ ์ด ์์ ํ ๋ฌด๋ฃ๋ผ๋ ์ ์ธ๋ฐ, ๊ทธ๋์ ๊ทธ ์ดํ๋ก ๊ณ์ ์ ๊ฐ ๋ ์ฃผ์ํ๊ณ ์์์ด์. ํ์ง๋ง ์ด๋ฏธ ์์ํด๋ณด์ฃ .
์ด๋ฐ ์๋๋ฆฌ์ค๋ฅผ ์์ํด ๋ณด์. ๊ทํ์ ์ ์ฒญ์(์: Alice์ ๊ธฐ์ ) ๊ทธ๊ฑด ๊ทธ๋ ๊ณ , ์ด๊ฒ๋ ์๋ํฉ๋๋ค Yandex ๊ธฐ๋ฅ)๋ ์ฌ์ฉ์์๊ฒ ์ถ๊ฐ ์ต์
๋ฑ์ ๋์งํธ ์ํ์ ๊ตฌ๋งคํ๋๋ก ์ ์ํ๊ณ , ์ฌ์ฉ์๊ฐ ๊ฒฐ์ ๋ฅผ ์งํํฉ๋๋ค. ์ผ๋ถ ์ง๋ถ ์์คํ
(ํผ๋์ค๋ฝ๊ฒ๋ ์ ์ฌํจ) ) ๊ฒฐ์ ๋ฅผ ์ฒ๋ฆฌํ์ฌ ๊ทํ๊ฐ ์ ๊ณตํ ์ฃผ์๋ก ๋ณด๋
๋๋ค(๋น์ฌ์ ๊ฒฝ์ฐ ์ด๋ ์ ํํ ์ ์๋ ๋งํฌ๊ฐ ๋ฉ๋๋ค) ์๋ฑ์ค ๊ธฐ๋ฅ) HTTP- ์ง๋ถ ๊ธ์ก, ์ง๋ถ์์ ์ฑ๋ช
, ์ ํ๋ฒํธ, ์ด๋ฉ์ผ ์ฃผ์ ๋ฑ ์ง๋ถ ์ธ๋ถ ์ ๋ณด๊ฐ ํฌํจ๋ ์์ฒญ์
๋๋ค. ์๋ฅผ ๋ค์ด, ์ฐ๋ฆฌ๋ ์ด ๋ฐ์ดํฐ๋ฅผ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ฒ๋ฆฌํ๊ณ ์ถ์ต๋๋ค. ๊ธ์ก ํ์ธ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ ํ ํญ๋ชฉ ์
๋ ฅ, ์ฌ์ฉ์์๊ฒ ์ ์ก SMS ะธ ์ด๋ฉ์ผ ์ง๋ถ ์๋ น ํ์ธ ๋ฐ ์ถ๊ฐ ์ง์์ฌํญ์ด ํฌํจ๋์ด ์์ต๋๋ค. ๊ทธ์ ๊ทธ๋ ๋ค ๋ง์ดํฌ๋ก์๋น์ค.
์ด๋ป๊ฒ์ ๊ดํ์ฌ Yandex ๊ธฐ๋ฅ DB์ ํญ๋ชฉ์ ์ ๋ ฅํ๋ค ํด๋ผ์ฐ๋ ์๋ฐฉ์ ์ฐ๋ฆฌ๋ ์ด๋ฏธ ํํ ๋ฆฌ์ผ์์ ๊ทธ๊ฒ์ ์ดํด๋ณด์์ต๋๋ค. (๋์ค์ ๋ค๋ฅธ DB์ ๋ํ ์๋ฅผ ๊ณ ๋ คํด ๋ณผ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ). ์ฌ์ฉ์์๊ฒ ๋ณด๋ด๋ ๋ฐฉ๋ฒ์ ๋ํ์ฌ SMS ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํตํฉํฉ๋๋ค ์๋ฑ์ค.๋จธ๋ โ๊ฐ๊น์ด ๋ฏธ๋์ ์์๋ผ ๊ฑฐ์์. ์ด์ ํธ์ง๋ฅผ ๋ณด๋ด๋ ๋ฐ๋ง ์ง์คํ๊ฒ ์ต๋๋ค.
1. SendGrid์ ๊ณ์ ์์ฑ
์ฃผ์SendGrid๋ ์ ๊ฐ ์ฌ๋ฌ ๊ฐ์ง ์ด์ ๋ก ์ ํํ ์๋น์ค์ ๋๋ค. ๊ฐ์ฅ ํฐ ์ด์ ๋ Node.js์ฉ ๊ธฐ์ฑ SDK๊ฐ ์๋ค๋ ๊ฒ์ ๋๋ค. ๋ค๋ฅธ ์ฐํธ ์๋น์ค๋ฅผ ์ ํํ์ ๋ ๋ฉ๋๋ค.
๊ณ์ํ๋ค ๊ทธ๋ฆฌ๊ณ ๊ฑฐ๊ธฐ์์ ๋ฑ๋ก์์์ ์์ฑํ์ธ์. ๊ทธ ๋ค์์๋ ๋ค์์ผ๋ก ๋์ด๊ฐ๋๋ค. ๋์๋ณด๋, ํ์ ํจ๋์์ ๋ค์์ ์ ํํฉ๋๋ค. ์ด๋ฉ์ผ API -> ํตํฉ ๊ฐ์ด๋, ๊ทธ๋ฆฌ๊ณ ๋ฉ์ธ ํจ๋์์ - ์น API ๊ทธ๋ฆฌ๊ณ ๋ฒํผ์ ๋๋ฌ ์ผ์ชฝ ๋ฉ๋ด์์. ๋ชจ๋ ๊ฒ์ด ๊ทธ๋ฆผ๊ณผ ๊ฐ์ต๋๋ค:

๋ค์ ๋จ๊ณ์์๋ ๋ค์์ ์ ํํฉ๋๋ค. Node.js๋ฅผ:

๊ทธ ๋ค์์๋ ์ฐ๋ฆฌ ์ค์ค๋ก์ ๊ฒ์ ์๊ฐํด ๋ณด์ API-ํค ์ด๋ฆ(์ฝ์์ ํค ๋ชฉ๋ก์์๋ง ํ์๋๋ฉฐ ํฅํ ์ฝ๋์๋ ์๋ฌด ๊ด๋ จ์ด ์์ต๋๋ค. ์ ๋ ์๊ตฌ์ ์ธ ์ด๋ฆ์ ์๊ฐํด๋์ต๋๋ค. ๋ฐ๋ชจ API ํค) ๋ฒํผ์ ๋๋ฆ
๋๋ค. ํค ์์ฑ:

์ด์ ๋ ์์ฑ๋ ๊ฒ์ด๊ณ , ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๋ณต์ฌํด์ ๊ฐ์ฅ ๊น์ ๋น๋ฐ๋ก ๋ณด๊ดํ ๊ฒ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฒํผ์ด ์๋ ํ๋ฉด์ด ์์ ๊ฒ๋๋ค. ํตํฉ ํ์ธ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ํ์ง๋ง ์์ง ํด๋ฆญํ์ง ์๊ณ ์ฝ๋ ์์ฑ์ผ๋ก ๋์ด๊ฐ๊ฒ ์ต๋๋ค.

2. ์ฝ๋ ์์ฑ
๊ทธ๋ฆฌ๊ณ ์ฝ๋ ์์ฒด๋ ๋ณด์๋ค์ํผ 22์ค๋ก, ๋ฏฟ์ ์ ์์ ์ ๋๋ก ์์ต๋๋ค!

์ธ๋ผ์ธ #8 ์ ์ด๋ฉ์ผ์ ํ๋์ฝ๋ฉ๋์ด ์์ด์ ๋ถ๋๋ฝ๊ฒ๋ ๊ฐ๋ ค์ ธ ์์ต๋๋ค. ๋ณธ์ธ์ ์ด๋ฉ์ผ ์ฃผ์๋ฅผ ์๋ ค์ฃผ์ธ์. ์ค์ ๋ก ์ฐ๋ฆฌ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์์ ํ ๊ฒ์
๋๋ค(๋ค์์ ํฌํจํจ) ์ด๋ฉ์ผ) ๊ฐ์ฒด๋ก๋ถํฐ event. ์๋ฅผ ๋ค์ด, ์ด ๋ฐฉ๋ฒ์ ๊ฒฝ์ฐ POST ๊ฐ์ฒด๊ฐ ์ฐ๋ฆฌ ํจ์๋ก ์ ์ก๋ฉ๋๋ค ์ฌ์ฉ์ ํ๋(์์ฑ)๊ฐ ์๋ ์ด๋ฉ์ผ, ์ด ํ๋์ ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ด ์ป์ ์ ์์ต๋๋ค.
const { user } = event;
const email = user.email; ๊ทธ๋ฆฌ๊ณ ์ด๋ฉ์ผ ์ฃผ์๊ฐ ๋ฉ์๋์ ์ํด ํจ์์ ์ ๋ฌ๋๋ ๊ฒฝ์ฐ ๋ฐ๋ก์ : https://functions.yandexcloud.net/123abc?email=user@example.com
๋งค๊ฐ๋ณ์ ๊ฐ ์ด๋ฉ์ผ ๋ค์๊ณผ ๊ฐ์ด ์ป์ ์ ์์ต๋๋ค:
const email = event.queryStringParameters.email;๊ฐ์ฒด์ ์ ํํ ๋ฌด์์ด ํฌํจ๋์ด ์๋์ง ์ดํด๋ณด๋ ค๋ฉด event, ๊ฐ์ฅ ๊ฐ๋จํ ๊ฒ์ ๋ง๋ค ์ ์์ต๋๋ค ์๋ฑ์ค ๊ธฐ๋ฅ ๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ์ฟผ๋ฆฌ๋ก ๋๋ ค๋ณด์ธ์:
module.exports.handler = async function (event) {
return {
'statusCode': 200,
'body': JSON.stringify(event)
};
};์ด์ ๋ํ ์์ธํ ๋ด์ฉ์ (๋ ๋ช ํํ๊ฒ) ๊ณต์ ๋ฌธ์์์ ์ค๋ช ํฉ๋๋ค. .
๊ทธ๋ฌ๋ฉด ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค(์: ์ฐํธ ๋ฐ์ ์ธ), ํ๋ก์ ํธ๋ฅผ ์์ํ๊ณ , ํ๋ก์ ํธ๋ฅผ ์ด๊ธฐํํ๊ณ , ์ข ์์ฑ์ ์ค์นํฉ๋๋ค.
mkdir mailer
cd mailer
npm init -y
npm i @sendgrid/mail email-validator dotenv
์ฌ๊ธฐ์๋ ํจํค์ง๋ง ํ์์ ๋๋ค. @sendgrid/๋ฉ์ผ. ๋น๋ ๋ดํฌ ์ด๋ฉ์ผ ๊ฒ์ฆ๊ธฐ ์ด๋ฉ์ผ ์ฃผ์์ ์ ํจ์ฑ์ ๊ฒ์ฌํฉ๋๋ค(์ด๋ป๊ฒ ๋ฐ๋ก ์ถ์ธกํ์ง ๋ชปํ์๊น์?). ํ์ง๋ง ํ์ ํ๋ค๋ฉด(์ฐ๋ฆฌ๊ฐ ๋ชจ๋ฅด๊ฒ ์ค๋์ ์ ์ด๋ฏธ ๊ฒ์ฌ๊ฐ ๋๋ฌ์ต๋๋ค) ์ค์นํ ํ์๊ฐ ์์ต๋๋ค(๋ฌผ๋ก ์ฝ๋์์ ๊ฒ์ฌํ ํ์๋ ์์ต๋๋ค). ๋น๋๋ด์ง ๋ ํ ํ ํ์ผ์์ ๋ ์ฝ๋๋ฅผ ์ฝ๋๋ก ์ค๊ณ๋์์ต๋๋ค. .env ๋ฐํ์ ๋ณ์๋ก. ๊ทธ๋ฌ๋ Yandex ๊ธฐ๋ฅ ์ด๋ฌํ ๋ณ์๋ฅผ ์คํ ํ๊ฒฝ์ ์ง์ ๋ฐฐ์นํ๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค. ์ด๋ป๊ฒ? - ์๋์ ๋ณด์ฌ๋๋ฆฌ๊ฒ ์ต๋๋ค. ๋ฐ๋ผ์ ํจํค์ง ๋ ํ ํ ๋ํ ์ค์ ํ ์ ์์ผ๋ฉฐ ํ์ผ .env - ์์ฑํ์ง ์๊ณ ๋์์ ์ฝ๋๊ฐ ํ์ผ์ ์์ต๋๋ค. index.js ๋ณ๊ฒฝํ์ง ๋ง์ธ์. ํ์ง๋ง ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ ์ด ํจํค์ง๋ฅผ ์ค์นํ์ผ๋ฏ๋ก ํ์ผ์ ์์ฑํฉ๋๋ค. index.js ะธ .env:
touch index.js
touch .env
ํ์ผ์์ index.js ์์ ์คํฌ๋ฆฐ์ท์ ํ์๋ 22์ค์ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค(์ค์๋ง ์์) #8 ์ด๋ฉ์ผ์ ๋ณ๊ฒฝํ์ธ์) ๋ฐ ํ์ผ์์ .env โ (๋ฐ์ดํ๋ ๊ตฌ๋์ ์์ด) ํค ์ด๋ฆ/๊ฐ ์์ ์ง์ ํฉ๋๋ค. API์ต๊ทผ ์ฝ์์์ ์์ ํ SendGrid:
SENDGRID_API_KEY=๋น์ ์ ์์ฃผ ๋น๋ฐ์ค๋ฌ์ด sendgrid-api-ํค
์์ ๋์ ์ค์ด๊ณ ์ถ๋ค๋ฉด ์ ์ฅ์๋ฅผ ๋ณต์ ํ๊ณ ํจํค์ง๋ฅผ ์ค์นํ์ธ์.
git clone https://github.com/stmike/ycf-sendgrid-mailer-tutorial.git
cd ycf-sendgrid-mailer-tutorial
npm i
ํ์ผ์์ index.js, ์ค์ ์์ #8 ์ด๋ฉ์ผ์ ๋ณ๊ฒฝํ์ธ์ ๋ฃจํธ ๋๋ ํ ๋ฆฌ์ ํ์ผ์ ์์ฑํ์ธ์ .env, ํค์ ์ด๋ฆ/๊ฐ์ ์ง์ ํฉ๋๋ค. API, ๋ฐ๋ก ์์ ํ์๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
3. ๋ฐฐํฌ
๋๋ต์ ์ผ๋ก ๋ช ํํ๊ณ ์์ธํ๊ฒ ์๋ฑ์ค.ํด๋ผ์ฐ๋ ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ๊ฑฐ๊ธฐ์ ์ด๋ป๊ฒ ๋๋๊ฐ ์๋ฑ์ค ๊ธฐ๋ฅ ๋ด ๊ธฐ์ฌ์์ ๋งํ๋ฏ์ด โ ์ด ๋๋ผ๋ฅผ ๋ชจ๋ฅด๋ ๋ถ๋ค๊ณผ ๊ทธ ์ธ ๋ชจ๋ ๋ถ๋ค(๊ทธ๋ฆฌ๊ณ ๊ท๊ตญํ์ ๋ถ๋ค)๊ป๋ ์งง์ ๋งํ(์ฆ, ์ผ๋ จ์ ๊ทธ๋ฆผ๊ณผ ๊ธ)๋ฅผ ์๊ฐํฉ๋๋ค.
๋ง๋ค๋ค ์งํผ- ๋ณด๊ด์(์๋ฅผ ๋ค์ด ์ด๋ ๊ฒ ๋ถ๋ฅด์) ๋ฉ์ผ๋ฌ.zip), ์ฌ๊ธฐ์๋ ์นดํ๋ก๊ทธ๊ฐ ํฌํจ๋ฉ๋๋ค. node_modules ๋ฐ ํ์ผ .env, ์ธ๋ฑ์ค.js โ ํ๋ก์ ํธ ์นดํ๋ก๊ทธ์ ๋ชจ๋ ๋ด์ฉ:

์ฐ๋ฆฌ๋ ...๋ผ๋ ์ด๋ฆ์ผ๋ก ํจ์๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์์ฑํฉ๋๋ค. ์ฐํธ ๋ฐ์ ์ธ, ์ผ์ชฝ ํ์ ๋ฉ๋ด์์ ์ ํํ์ธ์ ํธ์ง๊ธฐ, ํ์ ํ๋๋ฅผ ์
๋ ฅํ๊ณ ํญ์ผ๋ก ์ ํํฉ๋๋ค. ZIP ์์นด์ด๋ธ ์ฐ๋ฆฌ๋ ์์นด์ด๋ธ๋ฅผ ๋ก๋ฉํ๊ณ ์์ต๋๋ค ๋ฉ์ผ๋ฌ.zip:

๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์ ์ด์ ์ ์ธ๊ธ๋ ๋ค์ด๋ก๋ ์ต์
์ด ์์ต๋๋ค API ํค ํ๋ก์ ํธ์ ํ์ผ์ ์์ฑํ๋ ๋์ ๋ฐ๋ก ์ฌ๊ธฐ์์ .env, ํจํค์ง๋ฅผ ์ค์นํ์ง ๋ง์ธ์ ๋ ํ
ํ. ํ์ง๋ง ์ฐ๋ฆฌ๋ ์ด๋ฏธ ์ด ๋ชจ๋ ๊ฒ์ ๋๋๊ธฐ ๋๋ฌธ์ ์ ๋ณด ์ ๊ณต ์ฐจ์์์ ๋ณด์ฌ๋๋ฆฌ๊ฒ ์ต๋๋ค. ์ฆ, ๋ณต์ ํ ํ์๊ฐ ์์ต๋๋ค!

์ด์ ์ค๋ฅธ์ชฝ ์๋จ ๋ชจ์๋ฆฌ์์ ๋ฒํผ์ ๋๋ฆ
๋๋ค. ๋ฒ์ ๋ง๋ค๊ธฐ, ๋ช ์ด๊ฐ ๊ธฐ๋ค๋ฆฌ์ธ์. ๋ชจ๋ ๊ฒ์ด ์ค๋น๋๋ฉด ์๋์ผ๋ก ์น์
์ผ๋ก ์ด๋ํฉ๋๋ค. ๊ฒํ . ๊ฑฐ๊ธฐ์ ํด๋น ์ต์
์ ํ์ฑํํ๊ฒ ์ต๋๋ค. ๊ณต๊ณต ๊ธฐ๋ฅ์ด๋ฅผ ํตํด ์ธ๋ถ ์ธ๊ณ์ ์ํธ ์์ฉํ ์ ์์ต๋๋ค.

๋น๋ฌธ ๋ฐ๋ํธ์ ํ๋์ ๋งํฌ๋ฅผ ์ฐธ์กฐํ์ธ์. ํตํ ๋งํฌ? ํด๋ฆญํด ๋ณด์ธ์. ๋น ๋ธ๋ผ์ฐ์ ์ฐฝ์ด ์ด๋ฆฝ๋๋ค... ํ์ง๋ง ๊ธฐ๋ค๋ฆฌ์ธ์. ํธ์ง๋ฅผ ๋ฐ์์ต๋๋ค.

์ด์ ์ฝ์๋ก ๋์๊ฐ ์ ์์ต๋๋ค. SendGrid, ๋ฒํผ์ ๋๋ฅด์ธ์ ํตํฉ ํ์ธ. ์์คํ
์ ์ฑ๋์ ํตํด ๋ชจ๋ ๊ฒ์ ๊ฒ์ฌํ๊ณ ๊ทธ ๊ฒฐ๊ณผ ๋ค์๊ณผ ๊ฐ์ ํ๋ฉด์ ๋ฐํํด์ผ ํฉ๋๋ค.

์ด์ ๋ค ์์
จ์ฃ , ์ฌ๋ฌ๋ถ(๋ฌผ๋ก ์๋
๋ค๋์) โ ์ ๋ง ๊ฐ๋จํ๊ณ ์ฐ์ํ์ฃ ! ๋ ๋ง์ ๊ธฐ์ฌ๊ฐ ๋์ฌ ๊ฒ๋๋ค. ์ด๋ฐ ๋ด์ฉ์ ์ฝ๋ ๋ฐ ๊ด์ฌ์ด ์๋ค๋ฉด ๊ตฌ๋
ํ์ฌ ์๋ฌด๊ฒ๋ ๋์น์ง ๋ง์ธ์.
4. ๋๋
์ถ์ฒ : habr.com
