๐ก Node.js๋ ๋ฌด์์ด๊ณ ์ด๋ ์ํฉ์์ ์ฌ์ฉํ ๊น?
Node.js๋ JavaScript ์คํ ํ๊ฒฝ์ด๋ค!!
2009๋ ์ ์ฒ์ ์๊ฐ๋ ์คํ์์ค Javascript ์์ง์ธ ํฌ๋กฌ V8์ ๋น๋๊ธฐ ์ด๋ฒคํธ ์ฒ๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ libuv๋ฅผ ๊ฒฐํฉํ ํ๋ซํผ.
์๋ฐ์คํฌ๋ฆฝํธ์ ์คํํ๊ฒฝ์ ๋ธ๋ผ์ฐ์ ์ ์์ง๋ง, ์ด ํ๊ฒฝ์ ๋ธ๋ผ์ฐ์ ๋ฐ์ผ๋ก ๊ฐ์ ธ์ฌ ์ ์๋๋ก ๋์์ค๋ค.
์ด๋ฅผ ํตํด ๋ชจ๋ฐ์ผ ์ฑ๋ ๋ง๋ค ์ ์๊ณ ๋ค์ํ ๋ฐฉ๋ฉด์ผ๋ก ํ์ฉํ ์ ์๋ค.
์ค์น ๋ฐฉ๋ฒ
https://nodejs.org/en/download
- ๋จ์ผ ์ค๋ ๋(Single Thread)
- ํ๋์ ์ค๋ ๋๊ฐ ๋ชจ๋ ์์ ์ ์ํํ๋ค
- ์ค๋ ๋๊ฐ 1๊ฐ์ด๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋๊ณผ ์์คํ ๋ฆฌ์์ค ์ฌ์ฉ๋ ๋ณํ๊ฐ ๋ง์ง ์๋ค.
- ๋ฐ๋ผ์ ๋๊ท๋ชจ ๋คํธ์ํฌ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ๊ธฐ ์ ํฉํ๋ค.
- ํ์ง๋ง ์ฐ๋ ๋ ํ๋๊ฐ ๋ฌด๋์ง๋ค๋ฉด ํ๋ก๊ทธ๋จ ์ ์ฒด์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
- ๋ฉํฐ ์ค๋ ๋์ ๊ฒฝ์ฐ Context Switching์ ์ด์ฉํ์ฌ ์ฌ๋ฌ ์์ ์ ๋์์ ์ฒ๋ฆฌํ๋ ๊ฒ๊ณผ ๊ฐ์ด ๋๋ผ๊ฒ ํ์ง๋ง, ์คํ๋ ค Context Switching์ ํ๋ ์๊ฐ ๋๋ฌธ์ ์ด ์์ ์๊ฐ์ด ๋ ๊ฑธ๋ฆด ์ ์๋ค.
- CPU์ฌ์ฉ๋ฅ ์ด ๋์ ์ดํ๋ฆฌ์ผ์ด์ ์์๋ Node.js ์ฌ์ฉ์ ๊ถ์ฅํ์ง ์๋๋ค.
Node.js์ ํน์ง
- Node.js๋ Single-Thread์ non-blocking I/O ์ด๋ฒคํธ ๊ธฐ๋ฐ ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ์๋ํ๋ค.
- ์ฌ์ฉ์์ ์์ฒญ์ ํ ๊ณณ(๋จ์ผ ์ค๋ ๋)์์ ๋ฐ์ง๋ง, ์ค์ง์ ์ธ ์์ ์ ๋ฉํฐ์ฐ๋ ๋๋ก ์ด์ํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๊ตฌํํ๋ค. (Thread Pool)
- ๋จ์ผ ์ค๋ ๋์ด๊ธฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๋ณํ๊ฐ ํฌ์ง ์๋ค.
- ๋ฐ๋ผ์ ๋๊ท๋ชจ ๋คํธ์ํฌ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ๊ธฐ ์ ํฉํ ํํ์ด๋ค.
- ํ์ง๋ง ์ค๋ ๋ ํ๋๊ฐ ์ค๋ฅ๊ฐ ๋ฐ์๋๋ฉด ์ ์ฒด๊ฐ ๋ฌธ์ ๊ฐ ์๊ธด๋ค.
- ๋จ์ผ ์ค๋ ๋์ด๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ๋ ๋ฆฌ์์ค ๋ฑ์ด ๋ง์ด ํ์ํ ์์ ์ ์ํํ๋ ์น์๋น์ค์ ๋ง์ง ์๋๋ค.
Node.js ์๋ ์๋ฆฌ
- ์ ์ถ๋ ฅ์ ์ด๋ฒคํธ ๋ฃจํ ๊ธฐ๋ฐ์ ์ฑ๊ธ ์ค๋ ๋, ์ค์ง์ ์ธ ์์ ์ ๋ฉํฐ ์ค๋ ๋๋ก ์คํํ๋ค.
Node.js๊ฐ ์ด์ธ๋ฆฌ๋ ์น์๋น์ค
- ๊ฐ๋จํ ๋ก์ง
- ๋๋์ ํด๋ผ์ด์ธํธ๊ฐ ์ ์ํ๋ ์๋น์ค(์ ์ถ๋ ฅ ๋ง์)
- ๋น ๋ฅธ ๊ฐ๋ฐ ์๊ตฌ
- ๋น ๋ฅธ ์๋ต์๊ฐ ์๊ตฌ
- ๋น๋๊ธฐ ๋ฐฉ์์ ์ด์ธ๋ฆฌ๋ ์๋น์ค (ex. ์คํธ๋ฆฌ๋ฐ ์๋น์ค, ์ฑํ ์๋น์ค)
Node.js๊ฐ ์ด์ธ๋ฆฌ์ง ์๋ ์น์๋น์ค
- ๋จ์ผ ์์ ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ์๋น์ค
- ๋ก์ง ๋ณต์ก๋๊ฐ ๋์ ๊ฒฝ์ฐ