์ด๊ฒ์ ์๋ง๋ ํน์ ๋ฐฉ์์ผ๋ก ์์
ํ๊ธฐ๋ก ๊ฒฐ์ ํ ๊ฒ์ผ ์ ์์ง๋ง์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ 3.0.4 ๋ฒ์ ์์๋ sg.API
์ ๋ฌ ๋ ์ฝ๋ฐฑ์ด function (error, data)
๋์ API ์๋ต์ ํญ์ ์ฒซ ๋ฒ์งธ ๊ฐ์ฒด๋ก ๋ฐํ๋ฉ๋๋ค.
์ด์ ์์ API ์๋ต์ ํด๋ ํ๊ณ ์๋ต ํค๋์ ์ํ ์ฝ๋๋ฅผ ์๋์ผ๋ก ๋ถ์ํด์ผํ๋ฏ๋ก ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋์ง ํ์ธํ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค.
๋๋ ์ด๊ฒ์ด ์ฌ์ฉ์ ํ ์ง์ ์ฑ ์์ด ์๋๋ผ ๋์๊ด ์์ฒด์ ์ฑ ์์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ํ ์ฝ๋๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ด๋ป๊ฒ๋ฉ๋๊น? ์๋ต ํ์์ด ๋ณ๊ฒฝ๋๋ฉด ์ด๋ป๊ฒ๋ฉ๋๊น? ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ณ ๋ฐํ ๋ ๋ฐ์ดํฐ ํ์์ด ๋ฌ๋ผ ์ง๊ฑฐ๋ null ๋๋ ์ ์๋์ง ์์ผ๋ฉด ์ด๋ป๊ฒ๋ฉ๋๊น?
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ํ ํ ์์๋ ์ต์ํ์ ๋ฐฉ๋ฒ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋์ง ์ฌ๋ถ๋ฅผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์ธํ๊ณ , ๊ทธ๋ ๋ค๋ฉด ์ฒซ ๋ฒ์งธ ๋งค๊ฐ ๋ณ์๋ฅผ ์ค๋ฅ ๊ฐ์ฒด๋ก ์ฑ์ฐ๋ ๊ฒ์
๋๋ค (์๋ต์ด ์ฒจ๋ถ ๋ ์ ์์). ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์ผ๋ฉด null
๋ฅผ ์ฒซ ๋ฒ์งธ ๋งค๊ฐ ๋ณ์๋ก, ์๋ต ๊ฐ์ฒด๋ฅผ ๋ ๋ฒ์งธ ๋งค๊ฐ ๋ณ์๋ก ๋ฐํํฉ๋๋ค.
๋ด ํ์ฌ ์๋ฃจ์ ์ ์ํ ์ฝ๋์ ์ฑ๊ณต ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ๊ฒ์ ๋๋ค. ์ :
function sendMail(mail) {
return new Promise((resolve, reject) => {
//Build request
let request = sg.emptyRequest();
request.method = 'POST';
request.path = '/v3/mail/send';
request.body = mail.toJSON();
//Send request
sg.API(request, response => {
if (response && response.statusCode &&
response.statusCode >= 200 && response.statusCode <= 299) {
resolve(response);
}
reject(new SendMailError(
'Sendgrid response error ' + response.statusCode
));
});
});
}
๋ณด์๋ค์ํผ ์ด๊ฒ์ ๋งค์ฐ ์ฅํฉํ๋ฉฐ ๋จ์ํ ์ด๋ฉ์ผ์ ๋ณด๋ด๊ณ ์๋ํ๋์ง ํ์ธํ๊ธฐ ์ํด ๋ง์ ์์ฉ๊ตฌ๊ฐ ํ์ํฉ๋๋ค.
์ ์ ๋ API๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
function sendMail(mail) {
return new Promise((resolve, reject) => {
//Build request
let request = sg.emptyRequest();
request.method = 'POST';
request.path = '/v3/mail/send';
request.body = mail.toJSON();
//Send request
sg.API(request, (error, response) => {
if (error {
reject(new SendMailError(error);
}
resolve(response);
});
});
}
๋๋ ๋ ๋์ ๋ฐฉ๋ฒ์ผ๋ก ์ฝ์์ด ๋ฐํ๋์์ต๋๋ค.
function sendMail(mail) {
//Build request
let request = sg.emptyRequest();
request.method = 'POST';
request.path = '/v3/mail/send';
request.body = mail.toJSON();
//Send request
return sg.API(request);
}
์ด์์ ์ผ๋ก๋ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ ์ ํ ์์ฒญ์ ์์ฑํ๋ ์ ์ฉ ๋ฉ์ผ ์ ์ก ๋์ฐ๋ฏธ๊ฐ ๋ฐํ๋์ด sendMail ๋์ฐ๋ฏธ์ ์์ฉ๊ตฌ๊ฐ ๋ชจ๋ ํ์ํ์ง ์์ต๋๋ค.
sg.sendMail(mail);
์ด๊ฒ์ด ๋น์ ์ด ์ถ๊ตฌํ๊ณ ์ถ์ ๊ฒ์ด ์๋ค๋ฉด ๋๋ ๊ทธ๊ฒ์ ์ํด PR์ ๋ง๋๋ ๊ฒ์ ์กฐ์ฌ ํ ๊ฒ์ ๋๋ค.
๊ฐ์ฌํฉ๋๋ค @adambuczynski ,
์ผ๋ฐ์ ์ผ๋ก ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ์ ๋ฐ์ดํธ ํ ๊ณํ์ด์ง๋ง ์์ง ๋ฒ์๋ฅผ ์ง์ ํ์ง ์์์ต๋๋ค. ๊ทธ๋๊ฐ๋๋ฉด์ด ํผ๋๋ฐฑ์ ๊ณ ๋ คํ ๊ฒ์ ๋๋ค.
ํ ์์ฒญ์ ์ ๊ณตํ๋ ค๋ฉด ์๋ช ๋ CLA๊ฐ ํ์ํฉ๋๋ค. https://github.com/sendgrid/sendgrid-nodejs/blob/master/CONTRIBUTING.md#cla
์ฐ๋ฆฌ๋ ๋น์ ์ด ์ ์ํ๋ ํฅ์์ ์ข ๋ฅ์ ๋ํ ํฌํผ ๊ตฌ์กฐ๋ฅผ ์ค์ ํ์ต๋๋ค : https://github.com/sendgrid/sendgrid-nodejs/tree/master/lib/helpers/mail. ์ด๋ฅผ ์์ ํ๋ ๋ฐ ๋์์ ์ฃผ๊ฑฐ๋ helpers ๋๋ ํ ๋ฆฌ์์ ์ง์ ๋ง๋ค ์ ์์ต๋๋ค.
๊ทํ์ ์ง์์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
์, ๋ฉ์ผ ๋์ฐ๋ฏธ๋ฅผ ๋ณด์์ต๋๋ค. ํด๋น ๊ฐ์ฒด์ ๋ฉ์ผ ๋ณด๋ด๊ธฐ ๋์ฐ๋ฏธ๋ฅผ ๋ง๋ค๊ฒ ์ต๋๊น?
๊ทธ๊ฒ์ ๋์๊ฒ ์ข์ ์๋ฆฌ :)
@adambuczynski ๊ฐ ์ ์ํ ์ ์์ด ์์ต๋๋ค. ๋ฐฉ๊ธ v3 API๋ก ์ ๋ฐ์ดํธํ๊ณ ๋ ์ด์ ๊ฐ๋จํ ๋์ฐ๋ฏธ ํจ์๋ฅผ ์ฌ์ฉํ ์์๊ณ ๋์ ์ผ๋ จ์ ์์ฉ๊ตฌ ์ฝ๋๋ฅผ ์์ฑํด์ผํ๋ค๋ ์ ์ ๋งค์ฐ ์ค๋งํ์ต๋๋ค. ์ถ์ ํ ์ค๋ฅ ์ฒ๋ฆฌ ์ฝ๋๋ฅผ ์์ฑํ์ง ์๊ณ ๋ ๋ ์ด์ Bluebird promise๋ก ๋ํ ํ ์๋ ์์ต๋๋ค.
@beldenge ์ ํจ์ฑ ๊ฒ์ฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
์งํ์ ์ํด์ด ๋ฌธ์ ๋ฅผ ๋ฐ๋ฅด์ญ์์ค. @adambuczynski ๊ฐ pull ์์ฒญ์ ์์ฑํ๋ฉด ์ฌ๊ธฐ์ ๊ฒ์ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๋ฐ์ดํธ ์ค ํ๋๋ฅผ ์ํด ๋ก๋๋งต์ ์ถ๊ฐ ํ ๊ฒ์ ๋๋ค.
@thinkingserious ๋ฐฉ๊ธ ์๋ช ๋ CA๋ฅผ ์ฐํธ์ผ๋ก ๋ณด๋์ต๋๋ค. ๋ค์ ์ฃผ์์ด ๋ฌธ์ ๋ฅผ ์กฐ์ฌ ํ ์๊ฐ์ด ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
@adambuczynski ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๋ฐ์์ผ๋ฉฐ ํผ๋๋ฐฑ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
์๋ ํ์ธ์ ์ฌ๋ฌ๋ถ, ์ด๊ฒ์ ๋ํด ์์ ๊ฒ์ ์๋์ง๋ง ์ ๋ ๋ค๋ฅธ ์ฌ๋ฌ ํ๋ก์ ํธ๋ก ์กฐ๊ธ ๋ฐ๋นด์ต๋๋ค. ์ฌ์ ํ ์ด๋ค ๋จ๊ณ์์ ์ด๊ฒ์ ์กฐ์ฌํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. :)
@thinkingserious ์์ค ์ฝ๋๋ฅผ ์ดํด ๋ดค์ง๋ง ์กฐ๊ธ ์ง์ ๋ถ ํด ๋ณด์ ๋๋ค. ํธ์งํ๋ฉด ์ฝ๋ ๋ฆฐํฐ๊ฐ ์๋์ผ๋ก ๋ง์ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค (์ : ๋๋ฝ ๋ ์ธ๋ฏธ์ฝ๋ก ์ถ๊ฐ, ๋ฌธ์์ด์ ์ผ๊ด๋ ๋ฐ์ดํ ์คํ์ผ ์ฌ์ฉ, ์ธ์ด ์์ ์ฌ์ด์ ์ผ๊ด๋ ๊ฐ๊ฒฉ ์ฌ์ฉ ๋ฑ).
๊ทธ๋ฐ ์ผ์ด ์ผ์ด๋๋ ๊ด์ฐฎ์ต๋๊น? ๋๋ ๊ทธ๊ฒ์ ๋ณด๋ ๊ฒ์ด ๋ด ๋๋๋ฅผ ์ํ๊ฒํ๊ธฐ ๋๋ฌธ์ ์ฝ๋๋ก ์์ ํ ์ ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. :)
์ถ์ : ๋ฆฐํฐ๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ด์ :)
@adambuczynski ,
ํ์ค ์คํ์ผ ๊ฐ์ด๋์ ํจ๊ป http://eslint.org ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ด๋ ๊ฒ์ ์ฌ์ฉํฉ๋๊น? ๋๊ธฐํํ๊ณ ๋์ผํ ๋ฆฐํฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ฉด ๋ฉ์ง ๊ฒ์ ๋๋ค.
ESLiint๋ ์ฌ์ฉํ์ง๋ง ์ฝ๋์ ์ฌ์ ํ ๋ง์ ๋ถ์ผ์น๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ง์ ๊ท์น์ ์ ์ฉํ๋ ๊ฒ ๊ฐ์ง ์์ต๋๋ค.
์ด๊ฒ์ด ๋ด๊ฐ ์ฌ์ฉํ๋ ๊ตฌ์ฑ์ ๋๋ค : https://gist.github.com/adambuczynski/1fa24bcfc5d17b8d26e4c39ffca7560e#file -eslintrc-node-yaml
๋๋ ๊ทธ๊ฒ์ด ์ผ๊ด์ฑ๊ณผ ๋ชจ๋ฒ ์ฌ๋ก ์ฌ์ด์ ์ข์ ๊ท ํ์ ์ ๊ณตํ๋ค๊ณ ์๊ฐํ์ง๋ง ๋๋ฌด ์ง์ฆ๋ ์ง ์์ต๋๋ค.
ํ๋ก์ ํธ์ .eslintrc.yaml
๊ตฌ์ฑ ํ์ผ์ด ์์ต๋๋ค. ์ ํธํ๋ ๊ท์น์ ์ถ๊ฐ / ๋ง๋ค๋ฉด ๋๋ ์ฌ์ฉํ ์ ์์ต๋๊น?
@adambuczynski ,
๋๋ ๋น์ ์ ๊ฒ์ ์ฌ์ฉํ๊ฒ๋์ด ๊ธฐ์ฉ๋๋ค. ๋จ๋จํด ๋ณด์ ๋๋ค. :)
์ปค๋ฐ์ ์ผ๋ถ๋ก ์ถ๊ฐํ์ธ์.
์ฌ์ฉํ ๋ @thinkingserious ๊ทธ๊ฒ์ ES6์ ๋ํ ์ค์ ์ด ์์ง๋ง ๊ธฐ๋ฅ ์๋ฅผ ๋ค์ด, ๊ฒฝ๊ณ ์
๋๋ค var
๋์ let
ํ๊ณ ES6 ํ์๋ฅผ ์ฌ์ฉํ์ฌ.
๊ด์ฐฎ์ต๋๊น, ์๋๋ฉด ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ์ํด์๋ง ES5๋ฅผ ์ฌ์ฉ ํ์๊ฒ ์ต๋๊น?
Node.js ๋ฒ์ ์ ์ง์ํด์ผํฉ๋๋ค : "0.10", "0.12", "iojs", "4"
ํด๋น ๋ฒ์ ์ ๋ํ ์ง์์ ์ค๋จํ์ง ์์ผ๋ฉด ๋ ํ๋์ ์ธ ์ ๊ทผ ๋ฐฉ์์ผ๋ก ๊ด์ฐฎ์ต๋๋ค.
์ข์, ๋๋ var๋ฅผ ์ ์งํ๊ณ ๋ฐ์ํ ์ฝ๋ ์คํ์ผ ๋ฌธ์ ๋ฅผ ์์ ํ์ต๋๋ค. ์ด๋ฒ ํธ์๋ ๋ณ๋๋ก PR์ ์์ฑํ์ต๋๋ค.
@thinkingserious Promise API๋ ๊ตฌํํ๊ณ ์์ง๋ง ๊ธฐ๋ณธ ์ฝ์์ Node 0.11.13์์๋ง ๋์ ๋์์ต๋๋ค.
๋ช ๊ฐ์ง ์๋ฃจ์ , ์ ํธํ๋ ์กฐํฉ (๋๋ ์กฐํฉ)์ ์๋ ค์ฃผ์ธ์.
bluebird
promise๋ฅผ ์ข
์์ฑ์ผ๋ก ์ฌ์ฉsendgrid.Promise
๋ฅผ ์ค์ ํ์ฌ ์ฌ์ฉํ๋ ค๋ promise ๊ตฌํ์ ์ค์ ํ ์ ์์ต๋๋ค.์๋ง๋ 2์ 3์ ์กฐํฉ์ด ๊ฐ์ฅ ๊ฐ๋จํ๊ณ ๊ฐ์ฅ ์ ์ฐ ํ ๊ฒ์ ๋๋ค.
๋์ํฉ๋๋ค.
์ ๋์ด ์ต์ ์ด ๋ง์์ ๋ญ๋๋ค. "Promise๊ฐ ์ง์๋๋์ง ํ์ธํ๊ณ ์ง์๋์ง ์๋ ๊ฒฝ์ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง๋ง ์ฌ๋๋ค์ด ์ฌ์ฉํ๋ ค๊ณ ํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค."ํ์ง๋ง ์ฌ์ฉ์๊ฐ ์ํ๋ ๊ตฌํ์ ์ง์ ํ ์๋ ์์ต๋๋ค.
@thinkingserious ์๋ฒฝํฉ๋๋ค. ๊ฒํ ํ ์ค๋น๊ฐ ๋ ๊ฒ์ด ์์ต๋๋ค. ๋์ผํ PR๋ก ํธ์ํ ๊น์, ์๋๋ฉด ๋ณ๋์ PR์ ๋ง๋ค๊น์?
@adambuczynski ๋น์ ์ ๋์ผํ PR์ ์ ์งํ ์ ์์ต๋๋ค, ๊ฐ์ฌํฉ๋๋ค!
# 261 ์ฐธ์กฐ
@beldenge PR https://github.com/sendgrid/sendgrid-nodejs/pull/261์ +1์ ์ถ๊ฐํ์ฌ Sendgrid ํ์ด์ด๋ฅผ ์ด๋ํ๊ณ ๋ณํฉ์ ๊ณ ๋ คํ ์ ์๋๋ก ํ์๊ฒ ์ต๋๊น? ๊ฐ์ฌ!
@adambuczynski ์ด์ +1์ ์ถ๊ฐํ๊ฒ ์ต๋๋ค :)
https://github.com/sendgrid/sendgrid-nodejs/releases/tag/v4.0.0์ผ๋ก ์์ ๋์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ด ํ์ฌ ์๋ฃจ์ ์ ์ํ ์ฝ๋์ ์ฑ๊ณต ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ๊ฒ์ ๋๋ค. ์ :
๋ณด์๋ค์ํผ ์ด๊ฒ์ ๋งค์ฐ ์ฅํฉํ๋ฉฐ ๋จ์ํ ์ด๋ฉ์ผ์ ๋ณด๋ด๊ณ ์๋ํ๋์ง ํ์ธํ๊ธฐ ์ํด ๋ง์ ์์ฉ๊ตฌ๊ฐ ํ์ํฉ๋๋ค.
์ ์ ๋ API๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋๋ ๋ ๋์ ๋ฐฉ๋ฒ์ผ๋ก ์ฝ์์ด ๋ฐํ๋์์ต๋๋ค.
์ด์์ ์ผ๋ก๋ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ ์ ํ ์์ฒญ์ ์์ฑํ๋ ์ ์ฉ ๋ฉ์ผ ์ ์ก ๋์ฐ๋ฏธ๊ฐ ๋ฐํ๋์ด sendMail ๋์ฐ๋ฏธ์ ์์ฉ๊ตฌ๊ฐ ๋ชจ๋ ํ์ํ์ง ์์ต๋๋ค.
์ด๊ฒ์ด ๋น์ ์ด ์ถ๊ตฌํ๊ณ ์ถ์ ๊ฒ์ด ์๋ค๋ฉด ๋๋ ๊ทธ๊ฒ์ ์ํด PR์ ๋ง๋๋ ๊ฒ์ ์กฐ์ฌ ํ ๊ฒ์ ๋๋ค.