nodejs
nodejs๋ Chrome V8 Javascript ์์ง์ผ๋ก ๋น๋๋ Javascript ๋ฐํ์์ ๋๋ค. ๋ฐํ์์ด๋ผ๋ ๋ง์ javascript๋ฅผ ์คํํ๋ ํ๊ฒฝ์ ๋๋ค. ๋ํ Nodejs๋ก ์น์ฌ์ดํธ์์ ์๋ฒ๋ก ์ฌ์ฉ๋๋ ๊ฑด ๋ฌด์จ ๋ง์ผ๊น์? nodejs์ ๋ํ ๊ธฐ์ด ๊ฐ๋ ์ ํจ๊ป ์์๊ฐ๋ณด๋๋ก ํฉ์๋ค. ์ด ๊ธ์ ๋ชฉ์ ์ ์ด๊ธ๊ณผ ์ค๊ธ์ ์ํ ๊ธ์ ๋๋ค. ์ด๊ธ์ ๊ธฐ์ค์ express๋ฅผ ๋ค์ด๋ ๋ดค๋ค ์ ๋์ด๊ณ , ์ค๊ธ์ ๊ธฐ์ค์ nodejs express๋ฅผ ํ์ฉํ์ฌ web server๋ฅผ ๋ง๋ค ์ ์๋ ๊ธฐ์ค์ ๋๋ค. ๊ณ ๊ธ์ ๊ธฐ์ค์ ํ๋ก์ธ์ค์ ์ค๋ ๋ ๊ด๋ฆฌ๋ ์์ ๋กญ๊ฒ ํ ์ ์์์ ์๋ฏธํฉ๋๋ค. ์ฌ์ค ๊ณ ๊ธ์ ์ด ๊ธ์ ๋ณผ ํ์๊ฐ ์์ผ๋ ์ด๊ธ๊ณผ ์ค๊ธ ๊ธฐ์ค์ผ๋ก ๊ธฐ์ด๋ฅผ ํํํ๊ฒ ๋ง๋ค๊ธฐ ์ํด ์์ฑํ ๊ธ์ ๋๋ค.
๊ฐ๋ฐ์๊ฐ ๋ณดํต ๋งํ๋ nodejs๋ ๋ฌด์์ผ๊น์? ์ฐ๋ฆฌ๋ ๋ณดํต nodejs๋ฅผ ์น ์๋ฒ๋ผ๊ณ ์ดํดํฉ๋๋ค. ํ์ง๋ง, nodejs๋ ์น ์๋ฒ๋ฅผ ๋ง๋ค ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ ๋ฟ์ด์ง, ์น ์๋ฒ๋ ์๋๋๋ค. ๊ณต์๋ฌธ์์ ๋ค์ด๊ฐ ๋ณด๋ฉด, Node.js๋ ํฌ๋กฌ V8 ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ผ๋ก ๋น๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์์ด๋ผ๊ณ ์ค๋ช ์ด ๋์ด ์์ต๋๋ค. ์ฝ๊ฒ ๋งํ๋ฉด, js ํ์ผ์ ์คํํ๊ธฐ ์ํด ํ์ํ ํ๊ฒฝ์ด nodejs์ ๋๋ค.
์ฌ๊ธฐ์ ์ฃผ์ํด์ผ ํ ์ ์ html์ javascript์ nodejs๊ฐ ์คํํ๋ javascript๊ฐ ๋ค๋ฅด๋ค๋ ๊ฒ์ ์ ๋๋ค. nodejs ์ด์ ์ javascript๋ .js ํ์ผ์ ๋จ๋ ์ผ๋ก ์คํํ์ง ๋ชปํ๊ณ , ์น์ ๋ธ๋ผ์ฐ์ ์์๋ง javascript๋ฅผ ์คํํ ์ ์์์ต๋๋ค. nodejs๋ผ๋ javascript ์คํ๊ธฐ์ ๋ฑ์ฅ์ผ๋ก, ํ์ฌ ์ฐ๋ฆฌ๊ฐ VScode์์ npm run start / node index.js ์ ๊ฐ์ ๋ฐฉ์์ผ๋ก javascript ํ์ผ์ ์คํํ ์ ์๊ฒ ๋์์ต๋๋ค. ์ ๋ฆฌํ๋ฉด, nodejs์ด์ ์๋ html์์ ๋ธ๋ผ์ฐ์ ๊ฐ javascript๋ฅผ ์ฝ์ ๊ฒ์ด๊ณ , nodejs ์ดํ์๋ nodejs ํ์ผ๋ช .js ๋ก javscript๋ ์คํ ํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๊ธด ๊ฒ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ณํ๋ก ์ธํด javascript๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ์ด ๊ฐ๋ฅํด์ก๊ณ , javascript๋ฅผ ํ์ฉํ ์น ์๋ฒ๋ฅผ ๋ง๋ค๊ณ ์คํ ํ ์ ์๊ฒ ๋์์ต๋๋ค.
Node.js๋ ํ๋ ์น ๊ฐ๋ฐ์์ ์ค์ํ ์ญํ ์ ํ๊ณ ์์ต๋๋ค. ์ด๋ฒคํธ ๋ฃจํ์ค ๋ ผ๋ธ๋กํน I/O๋ชจ๋ธ์ ํ์ฉํ์ฌ ๋์ ์ฒ๋ฆฌ๋๊ณผ ๋ฎ์ ์ง์ฐ ์๊ฐ์ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ํจ์จ์ ์ธ ๋คํธ์ํฌ Application ๊ฐ๋ฐ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ๋จ์ผ ์ค๋ ๋์ด์ง๋ง ์ด๋ฒคํธ ๊ธฐ๋ฐ ๋ชจ๋ธ๊ณผ ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋๋ถ์ ๋์ ์ฑ๋ฅ์ ์ ์งํ ์ ์์ผ๋ฉฐ, ํนํ I/O๊ฐ ์ง์ค์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ข์ ์ฑ๋ฅ์ ๊ฐ์ง๋๋ค.
๊ณต์๋ฌธ์์์๋ ์๋์ ๊ฐ์ด nodejs๋ฅผ ์๊ฐํฉ๋๋ค.
As an asynchronous event-driven JavaScript runtime, Node.js is designed to build scalable network applications.
๋น๋๊ธฐ ์ด๋ฒคํธ ๊ธฐ๋ฐ์ด๋, ์ํํ ๋์์ ๋ฉ๋ชจ๋ฆฌ์ ๋ฏธ๋ฆฌ ๋ฑ๋กํด ๋๊ณ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์ ์ง์ ๋ ์์ ์ ์ํํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ด๋ ์ด๋ฒคํธ๋ ํน์ ํ์๋ผ๊ณ ํ ์ ์๋ค. API ์์ฒญ์ด๋ ํ์ด๋จธ, ๋ฒํผ ํด๋ฆญ๊ณผ ๊ฐ์ด nodejs์ ์ ๋ ฅ์ ์ฃผ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
nodejs์ ๋ชจ๋ API๋ ๋น๋๊ธฐ๋ก non-blocking์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค. ์ฝ๊ฒ ๋งํ๋ฉด nodejs์์์ API ์์ฒญ ์ ๋ฐํ๋๋ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค์ API ์์ ์ ์ํํฉ๋๋ค. ์ด๋ฌํ ์์ ํ๋ก์ธ์ค๋ nodejs๋ ๋ด๋ถ์ ์ผ๋ก ์ด์ ์ ๋ณด๋ธ API์ ๋ํ ์๋ต์ ๋ฐ๋๋ค๊ณ ํ ์ ์์ต๋๋ค. ์๋์ ์ฝ๋๋ง์ผ๋ก ์ฐ๋ฆฌ๋ ์น ์๋ฒ๋ฅผ ๋ง๋๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ์ฐ๊ฒฐ(localhost:3000 API ์์ฒญ)์ ๋์์ ์ฒ๋ฆฌ๋ฉ๋๋ค. ์ฐ๊ฒฐ ์ ์ฝ๋ฐฑ ํจ์๊ฐ ์คํ๋๊ณ , ์ฐ๊ฒฐ์ด ์์ ๋๋ ๋ ธ๋๋ sleep(์ ์ ๋ชจ๋) ์ํ๋ก ์ ํ ๋ฉ๋๋ค.
๋น์ฐํ ์ด์ผ๊ธฐ์ง๋ง, nodejs๋ Google Chrome's V8 JavaScript Engine์ผ๋ก ๋ง๋ค์ด์ก๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ๋น ๋ฆ ๋๋ค. ๋ฌผ๋ก ๋ค๋ฅธ ๋น ๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ ์์ํฌ๋ค์ด ์๊ฒจ๋๊ณ ์๊ธฐ ๋๋ฌธ์ ์๋์ ์ผ๋ก ๋น ๋ฅธ ๊ฒ์ด์ง ๋งค์ฐ ๋น ๋ฅด์ง ์์ต๋๋ค.
nodejs๋ http ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์, ์ํ์น์ ๊ฐ์ ๋ณ๋ก ์ํํธ์จ์ด๊ฐ ์์ด๋ ์น ์๋ฒ๋ฅผ ์๋์ํค๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค. ๋ฐ๋ผ์ ๊ธฐ์กด์ ์น ์๋ฒ์ ํต์ ์์ด ์์ ๋กญ๊ฒ ํธ๋ค๋ง์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๋์ ํ์ฅ์ฑ์ ๊ฐ์ง๋๋ค.
nodejs๋ ๋จ์ผ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์, ๊ธฐ์กด์ ๋ค๋ฅธ ์๋ฒ๋ณด๋ค ๋ ๋ง์ ์์ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์ด ๊ฐ๋ ์ ์ดํดํ๋ ค๋ฉด, ์ฐ์ ์ค๋ ๋์ ํ๋ก์ธ์ค์ ์ฐจ์ด๋ถํฐ ์ดํด๋ฅผ ํด์ผ ํฉ๋๋ค. ํ๋ก์ธ์ค๋ ์ด์์ฒด์ ๊ฐ ํ ๋นํ๋ ์์ ์ด๊ณ , ์ค๋ ๋๋ ํ๋ก์ธ์ค ๋ด์์ ์คํ๋๋ ์์ ๋จ์์ ๋๋ค. nodejs๊ฐ ์คํ๋๋ฉด, ํ๋ก์ธ์ค๊ฐ ํ๋ ์คํ๋๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋ก์ธ์ค ๋ด๋ถ์ ์ค๋ ๋๊ฐ ์์ ์ ์งํํฉ๋๋ค. ์ฌ์ค ํ๋ก์ธ์ค ์์๋ ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๊ฐ ์์ง๋ง, ์ฐ๋ฆฌ๊ฐ ํธ๋ค๋งํ ์ ์๋ ์ค๋ ๋๋ ํ๋์ด๊ธฐ ๋๋ฌธ์ nodejs๋ฅผ ๋จ์ผ ์ค๋ ๋๋ผ ํฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ ๋จ์ผ ์ค๋ ๋๊ฐ ๋ ๋ง์ด ์ฒ๋ฆฌํ ๊น์? ์ฌ์ค์ nodejs์ ์ปจ์ ์ ๋ฉํฐ์ค๋ ๋๋ ๊ตฌํํ๊ธฐ ์ด๋ ต์ง๋ง, ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ์๋ ํจ์จ์ ์ผ๋ก ์ฝ๊ณ ๋น ๋ฅด๊ฒ ๊ตฌํ ํ ์ ์์ต๋๋ค. nodejs๋ ๋ชจ๋ ์ฒ๋ฆฌ๋ฅผ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋จ์ผ ์ค๋ ๋๊ฐ ์๋๋๋ค. ๋จ์ผ ์ค๋ ๋์ด์ง๋ง, ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ญ์์ ๋์์ฒ๋ฆฌ(ex. task queue ๋ฑ)๋ฅผ ์งํํ๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ธ ๋จ์ผ ์ค๋ ๋์ ๋ฉํฐ ์ค๋ ๋์ ์ฅ์ ์ ๋ค ๊ฐ์ง๊ณ ์จ ๊ฒ์ด๋ผ ๋ณผ ์ ์์ต๋๋ค. ๊ด๋ จ ๋ด์ฉ์ ์ถ๊ฐ๋ก ๋ค๋ฃฐ ์์ ์ ๋๋ค.
๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ๋, ํ ๋ฒ์ ๋ณด๋ด๋ ๋ฐฉ์๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ชผ๊ฐ์ ์ฌ๋ฌ ๋ฒ ๋ณด๋ด๋ ๋ฐฉ์์ด ์์ต๋๋ค. ์ผ๋ฐ์ ์ธ ๋ฒํผ(Buffering) ๋ฐฉ์์ ํ์ผ์ ํ ๋ฒ์ ๋ณด๋ด๋ ๋ฐฉ์์ ์๋ฏธํฉ๋๋ค. nodejs๋ ๋ฐ์ดํฐ๋ฅผ ํ๋ฒ์ ๋ณด๋ด๋ ๊ฒ ์๋๋ผ ๋ฉ์ด๋ฆฌ๋ก ๋๋ ์ ๋ณด๋ ๋๋ค. ์ด๋ ์ฐ๋ฆฌ๊ฐ ํ์ผ ๋ค์ด๋ก๋ํ๋ ๋ฐฉ์๊ณผ ๋น์ทํ๋ค๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค. ๊ด๋ จ ๋ด์ฉ์ ์ถ๊ฐ๋ก ๋ค๋ฃฐ ์์ ์ ๋๋ค.
Nodejs์ ์ฅ์ ์ ๊ทน๋ํ ํ๋ ๋ฐฉ์์ผ๋ก๋ ๋น๋๊ธฐ I/O ์์ ์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ ๋๋ค. ๋น๋๊ธฐ I/O์ฒ๋ฆฌ๋ ๋ ผ๋ธ๋กํน ์์ ์ ๊ฐ๋ฅํ๊ฒ ํ์ฌ Application ์์ ๋๊ณผ ์๋ต ์๊ฐ์ ๊ฐ์ ํ ์ ์์ต๋๋ค.
Nodejs ํด๋ฌ์คํฐ ๋ชจ๋์ ์ฌ์ฉํฉ๋๋ค. ๋จ์ผ Node.js ์ธ์คํด์ค๊ฐ ๋ฉํฐ ์ฝ์ด ์์คํ ์ ๋ชจ๋ CPU ์ฝ์ด๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค. ์ด๋ ๋์ ํธ๋ํฝ ์ฒ๋ฆฌํ๋ Application์์๋ ํฐ ์ฅ์ ์ด ๋ฉ๋๋ค.
์ฑ๋ฅ์ ๋ชจ๋ํฐ๋งํฉ๋๋ค. ์ผ๋ฐ์ ์ธ PM2/Clicin/Relic๊ณผ ๊ฐ์ ๋ค์ํ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง์ด ์กด์ฌํฉ๋๋ค. ์ด๋ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง์ ํ๊ณ ๋ณ๋ชฉ ํ์์ ์๋ณํ์ฌ ์ต์ ํ์ ๋์์ ์ค ์ ์์ต๋๋ค.