AJAX (Asynchronous JavaScript And XML)
- ๋น๋๊ธฐ์ JavaScript์ XML
- ์๋ฒ์ ํต์ ํ๊ธฐ ์ํด XMLHttpRequest ๊ฐ์ฒด๋ฅผ ํ์ฉ
- JSON, XML, HTML ๊ทธ๋ฆฌ๊ณ ์ผ๋ฐ ํ ์คํธ ํ์ ๋ฑ์ ํฌํจํ ๋ค์ํ ํฌ๋งท์ ์ฃผ๊ณ ๋ฐ์ ์ ์์
- ํ์ด์ง ์ ์ฒด๋ฅผ reload(์๋ก๊ณ ์นจ)๋ฅผ ํ์ง ์๊ณ ์๋ ์ํ๋๋
๋น๋๊ธฐ์ฑ- ์ฌ์ฉ์์ event๊ฐ ์์ผ๋ฉด ์ ์ฒด ํ์ด์ง๊ฐ ์๋ ์ผ๋ถ๋ถ๋ง์ ์ ๋ฐ์ดํธ ํ ์ ์์
- AJAX์ ์ฃผ์ ๋๊ฐ์ง ํน์ง์ ์๋์ ์์
์ ํ ์ ์๊ฒ ํด์ค
- ํ์ด์ง ์๋ก๊ณ ์นจ ์์ด ์๋ฒ์ ์์ฒญ
- ์๋ฒ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ณ ์์ ์ ์ํ
- ์๋ฒ์ ์ํธ์์ฉํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ฉฐ ์ ์ฒด ํ์ด์ง์ ์๋ก๊ณ ์นจ ์์ด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ ์ ์์
- ์ฌ์ฉ์์ ์์ ์ ๋ฐฉํดํ์ง ์์ผ๋ฉด์ ํ์ด์ง ์ผ๋ถ๋ฅผ ์ ๋ฐ์ดํธ ํ ์ ์์
- ์ฃผ๋ก AJAX ํ๋ก๊ทธ๋๋ฐ์ ์ฌ์ฉ
- ์ด๋ฆ๊ณผ ๋ฌ๋ฆฌ XML๋ฟ๋ง ์๋๋ผ ๋ชจ๋ ์ข ๋ฅ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ ์ ์์
- ์์ฑ์
- XMLHttpRequest()
์์
- ์์ฐจ์ , ์ง๋ ฌ์ Task ์ํ
- ์์ฒญ์ ๋ณด๋ธ ํ ์๋ต์ ๋ฐ์์ผ๋ง ๋ค์ ๋์์ด ์ด๋ฃจ์ด์ง(blocking)
์์
๋ฒํผ ํด๋ฆญ ํ alert ๋ฉ์์ง์ ํ์ธ ๋ฒํผ์ ๋๋ฅผ ๋๊น์ง ๋ฌธ์ฅ์ด ๋ง๋ค์ด์ง์ง ์์
์ฆ, alert ์ดํ์ ์ฝ๋๋ alert์ ์ฒ๋ฆฌ๊ฐ ๋๋ ๋๊น์ง ์คํ๋์ง ์์
์ ์ด๋ฐ ํ์์ด ๋ฐ์ํ ๊น?
JavaScript๋ single threaded
- ๋ณ๋ ฌ์ Task ์ํ
- ์์ฒญ์ ๋ณด๋ธ ํ ์๋ต์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค์ ๋์์ด ์ด๋ฃจ์ด์ง(non-blocking)
์์
์์ฒญ์ ๋ณด๋ด๊ณ ์๋ต์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค์ ์ฝ๋๊ฐ ์คํ๋จ
๊ฒฐ๊ณผ์ ์ผ๋ก ๋ณ์ todo์๋ ์๋ต ๋ฐ์ดํฐ๊ฐ ํ ๋น๋์ง ์๊ณ ๋น ๋ฌธ์์ด์ด ์ถ๋ ฅ
๊ทธ๋ ๋ค๋ฉด JS๋ ์ ๊ธฐ๋ค๋ ค์ฃผ์ง ์๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋๊ฐ?
JavaScript๋ single threaded
- "์ฌ์ฉ์ ๊ฒฝํ"
- ๋งค์ฐ ํฐ ๋ฐ์ดํฐ๋ฅผ ๋๋ฐํ๋ ์ฑ์ด ์๋ค๊ณ ๊ฐ์
- ๋๊ธฐ์ ์ฝ๋๋ผ๋ฉด ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๋ถ๋ฌ์จ ๋ค ์ฑ์ด ์คํ๋จ
- ์ฆ, ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๋ถ๋ฌ์ฌ ๋ ๊น์ง๋ ์ฑ์ด ๋ชจ๋ ๋ฉ์ถ ๊ฒ์ฒ๋ผ ๋ณด์
- ์ฝ๋ ์คํ์ ์ฐจ๋จํ์ฌ ํ๋ฉด์ด ๋ฉ์ถ๊ณ ์๋ตํ์ง ์๋ ๊ฒ ๊ฐ์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณต
- ๋น๋๊ธฐ์ ์ฝ๋๋ผ๋ฉด ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ ์๋ต ๋ฐ๋ ๋์, ์ฑ ์คํ์ ํจ๊ป ์งํํจ
- ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋ ๋์ ์ง์์ ์ผ๋ก ์๋ตํ๋ ํ๋ฉด์ ๋ณด์ฌ์ค์ผ๋ก์จ ๋์ฑ ์พ์ ํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณต
- ๋๋ฌธ์ ๋ง์ ์น API ๊ธฐ๋ฅ์ ํ์ฌ ๋น๋๊ธฐ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ์คํ๋จ
- ํ๋ก๊ทธ๋จ์ด ์์ ์ ์๋ฃํ๊ธฐ ์ํด ์ฌ์ฉํ ์ ์๋ ๋จ์ผ ํ๋ก์ธ์ค
- ๊ฐ thread(์ค๋ ๋)๋ ํ ๋ฒ์ ํ๋์ ์์ ๋ง ์ํํ ์ ์์
- ex) Task A -> Task B -> Task C
- ๋ค์ ์์ ์ ์์ํ๋ ค๋ฉด ๋ฐ๋์ ์์ ์์ ์ด ์๋ฃ๋์ด์ผํจ
- ์ปดํจํฐ CPU๋ ์ฌ๋ฌ ์ฝ์ด๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ํ ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ง ์ผ์ ์ฒ๋ฆฌํ ์ ์์
"JavaScript๋ single threaded ์ด๋ค."
- ์ปดํจํฐ๊ฐ ์ฌ๋ฌ ๊ฐ์ CPU๋ฅผ ๊ฐ์ง๊ณ ์์ด๋ main thread๋ผ ๋ถ๋ฆฌ๋ ๋จ์ผ ์ค๋ ๋์์๋ง ์์ ์ํ
- ์ฆ, ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ Call Stack์ด ํ๋์ธ ์ธ์ด๋ผ๋ ์๋ฏธ
- ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด JavaScript๋
- ์ฆ์ ์ฒ๋ฆฌํ์ง ๋ชปํ๋ ์ด๋ฒคํธ๋ค์ ๋ค๋ฅธ ๊ณณ(Web API)์ผ๋ก ๋ณด๋ด์ ์ฒ๋ฆฌํ๋๋ก ํ๊ณ ,
- ์ฒ๋ฆฌ๋ ์ด๋ฒคํธ๋ค์ ์ฒ๋ฆฌ๋ ์์๋๋ก ๋๊ธฐ์ค(Task queue)์ ์ค์ ์ธ์ ๋๊ณ
- Call Stack์ด ๋น๋ฉด ๋ด๋น์(Event Loop)๊ฐ ๋๊ธฐ ์ค์์ ๊ฐ์ฅ ์ค๋๋(์ ์ผ ์์) ์ด๋ฒคํธ๋ฅผ Call Stack์ผ๋ก ๋ณด๋
Event loop๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๋์์ฑ ๋ชจ๋ธ(Concurrency model)
- ์์ฒญ์ด ๋ค์ด์ฌ ๋๋ง๋ค ํด๋น ์์ฒญ์ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ Stack(LIFO) ํํ์ ์๋ฃ ๊ตฌ์กฐ
- JavaScript ์์ง์ด ์๋ ๋ธ๋ผ์ฐ์ ์์ญ์์ ์ ๊ณตํ๋ API
- setTimeout(), DOM events ๊ทธ๋ฆฌ๊ณ AJAX๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ์๊ฐ์ด ์์๋๋ ์ผ๋ค์ ์ฒ๋ฆฌ
- ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ callback ํจ์๊ฐ ๋๊ธฐํ๋ Queue(FIFO) ํํ์ ์๋ฃ ๊ตฌ์กฐ
- main thread๊ฐ ๋๋ ํ ์คํ๋์ด ํ์ JavaScript ์ฝ๋๊ฐ ์ฐจ๋จ๋๋ ๊ฒ์ ๋ฐฉ์ง
- Call Stack์ด ๋น์ด ์๋์ง ํ์ธ
- ๋น์ด ์๋ ๊ฒฝ์ฐ Task Queue์์ ์คํ ๋๊ธฐ ์ค์ธ callback ํจ์๊ฐ ์๋์ง ํ์ธ
- Task Queue์ ๋๊ธฐ ์ค์ธ callback ํจ์๊ฐ ์๋ค๋ฉด ๊ฐ์ฅ ์์ ์๋ callback ํจ์๋ฅผ Call Stack์ผ๋ก push










