์ฃผ์ ๋ฅผ ์์ํ๊ธฐ ์ ์ ๋๊ธฐ, ๋น๋๊ธฐ๋ผ๋ ๋จ์ด์ ๋ํด ๋จผ์ ์ ๋ฆฌํ๊ณ ๋ค์ด๊ฐ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
Syncronous
ย ๋๊ธฐ: ์์ฒญ์ ๋ณด๋ธ ํ ํด๋น ์์ฒญ์ ์๋ต์ ๋ฐ์์ผ ๋ค์ ๋์์ ์คํํ๋ ๋ฐฉ์Asynchronous
ย ๋น๋๊ธฐ: ์์ฒญ์ ๋ณด๋ธ ํ ์๋ต๊ณผ ๊ด๊ณ์์ด ๋ค์ ๋์์ ์คํํ๋ ๋ฐฉ์
์ฆ, ๋ค์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋๊ธฐ์ ์ผ๋ก ์๋ํ๋ค๋ ๊ฒ์ ์์ ์ ์์ฐจ์ ์ผ๋ก ์งํํ๋ ๊ฒ์ ์๋ฏธํ๋ฉฐ,
๋น๋๊ธฐ์ ์ผ๋ก ์๋ํ๋ค๋ ๊ฒ์ ๋ค์ ์์ ์ด ๋๋๊ธฐ ์ ์ ๋ค์ ์์ ์ ์์ํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
๋น๋๊ธฐ์ ์ผ๋ก ์๋ํ ๊ฒฝ์ฐ ํ๋์ ์์ ์ด ์ธ์ ๋๋ ์ง, ์ธ์ ์์ํ ์ง ์์ธกํ๊ธฐ ์ด๋ ต๋ค๋ ๋จ์ ์ด ์์ง๋ง,
์ฌ๋ฌ ์์
์ ๋์์ ์์
ํ์ฌ ๋น๊ต์ ๋น ๋ฅด๋ค๋ ์ฅ์ ์ด ์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋๊ธฐ์ ์ผ๋ก ์๋ํ๋ค.
ํ์ง๋ง ๋น๋๊ธฐ์ ์ผ๋ก ์๋ํ๋ค๊ณ ํท๊ฐ๋ฆฌ๊ณค ํ๋๋ฐ ์๋ง ์ถ์ธก์ปจ๋ฐ Node.js๊ฐ ๋น๋๊ธฐ์ ์ผ๋ก ์๋ํ๊ธฐ ๋๋ฌธ์ด ์๋๊น ์ถ๋ค.
Node.js ๋ฅผ ์ฒ์ ํ์ตํ ๋ ํญ์ ๋ง์ฃผํ๋ ๊ทธ ๋ฌธ์ฅ๊ณผ ๋จ์ด๋ค!
โNode.js๋ V8 ์์ง์ผ๋ก ๋น๋๋ ์ด๋ฒคํธ ๊ธฐ๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์์ด๋ฉฐ,
๋ ผ๋ธ๋กํน I/O์ ๋จ์ผ ์ค๋ ๋ ์ด๋ฒคํธ ๋ฃจํ๋ฅผ ํตํ ๋์ ์ฑ๋ฅ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.โ (์ถ์ฒ: ์ํค๋ฐฑ๊ณผ)
- V8 ์์ง: ์น๋ธ๋ผ์ฐ์ ๋ฅผ ๋ง๋๋ ๋ฐ ๊ธฐ๋ฐ์ ์ ๊ณตํ๋ ์คํ ์์ค ์๋ฐ์คํฌ๋ฆฝํธ ์์ง (๊ตฌ๊ธ ํฌ๋กฌ ๋ธ๋ผ์ฐ์ ์ ์๋๋ก์ด๋ ๋ธ๋ผ์ฐ์ ์ ํ์ฌ)
- ์ด๋ฒคํธ: ๋ธ๋ผ์ฐ์ ์์ ํด๋ฆญ, ํค๋ณด๋ ์ ๋ ฅ ๋ฑ ์ฌ์ฉ์์์ ์ํธ์์ฉ์ด ์ผ์ด๋ ๊ฒ์ ์ด๋ฒคํธ๋ผ๊ณ ํํ
- ๋ฐํ์: ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ๊ตฌ๋๋๋ ํ๊ฒฝ
- ๋ ผ๋ธ๋กํน: ๋น๋๊ธฐ(
Asynchronous
)๋ฅผ ์๋ฏธ โโ ๋ธ๋กํน: ๋๊ธฐ(Syncronous
)๋ฅผ ์๋ฏธ- I/O: Input๊ณผ Output
- ๋จ์ผ ์ค๋ ๋: ํ๋์ ํ๋ก์ธ์ค๋ฅผ ์์์ ๋ค์ํ ์์ ์ ๋ด๋นํ๋ ์ต์ ์คํ ๋จ์๋ฅผ ์ค๋ ๋
์๋ฐ์คํฌ๋ฆฝํธ๋ ๋จ์ผ ์ค๋ ๋, ๋ธ๋กํน(๋๊ธฐ, Syncronous
) ๋ฐฉ์์ผ๋ก ์์
์ ์ํํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ฃผ์ ๊ตฌ์ฑ ์์์ ๋์ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ํธ์ถ ์คํ(Call Stack): ์์ ํ์ ๊ฐ๊ณผ ์คํ ์ปจํ ์คํธ(Execution Context) ์ ์ฅ
- ๋ฉ๋ชจ๋ฆฌ ํ(Memory Heap): ์ฐธ์กฐํ์ ์ด ์ ์ฅ๋๋ฉฐ, ๋์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ํ ๋นํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ
first() ํจ์๋ฅผ ์คํํ๊ณ ํธ์ถ ์คํ์ด ๋น์์ง๋ฉด, third() ํจ์๋ฅผ ์คํํ๋ค.
์ฒ์ ๋ค์ด์จ ํจ์๊ฐ ์์ ํ ์คํ๋๊ณ ๋ ํ ๋ค์ ํจ์๊ฐ ์คํ๋๋ ๋๊ธฐ์ ์ธ ๋์ ๋ฐฉ๋ฒ์ด๋ค.
์น ํ์ด์ง์์ ์ฌ๋ฌ๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ๋ ์์ ์ ์ฒ๋ฆฌํ๋ค๊ณ ํ์ ๋
๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌ๋ ๊ฒฝ์ฐ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋๋ฐ ๊ต์ฅํ ๋ง์ ์๊ฐ์ด ๊ฑธ๋ฆด ๊ฒ์ด๊ณ ,
์ฌ์ฉ์๋ ๋ฐ์์ด ์๋ ๋ธ๋ผ์ฐ์ ํ๋ฉด์ ๋ฐ๋ผ๋ณด๊ณ ์์ด์ผ ํ ๊ฒ์ด๋ค.
์ฆ, ์๋ฐ์คํฌ๋ฆฝํธ์ ๋น๋๊ธฐ์ ์ฒ๋ฆฌ ๋ฐฉ์์ด ํ์ํ ๊ฒ์ด๋ค.
์ฝ๋ฐฑ(callback), ํ๋ก๋ฏธ์ค(promise), async/await ๋ฑ์ ํตํด ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋น๋๊ธฐ์ ์ฝ๋๋ฅผ ์ ์ด(?)ํ ์ ์๋ค. (์ ๊ฐ๋ ์ ๋ค์ ๊ธ์์ ์ ๋ฆฌํ ์์ ์ด๋ค!)
์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋น๋๊ธฐ์ ์ผ๋ก ๋์ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์
์ถ์ฒ: ํธ์ถ ์คํ๊ณผ ์ด๋ฒคํธ๋ฃจํ
์ถ์ฒ
zerocho - ํธ์ถ ์คํ๊ณผ ์ด๋ฒคํธ๋ฃจํ
tistory - ์๋ฐ์คํฌ๋ฆฝํธ - ๋๊ธฐ(Synchronous)? ๋น๋๊ธฐ(Asynchronous)?
tistory - ์๋ฐ์คํฌ๋ฆฝํธ - ๋์ ์๋ฆฌ
velog - Javascript๋ ๋๊ธฐ์ผ๊น? ๋น๋๊ธฐ์ผ๊น?
velog - ์ฑ๊ธ์ค๋ ๋(Single thread) vs ๋ฉํฐ์ค๋ ๋ (Multi thread)
velog -JS ๋น๋๊ธฐ์ ํต์ฌ Event Loop