395p ~ 419p
์์ฝ
ํ์๋ผ์ธ
- ํ์๋ผ์ธ : "์ก์
์ ์์๋๋ก ๋์ดํ ๊ฒ"
- ํ์๋ผ์ธ ๋ค์ด์ด๊ทธ๋จ : "์๊ฐ์ ๋ฐ๋ฅธ ์ก์
์์๋ฅผ ์๊ฐ์ ์ผ๋ก ํ์ํ ๊ฒ"
ํ์๋ผ์ธ ๊ธฐ๋ณธ ๊ท์น
-
ํ์๋ผ์ธ์๋ ์ก์
๋ง ๊ทธ๋ฆฐ๋ค.
- ๊ณ์ฐ์ ์คํ์์ ์ ์ํฅ์ ๋ฐ์ง ์๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฆฌ์ง ์๋๋ค.
-
๋ ์ก์
์ด ์์๋๋ก ๋ํ๋๋ฉด ๊ฐ์ ํ์๋ผ์ธ์ ๋ฃ๋๋ค.
sendEmail1();
sendEmail2();
- ๋ ์ก์
์ด ๋์์ ์คํ๋๊ฑฐ๋ ์์๋ฅผ ์์ํ ์ ์๋ค๋ฉด ๋ถ๋ฆฌ๋ ํ์๋ผ์ธ์ ๋ฃ๋๋ค.
setTimeout(sendEmail1, Math.random()*10000);
setTimeout(sendEmail2, Math.random()*10000);
โก๏ธ ์ก์
์ด ์๋ก ๋ค๋ฅธ ์ค๋ ๋, ํ๋ก์ธ์ค, ๊ธฐ๊ณ, ๋น๋๊ธฐ ์ฝ๋ฐฑ ์์ ์คํ๋๋ฉด ์๋ก ๋ค๋ฅธ ํ์๋ผ์ธ์ ํ์ํ๋ค.
์ก์
์์์์ ์ฃผ์ํ ์
-
++
์ +=
๋ ์ธ ๋จ๊ณ์ด๋ค.
total++
var temp = total;
temp = temp + 1;
total = temp;
โก๏ธ ๋ฐ๋ผ์ ๋ ๊ฐ์ ์ก์
์ผ๋ก ๋ค์ด์ด๊ทธ๋จ์ ํ์ํด์ผ ํจ.
-
์ธ์๋ ํจ์๋ฅผ ๋ถ๋ฅด๊ธฐ ์ ์ ์คํํ๋ค.
console.log(total);
temp = total;
console.log(temp);
โก๏ธ ์ ์ญ ๋ณ์๋ฅผ ์ฝ๋ ๊ฒ๋ ์ก์
์์ ๊ธฐ์ต.
๋ค์ด์ด๊ทธ๋จ์ ๊ทธ๋ฆฌ๊ธฐ ์ํ ์ธ ๋จ๊ณ
- ์ก์
์ ํ์ธํ๋ค.
- ๊ณ์ฐ์ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋๋ค.
function add_item_to_cart(name, price, quantity) {
cart = add_item(cart, name, price, quantity);
calc_cart_total();
}
function calc_cart_total() {
total = 0;
cost_ajax(cart, function(cost) {
total += cost;
shipping_ajax(cart, function(shipping) {
total += shipping;
update_total_dom(total);
});
});
}
-
๊ฐ ์ก์
์ ๊ทธ๋ฆฐ๋ค.
-
๋น๋๊ธฐ ์ฝ๋ฐฑ์ ์๋ก์ด ํ์๋ผ์ธ์ ํ์ํด์ผ ํ๋ค.
-
์คํ ์์๋ฅผ ์ ํํ๊ธฐ ์ํด ์ ์ ์ ์ฌ์ฉํ๋ค. (ajax ์ฝ๋ฐฑ์ ajax ์์ฒญ ์ ์ ์คํํ ์ ์๋ค)

๋ค๋ฅธ ์์>
saveUserAjax(user, function() {
setUserLoadingDOM(false);
});
setUserLoadingDOM(true);
saveDocumentAjax(document, function() {
setDocLoadingDOM(false);
});
setDocLoadingDOM(true);

