์ค๋ ์ฐ๋ฆฌ๋ ์์๋ฅผ ๋ง๋ค ๊ฒ์
๋๋ค. ์๋ฑ์ค ๊ธฐ๋ฅ (๊ณต์ ๋ช
์นญ
๋๋ ๋ํ ์ ํต์ ์ธ ์๋ฒ์ ๋ฐ๋์(๊ด์ ์ฃผ์๋ ์๋)์ด์ ์์ ๋งํ๋ ์ง์ง์์
๋๋ค. ์๋ฒ๋ฆฌ์ค (์๋ฒ๋ฆฌ์ค) ์๋ฃจ์
์ ์๋ฒ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ ์ข์ํ์ง ์์ผ๋ฉฐ(์ด๋ป๊ฒ ํ๋์ง๋ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์) ๋ก๋๋์ง ์์ ์๊ฐ์ ๋ํ ๋น์ฉ์ ์ง๋ถํด์ผ ํ๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ ๋ค๋ฅธ ๊ฒ์ ๊ธฐ๋ฅ์
๋๋ค. ๋ ์์ด ๋๊ตฐ๊ฐ ์๋น์ค๋ฅผ ์ ๊ณตํ๊ณ , ๋๋ ํตํ ์๊ธ๋ง ์ง๋ถํ๋ค. 2019๋
XNUMX์ ์ด Yandex๋ Yandex ํด๋ผ์ฐ๋ ๊ธฐ๋ฅ - ๋ฌ์์ ์ฐ๋ฐฉ ์ต์ด์ธ ๊ฒ ๊ฐ์ต๋๋ค. ์๋ฒ๋ฆฌ์ค. ๊ทธ๋ฆฌ๊ณ ํนํ ์ข์ ์ ์ ์จ๋ฆฌ์ค์ ์คํฌ์ ์ผ๋ฐ์ ์ผ๋ก ๋ฌด๋ฃ์ด๊ธฐ ๋๋ฌธ์ ๊ทธ ์ดํ๋ก ๋ด ์ฃผ๋ณ ์์ผ์ ์๋ค๋ ๊ฒ์
๋๋ค. ํ์ง๋ง ์ด๋ฏธ ์์ํด๋ณด์.
์ด ์๋๋ฆฌ์ค๋ฅผ ์์ํด ๋ด
์๋ค. ๊ทํ์ ์ ํ๋ฆฌ์ผ์ด์
(์: Alice์ ์คํฌ
๋ฐฉ๋ฒ์ ๋ํด Yandex ๊ธฐ๋ฅ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํญ๋ชฉ์ ๋ง๋ญ๋๋ค ํด๋ผ์ฐ๋ ์๋ฐฉ์ ์ฐ๋ฆฌ๋ ์ด๋ฏธ ํํ ๋ฆฌ์ผ์์ ์ดํด๋ดค์ฃ
1. SendGrid์์ ๊ณ์ ๋ง๋ค๊ธฐ
์ฃผ์SendGrid๋ ์ ๊ฐ ์ ํํ ์ฌ๋ฌ ๊ฐ์ง ์ด์ ์ค ํ๋์ ๋๋ค. ๊ฐ์ฅ ํฐ ์ด์ ๋ Node.js์ฉ SDK๊ฐ ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ ธ ์๋ค๋ ๊ฒ์ ๋๋ค. ๋ค๋ฅธ ์ฐํธ ์๋น์ค๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
๊ณ์ํ๋ค
๋ค์ ๋จ๊ณ์์ ์ฐ๋ฆฌ๋ ์ ํํฉ๋๋ค Node.js๋ฅผ:
๋ค์์ผ๋ก ์ฐ๋ฆฌ๋ ์ฐ๋ฆฌ๋ฅผ ์ํด ์๊ฐํด API-ํค ์ด๋ฆ(์ฝ์์ ํค ๋ชฉ๋ก์๋ง ํ์๋๋ฉฐ ํฅํ ์ฝ๋์๋ ์๋ฌด๋ฐ ๊ด๋ จ์ด ์์ต๋๋ค. ๋ฐฉ๊ธ ๋ถ๋ฉธ์ ์ด๋ฆ์ ์๊ฐํด ๋์ต๋๋ค. ๋ฐ๋ชจ API ํค) ๋ฒํผ์ ๋๋ฆ
๋๋ค. ํค ์์ฑ:
ํค๊ฐ ์์ฑ๋๋ฉด ์ฐ๋ฆฌ๋ ์ด๋ฅผ ๋ณต์ฌํ์ฌ ๊ฐ์ฅ ๊น์ ๋น๋ฐ๋ก ๋ณด๊ดํ ๊ฒ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฒํผ์ด ์๋ ํ๋ฉด์ด ์์ต๋๋ค. ํตํฉ ํ์ธ, ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์์ง ํด๋ฆญํ์ง๋ ์์ง๋ง ์ฝ๋ ์์ฑ์ผ๋ก ๋์ด ๊ฐ์๋ค.
2. ์ฝ๋ ์์ฑ
๊ทธ๋ฌ๋ ๋ณด์๋ค์ํผ ์ฝ๋ ์์ฒด๋ 22์ค๋ก ์์ฒญ๋๊ฒ ์์ต๋๋ค!
์ธ๋ผ์ธ #8 ๋ด ์ด๋ฉ์ผ์ ํ๋์ฝ๋ฉ๋์ด ์์ผ๋ฏ๋ก ์์ค๊ฒ ์จ๊ฒจ์ง๋๋ค. ๊ทํ์ ์ด๋ฉ์ผ์ ๋ช
์ํด ์ฃผ์ธ์. ์ค์ํ์์ ์ฐ๋ฆฌ๋ ๋ชจ๋ ๋ฐ์ดํฐ(ํฌํจ)๋ฅผ ๋ฐ๊ฒ ๋ฉ๋๋ค. ์ด๋ฉ์ผ) ๊ฐ์ฒด์์ event. ์๋ฅผ ๋ค์ด, ๋ค์ ๋ฐฉ๋ฒ์ ๊ฒฝ์ฐ POST ๊ฐ์ฒด๊ฐ ์ฐ๋ฆฌ ํจ์๋ก ์ ์ก๋ฉ๋๋ค ์ฌ์ฉ์ ํ๋(์์ฑ) ํฌํจ ์ด๋ฉ์ผ, ์ด ํ๋์ ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ด ์ป์ ์ ์์ต๋๋ค.
const { user } = event;
const email = user.email;
๊ทธ๋ฆฌ๊ณ ์ด๋ฉ์ผ ์ฃผ์๊ฐ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํจ์์ ์ ๋ฌ๋๋ฉด ๋ฐ๋ก์ : https://functions.yandexcloud.net/123abc?[email protected]
๋งค๊ฐ๋ณ์ ๊ฐ ์ด๋ฉ์ผ ๋ค์๊ณผ ๊ฐ์ด ์ป์ ์ ์์ต๋๋ค:
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-key
์์ ๋์ ์ค์ด๊ณ ์ถ๋ค๋ฉด ์ ์ฅ์๋ฅผ ๋ณต์ ํ๊ณ ํจํค์ง๋ฅผ ์ค์นํ์ธ์.
git clone https://github.com/stmike/ycf-sendgrid-mailer-tutorial.git
cd ycf-sendgrid-mailer-tutorial
npm i
ํ์ผ์์ index.js, ์ผ๋ ฌ๋ก #8 ์ด๋ฉ์ผ์ ๋ฐ๊พธ๋ค; ๋ฃจํธ ๋๋ ํฐ๋ฆฌ์ ํ์ผ ์์ฑ .env, ์ฌ๊ธฐ์๋ ํค์ ์ด๋ฆ/๊ฐ์ด ํ์๋ฉ๋๋ค. API, ๋ฐ๋ก ์์ ํ์๋ ๊ฒ์ฒ๋ผ.
3. ๋ฐฐํฌ
์ ๋ํด ๋ค์ ๋ช
ํํ๊ณ ์์ธํ๊ฒ ์๋ฑ์ค.ํด๋ผ์ฐ๋ ๊ทธ๋ฆฌ๊ณ ๊ฑฐ๊ธฐ์ ์ด๋ป๊ฒ ๋๋์ง ์๋ฑ์ค ๊ธฐ๋ฅ ๋ด ๊ธฐ์ฌ์ ์ค๋ช
๋
๋ง๋ค๋ค ์งํผ-archive(์๋ฅผ ๋ค์ด, ๋ฉ์ผ๋ฌ.zip), ์ฌ๊ธฐ์๋ ๋๋ ํ ๋ฆฌ๊ฐ ํฌํจ๋ฉ๋๋ค. node_modules ๋ฐ ํ์ผ .env, index.js - ํ๋ก์ ํธ ์นดํ๋ก๊ทธ์ ๋ชจ๋ ๊ฒ:
์ฐ๋ฆฌ๋ ์ด๋ฆ์ด... ์ฌ๋ฐ๋ฅด๊ฒ -์ธ ํจ์๋ฅผ ๋ง๋ญ๋๋ค. ์ฐํธ ๋ฐ์ ์ธ, ์ผ์ชฝ ํ์ ๋ฉ๋ด์ ์
๋ ฅํฉ๋๋ค. ํธ์ง๊ธฐ, ํ์ ํญ๋ชฉ์ ์
๋ ฅํ๊ณ ํญ์ผ๋ก ์ ํํ์ธ์. ZIP ์์นด์ด๋ธ ์ฐ๋ฆฌ ์์นด์ด๋ธ๋ฅผ ๋ค์ด๋ก๋ํ์ธ์ ๋ฉ์ผ๋ฌ.zip:
์ด์ ์ ์ธ๊ธํ ๋ค์ด๋ก๋ ์ต์
์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. API ํค ํ๋ก์ ํธ์์ ํ์ผ์ ์์ฑํ๋ ๋์ ์ฌ๊ธฐ์์ ์ง์ .env, ํจํค์ง๋ฅผ ์ค์นํ์ง ๋ง์ญ์์ค ๋ ํ
ํ. ํ์ง๋ง ์ฐ๋ฆฌ๋ ์ด๋ฏธ ์ด ๋ชจ๋ ์์
์ ์ํํ์ผ๋ฏ๋ก ์ฐธ๊ณ ์ฉ์ผ๋ก๋ง ๋ณด์ฌ ๋๋ฆฌ๊ฒ ์ต๋๋ค. ์ฆ, ๋ณต์ ํ ํ์๊ฐ ์์ต๋๋ค!
์ด์ ์ค๋ฅธ์ชฝ ์๋จ์ ์๋ ๋ฒํผ์ ํด๋ฆญํ์ธ์. ๋ฒ์ ๋ง๋ค๊ธฐ, ๊ทธ๋ฆฌ๊ณ ๋ช ์ด ์ ๋ ๊ธฐ๋ค๋ฆฝ๋๋ค. ๋ชจ๋ ๊ฒ์ด ์ค๋น๋๋ฉด ์๋์ผ๋ก ํด๋น ์น์
์ผ๋ก ์ด๋ํฉ๋๋ค. ๊ฒํ . ๊ฑฐ๊ธฐ์์ ์ต์
์ ํ์ฑํํ๊ฒ ์ต๋๋ค ๊ณต๊ณต ๊ธฐ๋ฅ์ธ๋ถ ์ธ๊ณ์ ์ํธ์์ฉํ ์ ์๋๋ก ๋ง์ด์ฃ .
๋น๋ฌธ ๋ฐ๋ํธ์ ํ๋์ ๋งํฌ๊ฐ ํ์๋ฉ๋๋ค. ํตํ ๋งํฌ? ํด๋ฆญํ์ธ์. ๋น ๋ธ๋ผ์ฐ์ ์ฐฝ์ด ์ด๋ฆฝ๋๋ค... ๊ทธ๋ฐ๋ฐ ์ ๊น๋ง์. ์ด๋ฉ์ผ์ ๋ฐ์์ต๋๋ค:
์ด์ ์ฝ์๋ก ๋์๊ฐ ์ ์์ต๋๋ค SendGrid, ๋ฒํผ์ ๋๋ฌ ํตํฉ ํ์ธ. ์์คํ
์ ์ฑ๋์ ํตํด ๋ชจ๋ ๊ฒ์ ํ์ธํ๊ณ ๊ทธ ๊ฒฐ๊ณผ ๋ค์๊ณผ ๊ฐ์ ํ๋ฉด์ ๋ฐํํด์ผ ํฉ๋๋ค.
๊ทธ๊ฒ ๋ค์
๋๋ค, ๋จ์๋ค (๊ทธ๋ฆฌ๊ณ ์ฌ์๋ค๋ ๋ฌผ๋ก ) - ๋ชจ๋ ๊ฒ์ด ์ ๋ง ๋งค์ฐ ๊ฐ๋จํ๊ณ ์ฐ์ํฉ๋๋ค! ๋ ๋ง์ ๊ธฐ์ฌ๊ฐ ์์ ์์ ์
๋๋ค. ์ด๋ฐ ๋ด์ฉ์ ์ฝ๊ณ ์ถ์ ์ฌ๋์ด ์๋ค๋ฉด ๋์น์ง ์๋๋ก ๊ตฌ๋
ํ์ธ์.
4. ๊ธฐ๋ถ
์ถ์ฒ : habr.com