https://inpa.tistory.com/entry/๐ฉโ๐ป-๋๊ธฐ๋น๋๊ธฐ-๋ธ๋กํน๋ ผ๋ธ๋กํน-๊ฐ๋ -์ ๋ฆฌ
์๊ณ ์๋ ์ง์์ ์ฌ์ ๊ฒํ๋ ์ค์ ๋๋ฌด๋๋ ์ ์ ๋ฆฌ๋์ด ์๋ ๊ธ์ ๋ฐ๊ฒฌํ์ฌ ๊ทธ๋๋ก ์ฎ๊ฒจ ์ ์
ํ๋ก๊ทธ๋๋ฐ์์ ์น ์๋ฒ ํน์ ์ ์ถ๋ ฅ์ ๋ค๋ฃจ๋ค ๋ณด๋ฉด ๋๊ธฐ/๋น๋๊ธฐ & ๋ธ๋กํน/๋ ผ๋ธ๋กํน ์ด๋ฌํ ์ฉ์ด๋ค์ ์ ํด๋ณธ ๊ฒฝํ์ด ํ ๋ฒ ์ฏค์ ์์ ๊ฒ์ด๋ค. ๋๋ถ๋ถ ์ฌ๋๋ค์ ์ฉ์ด๋ค์ด ๋ํ๋ด๊ณ ์ ํ๋ ํ์์ ๋ํด์ ๋ฉํฐ ํ ์คํน๊ณผ ๋ฐ์ ํ ๊ด๋ จ์ด ์๋ค๋ ๊ฒ์ผ๋ก ์๊ณ ์๋ค. ๊ทธ๋์ ๋ ๊ฐ๋ ์ ๋น์ทํ ๊ฒ์ผ๋ก ์คํดํ๋ ์ฌ๋๋ค์ด ๊ฝค ๋ง๋ค.
๋๊ธฐ/๋น๋๊ธฐ ์ ๋ธ๋กํน/๋ ผ๋ธ๋กํน ์ด ๋ ๊ฐ๋ ์ ํํ ํํ๋ ๋น์ทํด ๋ณด์ผ์ง๋ผ๋, ์๋ก ๋ค๋ฅธ ์ฐจ์์์ ์์ ์ ์ํ ๋ฐฉ์์ ์ค๋ช ํ๋ ๊ฐ๋ ์ด๋ค. ๋๊ธฐ/๋น๋๊ธฐ๋ ์์ฒญํ ์์ ์ ๋ํด ์๋ฃ ์ฌ๋ถ๋ฅผ ์ ๊ฒฝ ์จ์ ์์ ์ ์์ฐจ์ ์ผ๋ก ์ํํ ์ง ์๋์ง์ ๋ํ ๊ด์ ์ด๊ณ , ๋ธ๋กํน/๋ ผ๋ธ๋กํน์ ๋จ์ด ๊ทธ๋๋ก ํ์ฌ ์์ ์ด block(์ฐจ๋จ, ๋๊ธฐ) ๋๋๋ ์๋๋์ ๋ฐ๋ผ ๋ค๋ฅธ ์์ ์ ์ํํ ์ ์๋์ง์ ๋ํ ๊ด์ ์ด๋ค.

์ด์ฒ๋ผ ๋ ๊ฐ๋ ์ ๋ํ ์๋ฏธ ์ฐจ์ด๋ ๋ช ํํ์ง๋ง, ํ๋ก๊ทธ๋๋ฐ์์๋ ์ข ์ข ํผ์ฉ๋์ด ์ฌ์ฉ๋๊ธฐ๋ ํ๋ค. ๋ํ์ ์ผ๋ก ์๋ฐ์คํฌ๋ฆฝํธ์ setTimeout() ํจ์๋ฅผ ์ผ๋ฐ์ ์ผ๋ก ๋น๋๊ธฐ ํจ์๋ผ๊ณ ๋ง ๋ถ๋ฅด์ง๋ง ๋์์ ๋ ผ๋ธ๋กํน ํจ์์ด๊ธฐ๋ ํ๋ค. ์ฆ, ์ฐ๋ฆฌ๊ฐ ํธ์์ ๋ถ๋ฅด๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋น๋๊ธฐ ํจ์๋ ์ฌ์ค ๋น๋๊ธฐ + ๋ ผ๋ธ๋กํน ํจ์์ธ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ์ด๋ค์ ์ ํํ๊ฒ ๊ตฌ๋ถํ๊ณ ์ดํดํ๋ ๊ฒ์ด ์ปดํจํฐ ์ํคํ ์ฒ๋ฅผ ์ดํดํ๋๋ฐ ์์ด ์ค์ํ๋ค.
๋๊ธฐ์ ๋น๋๊ธฐ๋ฅผ ์์๋ณด๊ธฐ ์์, ์ด ๋ ๊ฐ๋ ์ ํ๊ธ์ด ์๋ ์๋จ์ด๋ก ํ์ตํ๊ธธ ๊ฐ๋ ฅํ ๊ถ์ฅํ๋ ๋ฐ๋ค. ์๋๋ฉด ํ๊ธ๋ก ์ง์ญํ๋ฉด โ๊ฐ์ ๊ธฐ๊ฐโ ๋๋ โ๊ฐ์ ์ฃผ๊ธฐโ ๋ผ๋ ๋ป์ ํ์๋ฅผ ์ฌ์ฉํ๋๋ฐ ์คํ๋ ค ์๋ฏธ๋ฅผ ์ดํดํ๋๋ฐ ์์ด ๋์ฑ ํผ๋๋ง ์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ ์๋จ์ด๋ฅผ ํ์ธํ๋ฉด Synchronous ์ Sync ๋ ๊ทธ๋ฆฌ์ค์ด๋ก โํจ๊ปโ ๋ผ๋ ๋ป์ด๊ณ chrono ๋ โ์๊ฐโ ์ด๋ผ๋ ๋ป์ด๋ค.
์ฆ, Synchronous ๋ ์์ ์๊ฐ์ ํจ๊ป ๋ง์ถฐ์ ์คํํ๋ค ๋ผ๋ ๋ป์ผ๋ก ํด์๋๋ค. ์์ ์ ๋ง์ถฐ ์คํํ๋ค๋ ๋ง์ ์์ฒญํ ์์ ์ ๋ํด ์๋ฃ ์ฌ๋ถ๋ฅผ ๋ฐ์ ธ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋งํ๋ค. Asynchronous ๋ ์์ A ๋ผ๋ ์ ๋์ฌ๊ฐ ๋ถ์ด ๋ถ์ ํ๋ ํํ์ด๋ค. ๊ทธ๋์ ๋๊ธฐ์ ๋ฐ๋๋ก ์์ฒญํ ์์ ์ ๋ํด ์๋ฃ ์ฌ๋ถ๋ฅผ ๋ฐ์ง์ง ์๊ธฐ ๋๋ฌธ์ ์์ ์ ๋ค์ ์์ ์ ๊ทธ๋๋ก ์ํํ๊ฒ ๋๋ค.

