๐ง ์ด์ ์ ์๋ฐ์คํฌ๋ฆฝํธ, Node.js๋ฅผ ๊ณต๋ถํ์๋๋ ๊ทธ๋ ๊ณ ๋น๋๊ธฐ ๊ฐ๋ ์ ๋งค์ฐ ์ค์ํ๊ฒ ๋ค๋ค์ง๋ค. ๋น๋๊ธฐ์ ๋ํ ๊ฐ๋ ์ ์ด์ ์ด๋์ ๋ ํ์คํ๊ฒ ์๊ณ ์์ง๋ง Blocking๊ณผ Synchronous, Non-blocking๊ณผ Asynchronous์ ๊ฐ๋ ์ด ํผ๋๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ์ ๋ฆฌํด ๋ณด๊ณ ์ ํ๋ค.
Blocking๊ณผ Non-blocking์ '์ ์ด๊ถ'์ ๊ด์ ์์ ์ ๊ทผํ๋ ๋ฐฉ์์ด๋ค.
Blocking์ด๋ผ๋ ๊ฒ์ ํ๊ตญ์ด๋ก '๋งํ ์๋ค' ๋ผ๋ ๋ป์ผ๋ก, ํธ์ถ๋ ํจ์๊ฐ ์ ์ด๊ถ์ ๋๊ฒจ์ฃผ์ง ์์ ํธ์ถํ ํจ์์ธก์์๋ ๋ค๋ฅธ ์์ ์ ์ํํ ์ ์์ด ์ ์ด๊ถ์ด ๋์์ค๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ ๋งํ๋ค.
๋ฐ๋๋ก Non-Blocking์, ์ ์ด๊ถ์ด ๋๊ฒจ ์ง์ง ์์ผ๋ฏ๋ก, ๋์์ ์์ ์ฒ๋ฆฌ ์ฌ๋ถ์ ์๊ด์ด ์์ด ํธ์ถํ ํจ์ ์ธก์์ ์ ์ด๊ถ์ ๊ฐ์ง๊ณ ๋ค์ ์์ ๋ค์ ์ํํ ์ ์๋ค.
๋ค์๋งํด Non-Blocking ์ผ๋ก ์๋ํ๋ค๋ ๊ฒ์, ์ ์ด๊ถ์ ํธ์ถํ ํจ์ ์ธก์์ ๊ณ์ํด์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์, ๋ง์ฝ์ ๋ค๋ฅธ ํจ์๊ฐ ์คํ๋๋ค๋ฉด ๊ทธ ํจ์์ ๋ํ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐ์ ์ ์๋ ์ํฉ์ธ์ง ์ฒดํฌํ๋ ๊ณผ์ ์ด ํ์ํ ๊ฒ์ด๋ค.
Synchronous, Asynchronous๋ '์๊ฐ'์ ๊ด์ ์์ ์ ๊ทผํด์ผ ํ๋ค.
ํธ์ถ๋ ํจ์์ ํธ์ถํ ํจ์ ๋ ํจ์ ๊ด์ ์์ ๋ฐ๋ผ๋ณด๋ฉด, Synchronous ๋ ๋ ํจ์์ ์์๊ณผ ์ข ๋ฃ ์๊ฐ์ ๋ํด ๋ง์ถฐ์ ธ์ผํ๋ค๋ ๋ป์ด๋ค. ์คํ์์ ํจ์ ํ๋๊ฐ ๋น ์ ธ ๋๊ฐ๊ณ , ๋ค์ ํจ์๊ฐ ์คํ์ด ๋๊ณ , ์ด๋ฐ ๋๋์ผ๋ก ์๊ฐ์ด ์ง์ผ์ง๋ฉด์ ์์ฐจ์ ์ผ๋ก ์ผ์ด๋ ์ ์๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ค์ ๋ก ํ๊ตญ์ด๋ก ๋๊ธฐํ ๋ํ ๊ทธ๋ฐ ๋งฅ๋ฝ์์ ๋ค์ด๋ง๋๋ค๊ณ ๋ณผ ์ ์๋ค.
Asynchronous๋ ๋ ํจ์์ ์์๊ณผ ์ข ๋ฃ ์๊ฐ์ด ์์ ํ ๋ง์ถฐ์ง์ง๊ฐ ์๋๋ค๋ ๋ป์ด๋ค. ํธ์ถํ ํจ์๋ ํธ์ถ๋ ํจ์์ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง๋ง, ์ ์ด๊ถ์ด ์ด๋ป๊ฒ ๋ ์ง๋ ๊ด์ฌ์ด ์๋ค. ๋น๋๊ธฐ์ ์ผ๋ก ๋ค๋ฅธ ํจ์๊ฐ ์คํ์ด ๋๋ค๋ ๋ฐ์ ์๋ฏธ๊ฐ ์๊ณ ํธ์ถ๋ ํจ์์ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐ๊ฒ ๋๋๋ฐ ๋ค๋ฅธ ๋น๋๊ธฐ ํจ์๋ก ๋ถํฐ ๋ฐ์ ๊ฒฐ๊ณผ๊ฐ์ ๋ํด ๋ชจ๋ ์์๊ฐ ์์ ํ ๋ณด์ฅ์ด ๋ ์ ์๋ค๋ ์๋ฏธ์ด๋ค. Ajax ๊ฐ ๋ํ์ ์ธ ๊ทธ ์์์ด๋ค.
์ถ์ฒ: homoefficio๋ ๋ธ๋ก๊ทธ
์ ์ด๊ถ์ ํธ์ถ๋ ํจ์์๊ฒ ๋๊ฒจ์ฃผ์ง ์๋๋ค (Non-blocking)
But, ๊ฒฐ๊ณผ๊ฐ์ ์์๋ ๋ณด์ฅ๋๋ค (Synchronous)
์ ์ด๊ถ์ ํธ์ถ๋ ํจ์์๊ฒ ๋๊ฒจ์ฃผ์ง ์๊ธฐ ๋๋ฌธ์ (Non-blocking), ํ๋ก๊ทธ๋จ ์ธก์์๋ ํธ์ถํ ํจ์๊ฐ ๋๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉด์ ๋ค๋ฅธ ์์
๋ค์ ์ํํ ์๊ฐ ์๋ ๊ฒ์ด ํต์ฌ์ด๋ค.
ํ์ง๋ง Synchronous์ ํน์ฑ ๋๋ฌธ์, ์๊ฐ์ ๋ง์ถฐ์ฃผ๊ธฐ ์ํด ๋งค ์๊ฐ ํธ์ถ๋ ํจ์๊ฐ ๋๋ฌ๋์ง ํ
์คํ
ํ๋ ์์ฒญ์ด ํ์ํ๋ค.
์ ์ด๊ถ์ ํธ์ถ๋ ํจ์์๊ฒ ๋๊ฒจ์ฃผ๊ฒ ๋๋ค (Blocking)
But, ๊ฒฐ๊ณผ๊ฐ์ ์์๋ ๋ณด์ฅ๋์ง ์์ผ๋ฉฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ์ผ๋ก ์ด๋ฃจ์ด์ง๋ค (Asynchronous)
ํธ์ถํ ํจ์๋ ์ ์ด๊ถ์ ํธ์ถ๋ ํจ์์๊ฒ ๋๊ฒจ์ฃผ์ด ๋ค๋ฅธ ์์ ๋ค์ ํ ์ ์๊ฒ ๋๋ค. ํธ์ถ๋ ํจ์์ ๋ํ ๊ฒฐ๊ณผ๊ฐ์ ์๋ต์ ๋ฐ์ ํ, ์ ์ด๊ถ ๋ํ ๋๊ฒจ๋ฐ๊ฒ ๋์ด ๋ค๋ฅธ ์์ ๋ค์ด ์คํ๋๋ค. ๊ทธ๋ฆฌ๊ณ Asynchronous์ ํน์ฑ์ ๊ฐ์ง๋ค. ์ฌ์ค ์ด๋ฐ ์ผ์ด์ค๋ ๋นํจ์จ์ ์ด๊ธฐ ๋๋ฌธ์ ๊ฑฐ์ ์ฌ์ฉ๋์ง ์๋๋ค. ํ๊ฒฝ์ด ๋ค๋ฅธ ๋ ํ๋ก๊ทธ๋จ์ ํผํฉ์์ ์ฌ์ฉํ๋ฉด์ ๊ฒช๊ฒ ๋๋ ํฌ๊ทํ ๊ฒฝ์ฐ (ex. Node.js์ MySQL์ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒฝ์ฐ)์ ์ฌ์ฉ๋์ด์ง๋ค๊ณ ํ๋ค.