๐ฉโ๐ป ์ด ํฌ์คํ
์์๋ ๋น๋๊ธฐ์ ๊ด๋ จ๋ ๊ฐ๋
๋ค์ ๋ํด ์ ๋ฆฌํ์์ต๋๋ค.
๋๊ธฐ(Sync)์ ๋น๋๊ธฐ(Async)์ ์ฐจ์ด?
๋๊ธฐ์ ํ๋ก๊ทธ๋๋ฐ
์ด๋ ํ ์ฝ๋๊ฐ ์คํ๋๊ณ ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ ธ๋ค๊ฐ ๋ค์ ์ฝ๋๊ฐ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ ๊ฒ
๋น๋๊ธฐ์ ํ๋ก๊ทธ๋๋ฐ
์ฝ๋๊ฐ ์คํ๋๊ณ ์๋ฃ๋๊ธธ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค์ ์ฝ๋๋ฅผ ๋จผ์ ์คํํ๋ ๊ฒ
๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ด๋
ํน์ ์ฝ๋์ ์๋ฃ ์ฌ๋ถ์ ๋ฌด๊ดํ๊ฒ ์ฆ์ ๋ค์ ์ฝ๋๋ก ๋์ด๊ฐ๋ค. ๋น๋๊ธฐ ๋ฐฉ์์ด ํ์ํ ์ด์ ๋ ์ฝ๋๊ฐ ์คํ๋๊ณ ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๊ฒ ๋๋ค๋ฉด ๊ทธ๋์ ๋น ํ๋ฉด์ด ๋ ๋๋ง ๋๋ ๋ฌธ์ ๊ฐ ์๊ธด๋ค. ๊ธฐ๋ค๋ฆฌ๋ ๋์ ๋ค๋ฅธ ์์
์ ํ๋ฉด์ ์์์ ํจ์จ์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ฒ ๋๋ค.
๋น๋๊ธฐ ๋ฐฉ์์ด๋
์นํ์ด์ง๋ฅผ ๋ฆฌ๋ก๋ํ์ง ์๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋ ๋ฐฉ์.
Ajax๋ฅผ ํตํด ์๋ฒ์ ์์ฒญํ ํ ๋ฉ์ถฐ์๋ ๊ฒ์ด ์๋๋ผ ํ๋ก๊ทธ๋จ์ ๊ณ์ ๋์๊ฐ๋ค๋ ์๋ฏธ๋ฅผ ๋ดํฌํ๊ณ ์๋ค.
AJAX
Asynchronous JavaScript and XML์ ์ฝ์.
์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํด ์๋ฒ์ ๋ธ๋ผ์ฐ์ ๊ฐ ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ตํํ ์ ์๋ ํต์ ๊ธฐ๋ฅ์ด๋ค.
- ํ์ด์ง ์ ์ฒด๋ฅผ ๋ฆฌ๋ก๋ํ์ง ์๊ณ ํ์ด์ง์์ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ ์ผ๋ถ๋ง ๋ฆฌ๋ก๋ํ๋ ๊ธฐ๋ฒ์ด๋ค.
- ์ต๊ทผ์๋ XML๋ณด๋ค JSON์ ๋ง์ด ์ฌ์ฉํ๋ค.
AJAX์ ์ฅ๋จ์
์ฅ์
- ์ ์ฒด๋ฅผ ๋ฆฌ๋ก๋ํ์ง ์๊ณ ํ์ํ ๋ถ๋ถ๋ง ๋ฆฌ๋ก๋ํ๊ธฐ ๋๋ฌธ์ ์นํ์ด์ง์ ์๋๊ฐ ํฅ์๋๋ค.
- ์๋ฒ์์ ๋ฐ์ดํฐ๋ง ์ ์กํ๋ฉด ๋๋ฏ๋ก ์ ์ฒด์ ์ธ ์ฝ๋ ์์ด ์ค์ด๋ ๋ค.
๋จ์
- SEO์ ๋ถ๋ฆฌํ๋ค. AJAX ๋ฐฉ์์ ์น ์ดํ๋ฆฌ์ผ์ด์
์ ํ ๋ฒ ๋ฐ์ HTML์ ๋ ๋๋ง ํ ํ, ์๋ฒ์์ ๋น๋๊ธฐ์ ์ผ๋ก ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ๊ทธ๋ ค๋ด๋๋ฐ ์ฒ์ ๋ฐ๋ HTML ํ์ผ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฑ์ฐ๊ธฐ ์ํ ํ๋ง ์์ฑ๋์ด ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ๋๋ฌธ์ ์ฌ์ดํธ์ ์ ๋ณด ์์ง์ด ์ด๋ ต๋ค.
- ํ์คํ ๋ฆฌ ๊ด๋ฆฌ๊ฐ ๋์ง ์๋๋ค.
- ์ฐ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ฉด ์๋ฒ์ ๊ณผ๋ถํ๋ฅผ ์ค ์ ์๋ค.
- ํ์ด์ง์ ์ด๋์ด ์๋ ํต์ ์ผ๋ก ๋ณด์์์ ๋ฌธ์ ๊ฐ ์๋ค.
์ฝ๋ฐฑํจ์์ ๊ฐ๋
- ๋ค๋ฅธํจ์์ ์ธ์๋ก์จ ์ด์ฉ๋๋ ํจ์์ด๋ค.
- ์์ฐจ์ ์ผ๋ก ์ฝ๋๋ฅผ ์คํํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค.
- ES6 ์ด์ ์ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ํ ๋ ์ฌ์ฉ๋ ๋ฐฉ๋ฒ์ด๋ค.
- ์ฝ๋ฐฑ์ง์ฅ์ ๋น ์ง๋ฉด ๋ค์ฌ์ฐ๊ธฐ ์์ค์ด ๋์์ง๋ฉฐ ๊ฐ๋
์ฑ์ด ๋จ์ด์ง๋ค. Promise๋ Async/Await๋ฅผ ์ด์ฉํด ๋ณด์ํ๋ค.
Promise์ ๊ฐ๋
- ๋น๋๊ธฐ๋ฅผ ๊ฐํธํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ก ๋์์ฃผ๋ ์ค๋ธ์ ํธ์ด๋ค.
- ์ฝ๋ฐฑ ํจ์์ ๋จ์ ์ ๋ณด์ํด ES6์์ ์๋ก ๋์จ ๋ฌธ๋ฒ์ด๋ค.
- ์ฑ๊ณต(resolve), ์คํจ(reject)๋ฅผ return
- new Promise์ ์ธ์์ธ ์ฝ๋ฐฑํจ์๋ ํธ์ถํ ๋ ๋ฐ๋ก ์คํ, ๋ด๋ถ์ resolve ๋๋ reject ํจ์๋ฅผ ํธ์ถํ๋ ๊ตฌ๋ถ์ด ์คํ๋๊ธฐ ์ ๊น์ง๋ ๋ค์ then or catch ๊ตฌ๋ฌธ์ผ๋ก ๋์ด๊ฐ์ง ์๋๋ค.
Promise์ ์ํ
new Promise()๋ก ํ๋ก๋ฏธ์ค๋ฅผ ์์ฑํ๊ณ ์ข
๋ฃ๋ ๋๊น์ง 3๊ฐ์ง ์ํ๋ฅผ ๊ฐ๋๋ค.
- Pending(๋๊ธฐ) : ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ก์ง์ด ์์ง ์๋ฃ๋์ง ์์ ์ํ
- Fulfilled(์ดํ) : ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋์ด ํ๋ก๋ฏธ์ค๊ฐ ๊ฒฐ๊ณผ ๊ฐ์ ๋ฐํํด์ค ์ํ
- Rejected(์คํจ) : ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ์คํจํ๊ฑฐ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ํ
Promise ์ฌ์ฉ ์์ ์ฝ๋
function getData(){
return new Promise(function (resolve, reject){
$.get('url ์ฃผ์/products/1', function(response){
if(response){
resolve(response);
}
reject(new Error('Request is failed'));
});
});
}
//Fulfilled ๋๋ Rejected์ ๊ฒฐ๊ณผ ๊ฐ ์ถ๋ ฅ
getData().then(function(data){
console.log(data); //response ๊ฐ ์ถ๋ ฅ
}).catch(function(err){\
console.log(err); //error์ถ๋ ฅ
})
async await
- ๊ธฐ์กด์ ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ฐฉ์์ธ ์ฝ๋ฐฑ ํจ์์ Promise์ ๋จ์ ์ ๋ณด์ํด์ ๋์จ ๋ฌธ๋ฒ.
- Promise ์์ ์กฐ๊ธ ๋ ๊ฐํธํ api๋ฅผ ์ ๊ณตํ๋ค.
- ๋ค์์ ๋น๋๊ธฐ ์ฒ๋ฆฌ ์์
์ ํ ๋ ์ ์ฉํ๋ค.
- try/catch๋ฅผ ์ด์ฉํด์ ์๋ฌ๋ฅผ ํธ๋ค๋ง ํ๋ค.
async / await ์ฌ์ฉ ์์ ์ฝ๋
async function ํจ์๋ช
(){
await ๋น๋๊ธฐ_์ฒ๋ฆฌ_๋ฉ์๋_๋ช
();
}
ํจ์ ๋ด๋ถ ๋ก์ง ์ค HTTP ํต์ ์ ํ๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ ์ฝ๋ ์์ await
๋ฅผ ๋ถ์ธ๋ค.
! ์ฃผ์ํด์ผํ ์ ! : ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ฉ์๋๊ฐ ๊ผญ Promise ๊ฐ์ฒด๋ฅผ ๋ฐํํด์ผ await๊ฐ ์๋๋๋ก ๋์ํ๋ค.
์ผ๋ฐ์ ์ผ๋ก await์ ๋์์ด ๋๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ ์ฝ๋๋ axios
๋ฑ ํ๋ก๋ฏธ์ค๋ฅผ ๋ฐํํ๋ APIํธ์ถ ํจ์์ด๋ค.
async / await ์ Promise์ ์ฐจ์ด
โ๏ธ ์๋ฌ ํธ๋ค๋ง
- Promise๋ .catch()๋ฌธ์ผ๋ก ์๋ฌ ํธ๋ค๋ง์ด ๊ฐ๋ฅํ๋ค.
- Async / await์ ์๋ฌ ํธ๋ค๋ง ๊ธฐ๋ฅ์ด ๋ฐ๋ก ์์ด try/catch()๋ฌธ์ ํ์ฉํ๋ค.
- Promise๋ .then()์ด ์ด์ด์ง๋ then ์ง์ฅ์ ๊ฐ๋ฅ์ฑ์ด ์๊ธฐ ๋๋ฌธ์, ์ฝ๋๊ฐ ๊ธธ์ด์ง์๋ก async/await๋ฅผ ์ฌ์ฉํ๋๊ฒ์ด ๊ฐ๋
์ฑ์ ์ข๋ค.
๊ฐ์ฌํฉ๋๋ค^^