๋ณดํต ๋น๋๊ธฐ ํน์ง์ ์ด์ฉํ์ฌ ์ฑ๋ฅ๊ณผ ์ฐ๊ด์ง์ด ๋งํ๋ค. ์๋ํ๋ฉด ์์ฒญํ ์์ ์ ๋ํ์ฌ ์๋ฃ ์ฌ๋ถ๋ฅผ ์ ๊ฒฝ์ฐ์ง ์๊ณ ์์ ์ ๊ทธ ๋ค์ ์์ ์ ์ํํ๋ค๋ ๊ฒ์ I/O ์์ ๊ณผ ๊ฐ์ ๋๋ฆฐ ์์ ์ด ๋ฐ์ํ ๋, ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค๋ฅธ ์์ ์ ์ฒ๋ฆฌํ๋ฉด์ ๋์์ ์ฒ๋ฆฌํ์ฌ ๋ฉํฐ ์์ ์ ์งํํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ ์ ๋ฐ์ ์ธ ์์คํ ์ฑ๋ฅ ํฅ์์ ๋์์ ์ค ์ ์๋ค.

์๋ฅผ ๋ค์ด, ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ๋ฅผ ์ํํ๋ ์์ ์ด ์๋ค๊ณ ๊ฐ์ ํด๋ณด์. ์ด ์์ ์ ๋ง์ผ ๋๊ธฐ์ ์ผ๋ก ์ํํ๋ฉด, ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์๋ต์ด ์ฌ ๋ ๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ค. ๊ทธ๋ฌ๋ฉด ์ด ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ์์ฒญ์ ์ฒ๋ฆฌํ์ง ๋ชปํ๋ฏ๋ก, ๋๊ท๋ชจ ํธ๋ํฝ์ด ๋ฐ์ํ ๊ฒฝ์ฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๋ค. ํ์ง๋ง ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ๋ฅผ ์ํํ๋ฉด, ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์๋ต์ด ์ฌ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ๋์์๋ ๋ค๋ฅธ ์์ฒญ์ โ๋์์ ์ฒ๋ฆฌโ ํ ์ ์๊ฒ ๋๋ค. ์ด๋ ๊ฒ ๋น๋๊ธฐ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด, ๋๊ท๋ชจ ํธ๋ํฝ์์๋ ์์ ์ ์ผ๋ก ๋์ํ ์ ์๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์๋ค.
์ฌ๊ธฐ์ โ๋์ ์ฒ๋ฆฌโ ๋ผ๋ ๊ฐ๋ ์ ๋ ๊ฐ ์ด์์ ์์ ์ด ๋์์ ์คํ๋๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ด๋ ๋ฉํฐ ์ค๋ ๋๋ ๋ฉํฐ ํ๋ก์ธ์ฑ๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๊ตฌํ๋ ์ ์๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ ๊ฒฝ์ฐ ๋น๋๊ธฐ๋ก ์์ ์ ์์ฒญํ๋ฉด ๋ธ๋ผ์ฐ์ ์ ๋ด์ฅ๋ ๋ฉํฐ ์ค๋ ๋๋ก ์ด๋ฃจ์ด์ง Web API ์ ์์ ์ด ์ธ๊ฐ๋์ด ๋ฉ์ธ Call Stack ๊ณผ ์์ ์ด ๋์์ ์ฒ๋ฆฌ๋๊ฒ ๋๋ค. ์ฝ๊ฒ ๋น์ ํ์๋ฉด ์์ ์ ๋ฐฑ๊ทธ๋ผ์ด๋์ ์ธ๊ฐํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค. ๋ํ์ ์ธ ๋น๋๊ธฐ ์์ ์ ์ข ๋ฅ๋ก๋ ์ ๋๋ฉ์ด์ ์คํ, ๋คํธ์ํฌ ํต์ , ๋ง์ฐ์ค ํค๋ณด๋ ์ ๋ ฅ, ํ์ด๋จธ ๋ฑ ๋ง๋ค. ๋ค๋ง ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ ์คํ ์์ฒด๋ Web API ๊ฐ ์๋ Call Stack ์์ ์คํ๋๋ค.