๐ ๋๊ธฐ(Synchronous) ํ๋ก๊ทธ๋๋ฐ vs ๋น๋๊ธฐ(Asynchronous) ํ๋ก๊ทธ๋๋ฐ
๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ฝ๋๊ฐ ๋ฐ๋์ ์์ฑ๋ ์์๋๋ก ์คํ๋๋ ๋ฐฉ์์ด๋ค.
๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ฝ๋์ ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค๋ฅธ ์ฝ๋๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ด๋ค.
๐ ๋น๋๊ธฐ ์ฒ๋ฆฌ ์ฌ๋ก > AJAX
์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ ๋น๋๊ธฐ ํต์ ์ด๋ฉฐ, ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ์ XML ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ธฐ์ ์ด๋ค.
XMLHttpRequest ๊ฐ์ฒด๋ฅผ ์ด์ฉํด์ ์ ์ฒด ํ์ด์ง๋ฅผ ๋ฆฌ๋ก๋ํ์ง ์๊ณ ํ์ํ ๋ฐ์ดํฐ๋ง ๋ก๋ํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
๐ ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ โ > ์ฝ๋ฐฑ(Callback) ํจ์
ํจ์ ์คํ ๊ฒฐ๊ณผ๊ฐ์ ๋ฆฌํด์ด ์๋ ๋งค๊ฐ๋ณ์๋ก ๋์ด์จ ํจ์๋ฅผ ํธ์ถํ์ฌ ๋๊ฒจ์ฃผ๋ ๋ฐฉ์์ด๋ค.
๐ ์ฝ๋ฐฑ ํจ์ ์ฌ์ฉํ๋ ์ด์
ํน์ ๋ก์ง์ด ๋๋ฌ์ ๋ ์ํ๋ ๋์์ ์คํ์ํฌ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค. ์ฆ, ๋น๋๊ธฐ ์์ ๋ค์ ์์ฐจ์ ์ผ๋ก ์คํ์ํฌ ์ ์๋ค.
๐ ์ฝ๋ฐฑ์ง์ฅ๐งโ๏ธ, ๋ฌธ์ ์ ๋ฐ ํด๊ฒฐ๋ฐฉ๋ฒ๐งโ๏ธ
์ฝ๋ฐฑ ํจ์ ์์ ๋ ๋ค๋ฅธ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ฐ์ํ์ฌ ์ฌ์ฉํ๋ ๊ฒ์ ์ฝ๋ฐฑ์ง์ฅ์ด๋ผ๊ณ ํ๋๋ฐ, ์ด๋ฌํ ์ฝ๋ ๊ตฌ์กฐ๋ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๊ณ ๋ก์ง์ ๋ณ๊ฒฝํ๊ธฐ ์ด๋ ต๋ค๋ ๋ฌธ์ ์ ์ด ์๋ค. ์ด๊ฒ์ ํด๊ฒฐํ๊ธฐ ์ํด ์ฝ๋ฐฑ ํจ์ ๋์ , ํ๋ก๋ฏธ์ค๋ async ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๐ ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ โก) ํ๋ก๋ฏธ์ค(Promise)
ES6 ๋ฌธ๋ฒ์ผ๋ก, ์ฃผ๋ก ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ ๋ฐ์์ฌ ๋ ์ฌ์ฉํ๋ API๋ฅผ ๊ตฌํํ ๋ ์ฌ์ฉ๋๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
const condition = true; // true๋ฉด resolve, false๋ฉด reject
const promise = new Promise(function(){
// ๋น๋๊ธฐ ์์
์ํ
if(condition){ // ๋น๋๊ธฐ ์์
์ํ ์ฑ๊ณต
resolve('์ฑ๊ณต');
}else{ // ๋น๋๊ธฐ ์์
์ํ ์คํจ
reject('์คํจ');
}
});
promise
.then(function(message){
console.log(message); // ์ฑ๊ณต(resolve)ํ ๊ฒฝ์ฐ ์คํ
})
.catch(function(error){
console.log(message) // ์คํจ(reject)ํ ๊ฒฝ์ฐ ์คํ
});
|
cs |
new Promise๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ์์ resolve(๋น๋๊ธฐ ์ฒ๋ฆฌ ์ฑ๊ณต)์ reject(๋น๋๊ธฐ ์ฒ๋ฆฌ ์คํจ)๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๊ฐ๋ ์ฝ๋ฐฑํจ์๋ฅผ ๋ฃ์ด์ค๋ค. ์ด๋ ๊ฒ ๋ง๋ promise ๋ณ์์ then๊ณผ catch ๋ฉ์๋๋ฅผ ๋ถ์ธ๋ค. ํ๋ก๋ฏธ์ค ๋ด๋ถ์์ resolve๊ฐ ํธ์ถ๋๋ฉด then์ด ์คํ๋๊ณ , reject๊ฐ ํธ์ถ๋๋ฉด catch๊ฐ ์คํ๋๋ค.
๐ ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ โข) async, await
ES8 ๋ฌธ๋ฒ์ผ๋ก, ํ๋ก๋ฏธ์ค๋ฅผ ์ฌ์ฉํ ์ฝ๋๋ฅผ ์ข ๋ ๊น๋ํ๊ณ ๋๊ธฐ์ ์ผ๋ก ๋ณด์ผ ์ ์๊ฒ ์ค์ฌ์ค๋ค.
1
2
3
|
async function ํจ์๋ช
(){
await ๋น๋๊ธฐ_์ฒ๋ฆฌ_๋ฉ์๋๋ช
();
}
|
cs |
ํจ์์ ์๋ถ๋ถ์ async ํค์๋๋ฅผ ์ถ๊ฐํ๊ณ , ํจ์ ๋ด๋ถ์์ Promise์ ์๋ถ๋ถ์ await ํค์๋๋ฅผ ์ถ๊ฐํ๋ค. ์๋ฌ์ฒ๋ฆฌ๋ฅผ ์ํด try/catch๋ฌธ์ ์ฌ์ฉํด์ผ ํ๋ค.
๐ ์ฐธ๊ณ ์๋ฃ
- AJAX๋ ๋ฌด์์ธ๊ฐ?
- ์๋ฐ์คํฌ๋ฆฝํธ ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ์ฝ๋ฐฑ ํจ์
- ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ๋ฉด์ ์ง๋ฌธ ์ ๋ฆฌ
๐ก ๊ฐ์ด ๋ณด๋ฉด ์ข์ Post