๋๊ธฐ = ๋์์ ์ผ์ด๋๋
๋น๋๊ธฐ = ๋์์ ์ผ์ด๋์ง ์๋
์์ฒญ์ ๊ฒฐ๊ณผ๊ฐ ๊ทธ์๋ฆฌ์์ ๋์์ ์ผ์ด๋์ผ ํ์ง๋ง ๋น๋๊ธฐ๋ ๊ทธ๋ ์ง ์๋ค
js ๋์์๋ฆฌ
์ฑ๊ธ ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด = ํ๋ฒ์ ํ๋์ ์ฝ ์คํ
๋ง์ ๊ฐ์ง๋ค
= ํ๋์ ํ๋ก๊ทธ๋จ์ ๋์์ ํ๋์ ์ฝ๋๋ง ์คํํ ์ ์๋ค
์คํ
์ ๊ตฌ๋ฉ์ด ํ๋์ธ ์์ ํ๋ ๊ตฌ๋ฉ์ด ๋๊ฐ์ธ ์์
๋๊ธฐ ๋น๋๊ธฐ
js๋ ์ฑ๊ธ ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด(ํ๋์ ์ฝ ์คํ์ ๊ฐ์ก๋ค) ์ด๊ณ ๋๊ธฐ์ ์ธ์ด๋ก ์๊ณ ์์ต๋๋ค.
ํ๋์ ์คํ์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๊ธฐ๊น์ง ๋ค๋ฅธ ์คํ์ ํ์ง ์์ต๋๋ค.
๋ณดํต ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์ js์ฝ๋๊ฐ ์คํ๋๋๋ฐ ๋ธ๋ผ์ฐ์ ๋ ์ฑ๊ธ ์ค๋ ๋๋ก ์๋๋๋
js์์ง๋ง ์๋๊ฒ ์๋๋ผ ๋ด์ฅ๋ ์น api๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
js ์ฝ๋๋ด์์ ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌํด์ผํ๋ ์์๊ฐ ์๊ธด๋ค๋ฉด js๋ ์์ ์ด ๊ทธ ์์๋ฅผ ์ฒ๋ฆฌํ์ง ์๊ณ
web api๋ก ๋๊น๋๋ค. web api์์ ํด๋น ๋ด์ฉ์ด ์ฒ๋ฆฌ๋๊ณ ์ฝ๋ฐฑ ํ๋ก ๋ค์ด๊ฐ๋๋ค.
์ฌ๊ธฐ์ ์ด๋ฒคํธ๋ฃจํ๋ผ๋ ์์๊ฐ ์ฌ์ฉ๋๋๋ฐ ์ด๋ฒคํธ ๋ฃจํ๋ js์์ง์ ์ฝ ์คํ์ ์ง์์ ์ผ๋ก ๋ฐ๋ผ๋ณด๊ณ ์๋ค๊ฐ,
์ฝ ์คํ์ด ๋น๋ฉด ์ฐ์ ์์์๋ฐ๋ผ ๋๊ธฐ์ค์ธ ํ์ ๋๊ธฐ์ค์ธ ์์๋ค์ ์ฝ ์คํ์ผ๋ก ๋ฃ์ด์ค๋๋ค.
์ฑ๊ธ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๋์์ฑ ๋ฌธ์ ๋ฅผ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋๋ค.
์ฌ์ฉ์์๊ฒ ์์ด์ ํ๋ฉด์ด๋ผ๋ ์์์ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ์ ๊ทผํ๊ฒ ๋๋ค๋ฉด ๋ฌธ์ ๊ฐ
๋ฐ์ํ ์ฌ์ง๊ฐ ์๊ธฐ๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์ฌ์ ์ ๋ฐฉ์ง ํ ์ ์๋ค.
๋๊ธฐ ๋์ ์๋ฆฌ
1. ์ฝ๋๊ฐ ์คํ๋๋ฉด ์์๋๋ก call stack์ ์คํํ ํจ์๊ฐ ์์ธ๋ค (push)
2. ์์ธ ๋ฐ๋ ์์๋ก ํจ์๊ฐ ์คํ๋๋ค. (lifo)
3. ์คํ์ด ๋ ํจ์๋ call stack์์ ์ ๊ฑฐ๋๋ค(pop)
๋น๋๊ธฐ ๋์ ์๋ฆฌ
1. call stack์์ ๋น๋๊ธฐ ํจ์๊ฐ ํธ์ถ๋๋ฉด call stack์ ๋จผ์ ์์๋ค๊ฐ web api(=๋ฐฑ๊ทธ๋ผ์ด๋)๋ก ์ด๋ํ ํ ํด๋น ํจ์๊ฐ ๋ฑ๋ก๋๊ณ call stack์์ ์ฌ๋ผ์ง๋ค.
2. web api(๋ฐฑ๊ทธ๋ผ์ด๋)์์ ๋น๋๊ธฐ ํจ์์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด, ํด๋น ์ฝ๋ฐฑ ํจ์๋ callback queue์ push(์ด๋)๋๋ค.
3. ์ด์ call stack์ด ๋น์ด์๋์ง ์ด๋ฒคํธ ๋ฃจํ๊ฐ ํ์ธ ํ๋๋ฐ ๋ง์ฝ ๋น์ด์์ผ๋ฉด, call stack์ callback queue์ ์๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ๋๊ฒจ์ค๋ค.(push)
4.call stack์ ๋ค์ด์จ ํจ์๋ ์คํ์ด ๋๊ณ ์คํ์ด ๋๋๋ฉด call stack์์ ์ฌ๋ผ์ง๋ค
์๋ฐ์คํฌ๋ฆฝํธ์ ์ฝ๋๋ ์ด๋ฒคํธ ๋ฃจํ ๊ธฐ๋ฐ์ผ๋ก ์๋ํ๋ค๋ ๊ฒ์
๋๋ค. ์ฆ, ์คํ๋๋ ํจ์๋ฅผ
์ฑ๊ธ ์ค๋ ๋ ํ์์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ฉ์ธ '์ฝ ์คํ'์ด ์๊ณ , ์ด ์ฝ ์คํ์ด ๋น์์ ๋๋ง๋ค
'์ฝ๋ฐฑ ํ'์์ ๋๊ธฐ ์ค์ธ ํจ์๋ฅผ ์ฝ ์คํ์ผ๋ก ๋ถ๋ฌ์ ์คํ์ํต๋๋ค.
setTimeout์ด๋ ajax ๊ฐ์ ๋น๋๊ธฐ ํจ์๊ฐ ํธ์ถ๋๋ฉด, ํด๋น ์์
์ ๋ธ๋ผ์ฐ์ ์ ๋ด์ฅ๋
WebAPI์๊ฒ ๋๊ฒจ์ง๋๋ค. ๊ทธ ์์์ ํ์ด๋จธ๊ฐ ๋์์ ํ๊ฑฐ๋ ๋คํธ์ํฌ ํต์ ์ ์งํํ๊ณ ,
์ฝ๋๊ฐ ์คํ๋ ์ค๋น๊ฐ ๋๋ฉด ์ฝ๋ฐฑ ํ์ ํด๋น ์์
์ ๋ฃ์ด์ค๋๋ค. ๊ทธ๋์ ์ฌ์ค์
๋น๋๊ธฐ ํจ์๊ฐ ๋๊ธฐ์ ์ธ ํจ์๋ค๊ณผ '๋์'์ ๋์ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง,
์ด๋ ์์ฃผ ์ฌ๋น ๋ฅด๊ฒ ์ฝ ์คํ์ ๋์ด์ ์คํ๋์๊ธฐ ๋๋ฌธ์
๋๋ค. ์ฆ, ๋ชจ๋ ๊ฑด
์์ฐจ์ ์ผ๋ก ํ๋์ ์ค๋ ๋(์ฝ ์คํ) ์์์ ๋์๊ฐ๊ณ ์ฐ๋ฆฌ๋ ๊ทธ์ ์ด ์๊ฐ ์ฐจ๊ฐ ๋๋ฌด ์์์
๋์์ ๋์๊ฐ๋ค๊ณ ์ฐฉ๊ฐ์ ํ๋ ๊ฒ์
๋๋ค
web api
๊ฐ๋ฐ์๊ฐ ๋ธ๋ผ์ฐ์ ์์์ ์ฝ๊ฒ ๊ฐ๋ฐํ ์ ์๋๋ก ๋์์ฃผ๋ ๊ฐ์ฒด ๋ชจ์๋ค์ด๋ค.
์น ap(๋ ajax settimeout)i๋ฅผ ์ด์ฉํด์ ๋ ์์๋ฅผ ์กฐ์ํ๊ฑฐ๋ ์ผ๋ถ ์์ญ์ ์
๋ฐ์ดํธ์ํค๊ณ
๋น๋์ค,์ค๋์ค,๊ทธ๋ํฝ ์์๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๊ฐ์ฒด ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๊ณ ์ํธ๋ฆฌ ํฌ์ธํธ๊ฐ ์กด์ฌํ๋ค