์ผ๋ง ์ ๊ณ ์์ง์ ์ง์ํ๋ JavaScript ๊ฐ๋ฐ์๋ฅผ ์ธํฐ๋ทฐํ์ต๋๋ค. ์ธํฐ๋ทฐ์ ํจ๊ป ์ฐธ์ํ ๋๋ฃ๋ ํ๋ณด์์๊ฒ HTTP ์์ฒญ์ ๋ง๋ค๊ณ , ์คํจํ ๊ฒฝ์ฐ ์ฌ๋ฌ ๋ฒ ์ฌ์๋ํ๋ ํจ์๋ฅผ ์์ฑํด ๋ฌ๋ผ๊ณ ์์ฒญํ์ต๋๋ค.
๊ทธ๋ ๋ณด๋์ ์ง์ ์ฝ๋๋ฅผ ์ผ๊ธฐ ๋๋ฌธ์ ๋๋ต์ ์ธ ๊ฒ์ ๊ทธ๋ฆฌ๋ ๊ฒ์ผ๋ก ์ถฉ๋ถํ ๊ฒ์ ๋๋ค. ๋ง์ผ ๊ทธ๊ฐ ๋ฌธ์ ๊ฐ ๋ฌด์์ธ์ง ์ ์ดํดํ๊ณ ์๋ค๋ ์ ๋ง ๋ณด์ฌ์ฃผ์๋ค๋ฉด ์ฐ๋ฆฌ๋ ์๋นํ ๋ง์กฑํ์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋ถํํ๊ฒ๋ ๊ทธ๋ ์ฑ๊ณต์ ์ธ ํด๊ฒฐ์ฑ ์ ์ฐพ์ง ๋ชปํ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ฐ๋ฆฌ๋ ํฅ๋ถํด์ ์์ ์ ์ข ๋ ์ฝ๊ฒ ๋ง๋ค๊ธฐ๋ก ๊ฒฐ์ ํ๊ณ ๊ทธ์๊ฒ ์ฝ๋ฐฑ์ด ์๋ ํจ์๋ฅผ ์ฝ์์ ๊ธฐ๋ฐํ ํจ์๋ก ๋ฐ๊ฟ๋ฌ๋ผ๊ณ ์์ฒญํ์ต๋๋ค.
ํ์ง๋ง ์์ฝ๊ฒ๋. ์, ๊ทธ๋ ์ด์ ์ ๊ทธ๋ฌํ ์ฝ๋๋ฅผ ์ ํ ์ ์ด ์๋ ๊ฒ์ด ๋ถ๋ช
ํ์ต๋๋ค. ๊ทธ๋ ๊ทธ๊ณณ์์ ๋ชจ๋ ๊ฒ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ์ผ๋ฐ์ ์ธ ์ฉ์ด๋ก ์๊ณ ์์์ต๋๋ค. ์ฐ๋ฆฌ์๊ฒ ํ์ํ ๊ฒ์ ๊ฐ๋
์ ๋ํ ์ดํด๋ฅผ ๋ณด์ฌ์ฃผ๋ ์๋ฃจ์
์ ์ค์ผ์น๋ฟ์
๋๋ค. ๊ทธ๋ฌ๋ ํ๋ณด์๊ฐ ๊ฒ์ํ์ ์์ฑํ ์ฝ๋๋ ์์ ๋์ผ์ค์๋ค. ๊ทธ๋ JavaScript์ Promise๊ฐ ๋ฌด์์ธ์ง์ ๋ํด ๋งค์ฐ ๋ชจํธํ ์๊ฐ์ ๊ฐ์ง๊ณ ์์๊ณ ๊ทธ๊ฒ์ด ์ ํ์ํ์ง ์ค์ ๋ก ์ค๋ช
ํ ์ ์์์ต๋๋ค. ํ๋ฐฐ๋ผ๋ฉด ์ฉ์ํ ์ ์๊ฒ ์ง๋ง, ๊ทธ๋ ๋ ์ด์ ์ ๋ฐฐ์ ์๋ฆฌ์ ์ด์ธ๋ฆฌ์ง ์์๋ค. ์ด ๊ฐ๋ฐ์๋ ์ด๋ป๊ฒ ๋ณต์กํ ์ฝ์ ์ฒด์ธ์ ๋ฒ๊ทธ๋ฅผ ์์ ํ๊ณ ์์ ์ด ์ ํํ ๋ฌด์์ ํ๋์ง ๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ ์ค๋ช
ํ ์ ์์๊น์?
๊ฐ๋ฐ์๋ ๊ธฐ์ฑ ์ฝ๋๋ฅผ ์๋ช ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ฐ๋ฐ ๊ณผ์ ์์ ์ฐ๋ฆฌ๋ ์ฌํ ๊ฐ๋ฅํ ์ฌ๋ฃ๋ฅผ ๋์์์ด ์ ํ๊ฒ ๋ฉ๋๋ค. ๋งค๋ฒ ๋ค์ ์์ฑํ ํ์๊ฐ ์๋๋ก ์ฝ๋ ์กฐ๊ฐ์ ์ ์กํฉ๋๋ค. ๋ฐ๋ผ์ ํต์ฌ ๋ถ๋ถ์ ๋ชจ๋ ์ฃผ์๋ฅผ ์ง์คํจ์ผ๋ก์จ ์ฐ๋ฆฌ๋ ์์ ํ๋ ์์ฑ๋ ์ฝ๋๋ฅผ ์๋ช ํ ๊ฒ์ผ๋ก ๋ด ๋๋ค. ์ฆ, ๋ชจ๋ ๊ฒ์ด ์ ๋๋ก ์๋ํ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํ ๋ฟ์ ๋๋ค.
๋๊ฐ๋ ํจ๊ณผ๊ฐ ์์ง๋ง ์ํฉ์ด ๊น๋ค๋ก์ธ ๋๋ ๋ฉ์ปค๋์ฆ์ ์ดํดํ๋ ๊ฒ์ด ๋์์ด ๋ฉ๋๋ค.
๋ฐ๋ผ์ ์ฐ๋ฆฌ์ ์์ ๊ฐ๋ฐ์ ์๋ฆฌ ํ๋ณด์๋ ์ฝ์ ๊ฐ์ฒด๊ฐ ์๋ช ํ๋ค๊ณ ์๊ฐํ์ต๋๋ค. ์๋ง๋ ๋ค๋ฅธ ์ฌ๋์ ์ฝ๋ ์ด๋๊ฐ์์ ๊ทธ๋ฐ ์ผ์ด ๋ฐ์ํ๋ฉด ์ด๋ป๊ฒ ๋์ฒํด์ผ ํ ์ง ์์ด๋์ด๊ฐ ์์๊ฒ ์ง๋ง, ์ผ๋ฐ์ ์ธ ์๋ฆฌ๋ฅผ ์ดํดํ์ง ๋ชปํ๊ณ ์ธํฐ๋ทฐ ์ค์ ์ค์ค๋ก ๋ฐ๋ณตํ ์๋ ์์์ต๋๋ค. ์๋ง๋ ๊ทธ๋ ๊ทธ ์กฐ๊ฐ์ ๋ง์ ์์ผ๋ก ๊ธฐ์ตํ์ ๊ฒ์ ๋๋ค. ๊ทธ๋ ๊ฒ ์ด๋ ต์ง๋ ์์ต๋๋ค.
return new Promise((resolve, reject) => {
functionWithCallback((err, result) => {
return err ? reject(err) : resolve(result);
});
});
๋๋ ๊ทธ๋ฌ๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ง๋ ์ฐ๋ฆฌ ๋ชจ๋ ์ด๋ ์์ ์์๋ ํด๋ณธ ์ ์ด ์์ ๊ฒ์ด๋ค. ๊ทธ๋ค์ ๋์ค์ ์์ ์ ์ฌ์ฉํ ์ ์๋๋ก ์ฝ๋ ์กฐ๊ฐ์ ์๊ธฐํ๋ฉด์ ๋ชจ๋ ๊ฒ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง์ ๋ํ ์ผ๋ฐ์ ์ธ ์์ด๋์ด๋ง ๊ฐ์ง๊ณ ์์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ๋ฐ์๊ฐ ๊ฐ๋ ์ ์ง์ ์ผ๋ก ์ดํดํ๋ค๋ฉด ๊ทธ๋ ์๋ฌด๊ฒ๋ ๊ธฐ์ตํ ํ์๊ฐ ์์ ๊ฒ์ ๋๋ค. ๊ทธ๋ ๋จ์ง ๊ทธ๊ฒ์ ์ํํ๋ ๋ฐฉ๋ฒ๋ง ์ ๋ฟ์ด๋ฉฐ ํ์ํ ๋ชจ๋ ๊ฒ์ ์ฝ๋์์ ์ฝ๊ฒ ์ฌํํ ์ ์์ ๊ฒ์ ๋๋ค.
๋ฟ๋ฆฌ๋ก ๋์๊ฐ๋ผ
์์ง ํ๋ก ํธ์๋ ํ๋ ์์ํฌ์ ์ง๋ฐฐ๋ ฅ์ด ํ๋ฆฝ๋์ง ์์๋ 2012๋
์๋ jQuery๊ฐ ์ธ์์ ์ง๋ฐฐํ๊ณ ์์๋๋ฐ, ์ ๋ ์ด ์ฑ
์ ์ฝ์์ต๋๋ค.
์ด ์ฑ ์ ๋ ์์๊ฒ ์ฒ์๋ถํฐ ์์ ๋ง์ jQuery๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๊ฐ๋ฅด์น๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ค๊ฒ ๋ ์ฌ๊ณ ๊ณผ์ ์ ๋ํ ๊ณ ์ ํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํฉ๋๋ค. ์ต๊ทผ ๋ช ๋ ๋์ jQuery๋ ์์ ์ ์ธ๊ธฐ๋ฅผ ์์์ง๋ง, ๋๋ ์ฌ์ ํ ์ด ์ฑ ์ ์ ๊ทน ์ถ์ฒํฉ๋๋ค. ๊ทธ๋ ์ ๋ํด ๊ฐ์ฅ ์ธ์ ๊น์๋ ์ ์ ์ด ๋ชจ๋ ๊ฒ์ ๋ ์ค์ค๋ก๋ ์๊ฐํ ์ ์๋ค๋ ๋์ง๊ธด ๋๋์ด์์ต๋๋ค. ์ ์๊ฐ ์ค๋ช ํ๋ ๋จ๊ณ๋ ๋๋ฌด ๋ ผ๋ฆฌ์ ์ด๊ณ ๋ช ํํด ๋ณด์๊ธฐ ๋๋ฌธ์ ์ค์ ๋ก๋ง ์ ๊ทผํ๋ฉด jQuery๋ฅผ ์ฝ๊ฒ ๋ง๋ค ์ ์๋ค๋ ์๊ฐ์ด ์ง์งํ๊ฒ ์์๋์์ต๋๋ค.
๋ฌผ๋ก ์ค์ ๋ก๋ ์ด๋ฐ ์ผ๋ ํ ์ ์์์ ๊ฒ์ ๋๋ค. ์ฐธ์ ์ ์์ ์ ๋๋ก ์ด๋ ต๋ค๊ณ ํ๋จํ์ ๊ฒ์ ๋๋ค. ๋ด ์์ ์ ์๋ฃจ์ ์ ์๋ํ๊ธฐ์๋ ๋๋ฌด ๋จ์ํ๊ณ ์์งํด ๋ณด์ด๋ฉฐ ํฌ๊ธฐํ ๊ฒ์ ๋๋ค. ๋๋ jQuery๋ฅผ ์๋ช ํ ๊ฒ์ผ๋ก ๋ถ๋ฅํ๊ณ , ์ฌ๋ฐ๋ฅธ ์๋์์๋ ๋งน๋ชฉ์ ์ผ๋ก ๋ฏฟ์ด์ผ ํฉ๋๋ค. ๊ทธ ํ ๋๋ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฉ์ปค๋์ฆ์ ํ๊ตฌํ๋ ๋ฐ ์๊ฐ์ ๊ฑฐ์ ๋ญ๋นํ์ง ์๊ณ ๋จ์ํ ์ผ์ข ์ ๋ธ๋๋ฐ์ค๋ก ์ฌ์ฉํ ๊ฒ์ ๋๋ค.
ํ์ง๋ง ์ด ์ฑ ์ ์ฝ์ผ๋ฉด์ ๋๋ ๋ค๋ฅธ ์ฌ๋์ด ๋์๋ค. ๋๋ ์์ค ์ฝ๋๋ฅผ ์ฝ๊ธฐ ์์ํ๊ณ ๋ง์ ์๋ฃจ์ ์ ๊ตฌํ์ด ์ค์ ๋ก ๋งค์ฐ ํฌ๋ช ํ๊ณ ๋ช ๋ฐฑํ๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค. ์๋, ๋ฌผ๋ก ์ด๋ฐ ์ผ์ ์ค์ค๋ก ์๊ฐํ๋ ๊ฒ์ ๋ค๋ฅธ ์ด์ผ๊ธฐ์ ๋๋ค. ํ์ง๋ง ๋ค๋ฅธ ์ฌ๋์ ์ฝ๋๋ฅผ ์ฐ๊ตฌํ๊ณ ๊ธฐ์กด ์๋ฃจ์ ์ ์ฌํํ๋ ๊ฒ์ ์ฐ๋ฆฌ ์์ ๋ง์ ๋ฌด์ธ๊ฐ๋ฅผ ์ฐพ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
๋น์ ์ด ์ป๋ ์๊ฐ๊ณผ ๋น์ ์ด ์์์ฐจ๋ฆฌ๊ธฐ ์์ํ๋ ํจํด์ ๋น์ ์ ๊ฐ๋ฐ์๋ก์ ๋ณํ์ํฌ ๊ฒ์ ๋๋ค. ๋น์ ์ ๋์์์ด ์ฌ์ฉํ๊ณ ๋ง๋ฒ์ ์ ๋ฌผ๋ก ์๊ฐํ๋ ๋ฐ ์ต์ํ ๋ฉ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ง๋ฒ์ ์ ํ ์๋ํ์ง ์๊ณ ๋จ์ํ ๋ฌธ์ ๋ฅผ ๊ฐ๊ฒฐํ๊ณ ์์์๊ฒ ํด๊ฒฐํ๋ค๋ ๊ฒ์ ์๊ฒ ๋ ๊ฒ์ ๋๋ค.
๋๋ก๋ ์ฝ๋๋ฅผ ์์ธํ ์ดํด๋ณด๊ณ ๋จ๊ณ๋ณ๋ก ๋ถ์ํด์ผ ํ์ง๋ง ์ด๊ฒ์ด ์๊ณ ์ผ๊ด๋ ๋จ๊ณ๋ก ์ด๋ํ๋ฉด์ ์์ฑ์์ ๊ฒฝ๋ก๋ฅผ ์๋ฃจ์ ์ผ๋ก ๋ฐ๋ณตํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ด๋ฅผ ํตํด ์ฝ๋ฉ ํ๋ก์ธ์ค์ ๋ํด ๋ ๊น์ด ์์๋ณผ ์ ์๊ณ ์์ ๋ง์ ์๋ฃจ์ ์ ์ฐพ๋ ๋ฐ ๋ ๋ง์ ์์ ๊ฐ์ ๊ฐ์ง ์ ์์ต๋๋ค.
์ ๊ฐ ์ฒ์ Promise ์์ ์ ์์ํ์ ๋ ๊ทธ๊ฒ์ ๋ง์น ์์ํ ๋ง๋ฒ์ฒ๋ผ ๋๊ปด์ก์ต๋๋ค. ๊ทธ๋ฌ๋ค๊ฐ ๊ทธ๊ฒ๋ค์ด ๋์ผํ ์ฝ๋ฐฑ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค๋ ์ฌ์ค์ ์๊ฒ ๋์๊ณ , ๋ด ํ๋ก๊ทธ๋๋ฐ ์ธ๊ณ๋ ์์ ํ ๋ค์ง์ด์ก์ต๋๋ค. ๊ทธ๋์ ์ฝ๋ฐฑ์ผ๋ก๋ถํฐ ์ฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ๊ฒ์ด ๋ชฉ์ ์ธ ํจํด ์์ฒด๊ฐ ์ฝ๋ฐฑ์ ์ฌ์ฉํ์ฌ ๊ตฌํ๋ฉ๋๊น?!
์ด๊ฒ์ ๋ด๊ฐ ๋ค๋ฅธ ๋์ผ๋ก ๋ฌธ์ ๋ฅผ ๋ณด๋ ๋ฐ ๋์์ด ๋์๊ณ ์ด๊ฒ์ด ๋ด ์์ ์๋ ๋ํดํ ์ฝ๋ ์กฐ๊ฐ์ด ์๋๋ฉฐ, ๋ด ์ธ์์์ ๊ฒฐ์ฝ ์ดํดํ์ง ๋ชปํ ์์ฒญ๋๊ฒ ๋ณต์กํ ์ฝ๋๊ฐ ์๋๋ผ๋ ๊ฒ์ ๊นจ๋ซ๋ ๋ฐ ๋์์ด ๋์์ต๋๋ค. ๊ทธ์ ํธ๊ธฐ์ฌ๊ณผ ๊น์ ๋ชฐ์ ๋ง ํ๋ฉด ๋ฌธ์ ์์ด ์ดํดํ ์ ์๋ ํจํด๋ค์ด๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ์ฌ๋๋ค์ด ์ฝ๋ฉ์ ๋ฐฐ์ฐ๊ณ ๊ฐ๋ฐ์๋ก ์ฑ์ฅํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
์ด ๋ฐํด๋ฅผ ์ฌ๋ฐ๋ช ํ์ธ์
๊ทธ๋ฌ๋ ๊ณ์ํด์ ๋ฐํด๋ฅผ ์ฌ๋ฐ๋ช
ํ์ธ์. ์์ ๋ง์ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ์ฝ๋๋ฅผ ์์ฑํ๊ณ , ์์ฒด์ ์ผ๋ก Promise๋ฅผ ๋ง๋ค๊ฑฐ๋, ์์ ๋ง์ ์ํ ๊ด๋ฆฌ ์๋ฃจ์
์ ๋ง๋์ธ์.
์๋ฌด๋ ์ด ๋ชจ๋ ๊ฒ์ ์ฌ์ฉํ์ง ์์ ๊ฒ์ด๋ผ๋ ์ ์ ์ค์ํ์ง ์์ต๋๋ค. ํ์ง๋ง ์ด์ ์ฌ๋ฌ๋ถ์ ์ด๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ์๊ณ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ค์ ์์ ์ ํ๋ก์ ํธ์์ ๊ทธ๋ฌํ ๊ฐ๋ฐ์ ์ฌ์ฉํ ๊ธฐํ๊ฐ ์๋ค๋ฉด ๊ทธ๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ์ข์ต๋๋ค. ๋น์ ์ ๊ทธ๊ฒ์ ๊ฐ๋ฐํ๊ณ ๋ค๋ฅธ ๊ฒ์ ๋ฐฐ์ธ ์ ์์ ๊ฒ์
๋๋ค.
์ฌ๊ธฐ์ ์ค์ํ ์ ์ ์ฝ๋๋ฅผ ํ๋ก๋์
ํ๊ฒฝ์ผ๋ก ๋ณด๋ด๋ ๊ฒ์ด ์๋๋ผ ์๋ก์ด ๊ฒ์ ๋ฐฐ์ฐ๋ ๊ฒ์
๋๋ค. ๊ธฐ์กด ์๋ฃจ์
์ ๊ตฌํ์ ์ง์ ์์ฑํ๋ ๊ฒ์ ์ต๊ณ ์ ํ๋ก๊ทธ๋๋จธ๋ก๋ถํฐ ๋ฐฐ์ฐ๊ณ ๊ธฐ์ ์ ์ฐ๋งํ ์ ์๋ ์ข์ ๋ฐฉ๋ฒ์
๋๋ค.
์ถ์ฒ : habr.com