-
์ฝ๋ฐฑ์ ๋น๋๊ธฐ๋ก ์คํ๋๊ธฐ ๋๋ฌธ์ ์์ฒญ์ด ๋๋๋ ์์ ์ ์ธ์ ๊ฐ ์คํ๋ ๊ฒ์์ ์ ์.
-
๋จ์ํํ๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ(ํ๋ซํผ)์์ ์ฌ์ฉํ ์ ์๋ ๋จ์ํ ๊ท์น 2๊ฐ์ง
- ํ๋์ ํ์๋ผ์ธ์ ์๋ ๋ชจ๋ ์ก์
์ ํ๋๋ก ํตํฉํ๋ค / ์ ์ ์ ํ์๋ผ์ธ ๋์ผ๋ก ์ฎ๊ธด๋ค.
(์๋ฐ์คํฌ๋ฆฝํธ๋ ํ๋์ ์ค๋ ๋์์ ๋ชจ๋ ์ฝ๋๋ฅผ ์คํํ๋ค.)

- ํ์๋ผ์ธ์ด ๋๋๋ ๊ณณ์์ ์๋ก์ด ํ์๋ผ์ธ์ด ํ๋๋ง ์๊ธด๋ค๋ฉด ํตํฉํ๋ค.
(๋จ, ํตํฉ ํ์๋ ์ฒซ ๋ฒ์งธ ๊ท์น์ ๋ค์ ์ ์ฉํ ์ ์๋ค. ๋ง์ฝ ๋ค๋ฅธ ํ์๋ผ์ธ์ ์ก์
์ด ์๊ธฐ๋ฉด ๊ฐ ๋ฐ์ค๋ ์์๊ฐ ์์ผ ๊ฐ๋ฅ์ฑ์ด ์๊ธฐ ๋๋ฌธ.)

๋ค๋ฅธ ์์>
์๋๋ ์๋ก์ด ํ์๋ผ์ธ์ด ๋ ๊ฐ ์๊ฒผ๊ธฐ ๋๋ฌธ์ ํตํฉํ ์ ์๋ค.

์ข์ ํ์๋ผ์ธ์ ์์น
-
์ ์ฒด ํ์๋ผ์ธ์ ๊ฐ์๊ฐ ์ ์์๋ก ์ดํดํ๊ธฐ ์ฝ๋ค.
- ํ์๋ผ์ธ ํ๋๋ผ๋ฉด ์ ์ผ ์ข๊ฒ ์ง๋ง,
- ๋ฉํฐ์ค๋ ๋, ๋น๋๊ธฐ ์ฝ๋ฐฑ, ํด๋ผ์ด์ธํธ-์๋ฒ ํต์ ๋ฑ์๋ ์๋ก์ด ํ์๋ผ์ธ์ด ํ์.
-
ํ์๋ผ์ธ ๋ด ๋จ๊ณ์ ๊ฐ์๊ฐ ์ ์์๋ก ์ดํดํ๊ธฐ ์ฝ๋ค.
- ๋ค๋ฅธ ํ์๋ผ์ธ ๋จ๊ณ์์ ์คํ ์์ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ํญ ์ค์ผ ์ ์๋ค.
-
๊ณต์ ํ๋ ์์์ด ์ ์์๋ก ์ดํดํ๊ธฐ ์ฝ๋ค.
-
์์์ ๊ณต์ ํ๋ค๋ฉด ์๋ก ์กฐ์จํด์ผ ํ๋ค.
-
์๊ฐ์ ์ผ๊ธ์ผ๋ก ๋ค๋ฃฌ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ํน์ฑ
- ๋จ์ผ ์ค๋ ๋ ํ๊ฒฝ.
- ๋ ์ก์
์ด ๋์์ ์คํ๋ ์ผ์ด ์๋ค.
- ๋จ ๋น๋๊ธฐ ํธ์ถ์, ๋ฏธ๋์ ์ ์ ์๋ ์์ ์ ๋ฐํ์์ ์ํด ์คํ๋๋ฏ๋ก ์ฃผ์ํด์ผ.
- ์ด๋ฒคํธ ๋ฃจํ (event loop) ์ ์์
ํ (job queue)
- ์ด๋ฒคํธ ๋ฃจํ๋ ์์
ํ์์ ์์
ํ๋๋ฅผ ๊บผ๋ด ์คํ ์๋ฃํ๊ณ , ์๋ฃ๋๋ฉด ๋ค์ ์์
์ ๊บผ๋ด ์คํํ๋ ๊ฒ์ ๋ฌดํํ ๋ฐ๋ณต.
- ํ๋์ ์ค๋ ๋์์ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์, ๋ ๊ฐ์ ์์
์ด ๋์์ ์คํ๋ ์ ์๋ค.
- ์์
= ์ด๋ฒคํธ ๋ฐ์ดํฐ + ์ฝ๋ฐฑ
- ์ด๋ฒคํธ : ๋ง์ฐ์ค ํด๋ฆญ, ํค๋ณด๋ ์
๋ ฅ, AJAX ์ด๋ฒคํธ ๊ฐ์ ๊ฒ
- ์ด๋ฒคํธ ๋ฐ์ดํฐ : ์ด๋ฒคํธ์ ๋ํ ์ ๋ณด (e.g. ํด๋ฆญ์ ๋ํ ์ ๋ณด)
- ์ฝ๋ฐฑ : ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ์คํ๋๋ ํจ์. ์ข ๋ ์์ธํ๋ ์ด๋ฒคํธ ๋ฃจํ๊ฐ ์คํํ ํจ์.
- click ์ด๋ฒคํธ ๋์ ๊ณผ์ :
์ด๋ฒคํธ์ ์ฝ๋ฐฑ์ ๋ฑ๋ก -> ์ด๋ฒคํธ ๋ฐ์ -> ์์
ํ์ ์์
( ์ด๋ฒคํธ ๋ฐ์ดํฐ
(click
) + ์ฝ๋ฐฑ
) ์ถ๊ฐ -> ์ด๋ฒคํธ ๋ฃจํ๊ฐ ์ฝ๋ฐฑ ์คํ
- AJAX ์์ฒญ ๋์ ๊ณผ์ :
AJAX ์์ฒญ ํธ์ถ -> ๋คํธ์ํฌ ์์ง์ด ๊ด๋ฆฌํ๋ ์์ฒญ ํ์ ์ถ๊ฐ -> load
๋๋ error
์ด๋ฒคํธ์ ์ฝ๋ฐฑ์ด ๋ฑ๋ก ๋จ -> ์ด๋ฒคํธ ๋ฐ์(์๋ต ๋์ฐฉ or ์๋ฌ) -> ์์
ํ์ ์์
( ์ด๋ฒคํธ ๋ฐ์ดํฐ
(load
orerror
) + ์ฝ๋ฐฑ
) ์ถ๊ฐ -> ์ด๋ฒคํธ ๋ฃจํ๊ฐ ์ฝ๋ฐฑ ์คํ
๋ฐ์ท
์ธ์ด๋ณ ์ฌ์ฉํ๋ ์ค๋ ๋ ๋ชจ๋ธ
- ๋จ์ผ ์ค๋ ๋, ๋๊ธฐ
- ๋ชจ๋ ๊ฒ์ด ์์๋๋ก ์คํ๋๊ณ ์
์ถ๋ ฅ์ ์ฌ์ฉํ๋ฉด ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํจ.
- ์์คํ
์ด ๋จ์ํ๋ค๋ ์ฅ์ ์๊ธฐ๋.
- ์) PHP
- ๋จ์ผ ์ค๋ ๋, ๋น๋๊ธฐ
- ๋น๋๊ธฐ ๋ชจ๋ธ์ ์ฌ์ฉํจ์ผ๋ก์จ, ๋จ์ผ ์ค๋ ๋ ์ธ๋ฐ๋ ์
์ถ๋ ฅ ์์
์ ๊ธฐ๋ค๋ฆฌ์ง ์์๋ ๋จ.
- ๋จ, ์ฝ๋ฐฑ์ด ์ธ์ ์คํ๋ ์ง ๋ณด์ฅํ ์ ์์. ๊ทธ๋์ ๋ค์ด์ด๊ทธ๋จ์์ ๋ค๋ฅธ ํ์๋ผ์ธ์ผ๋ก ํํ.
- ์) JavaScript
- ๋ฉํฐ์ค๋ ๋
- ์คํ ์์๋ฅผ ๋ณด์ฅํ์ง ์์ ํ๋ก๊ทธ๋๋ฐ ๋งค์ฐ ์ด๋ ค์
- ์๋ก์ด ์ค๋ ๋๋ ์๋ก์ด ํ์๋ผ์ธ์ ์๋ฏธ
- ์) Java, Python, Ruby, C, C#
- ๋ฉ์์ง ํจ์ฑ(message-passing) ํ๋ก์ธ์ค
- ์๋ก ๋ค๋ฅธ ํ๋ก์ธ์ค๋ฅผ ๋์์ ์คํ ํ ์ ์๋ ์ค๋ ๋ ๋ชจ๋ธ ์ง์ํ๋ฉด์๋,
- ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ์ง ์๊ณ ๋ฉ์์ง๋ก ํต์ .
- ์๋ก ๋ค๋ฅธ ํ์๋ผ์ธ์ ์๋ ์ก์
์ ์์๊ฐ ์์ฌ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต์ ํ์ง ์์ ๋ฌธ์ ๊ฐ ๋ณ๋ก ์๋จ
- ์) Elixir(์๋ฆญ์), Erlang(์ผ๋ญ)
๋ฉ๋ชจ