๐ง Node.js๋?
Node.js =
"JavaScript๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋๋ผ ์๋ฒ์์๋ ์คํํ ์ ์๊ฒ ๋ง๋ ๊ธฐ์ "
(์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์ ํ๊ฒฝ)
ํ ๋ฌธ์ฅ์ผ๋ก ์ ๋ฆฌํ๋ฉด: โ Node.js๋ ๋ธ๋ผ์ฐ์ ๋ฐ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋๋ฆด ์ ์๊ฒ ํด์ฃผ๋ ์์ง
๐ฏ Node.js๋ฅผ ์ ๋ง๋ค์์๊น?
์๋ JavaScript๋
- ์ค์ง ๋ธ๋ผ์ฐ์ ์์์๋ง ์๋ํ๋ค.
- ์นํ์ด์ง์ ์ธํฐ๋ํฐ๋ธํ ๋์์ ์ฃผ๊ธฐ ์ํด์๋ง ์ฌ์ฉ.
๊ทธ๋ฐ๋ฐ ์ฌ๋๋ค์ด ์๊ฐํ ๊ฑฐ์ผ:
"์ด? ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ด๋ ๊ฒ ๋น ๋ฅด๊ณ ํธํ๋ฐ,
๋ธ๋ผ์ฐ์ ๋ง๊ณ ์๋ฒ์์๋ ์ธ ์ ์์ผ๋ฉด ๊ฐ๊ฟ ์๋?"
๊ทธ๋์ ๋์จ ๊ฒ Node.js์ผ.
๐ฅ Node.js์ ํน์ง
ํน์ง | ์ค๋ช |
๋น๋๊ธฐ & ์ด๋ฒคํธ ๊ธฐ๋ฐ | ์์ฒญ์ด ๋ค์ด์๋ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ , ๋ฐ๋ก ๋ค์ ์์ ์คํ |
์ฑ๊ธ ์ค๋ ๋ | ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋์ ์ค๋ ๋๋ก ๋์ (๊ฐ๋ณ๊ณ ๋น ๋ฆ) |
๋น ๋ฅธ ์๋ | V8 ์์ง(Chrome์ ํ์ฌ๋ ์ด๊ณ ์ JS ์์ง) ์ฌ์ฉ |
ํฌ๋ก์ค ํ๋ซํผ | Windows, Linux, macOS ์ด๋์๋ ์คํ ๊ฐ๋ฅ |
npm ์ํ๊ณ | ์๋ง์ ์คํ์์ค ํจํค์ง๋ค์ ์ฝ๊ฒ ๊ฐ์ ธ๋ค ์ธ ์ ์์ |
๐ Node.js ํ๋ฆ ์ดํด (์์ฒญ ์ฝ๊ฒ!)
Node.js ๋์๋ฐฉ์์ "์ ํ๊ธฐ + ์๋์๊ณ" ๋ชจ๋ธ๋ก ์ดํดํ๋ฉด ๋ผ.
- ๋๊ฐ ์๋ฒ์ ์์ฒญ (์ ํ๊ฐ ์จ๋ค๊ณ ์๊ฐํด)
- Node.js๊ฐ "์ ์๊ฒ ์ด!" ํ๊ณ ์ฒ๋ฆฌ ์์ฝ๋ง ํด
- ๋ค์ ์์ฒญ ๋ฐ๋ก ๋ฐ์ผ๋ฌ ๊ฐ (์ ํ๋ฅผ ๋์ง ์๊ณ ๋ฐ๋ก ๋์ด๊ฐ)
- ์์ฝํด๋ ์์ (์: ํ์ผ ์ฝ๊ธฐ, DB ์กฐํ)์ด ์๋ฃ๋๋ฉด
- "๋ ๋ง!" ํ๊ณ ์๋์ฒ๋ผ ์๋ฃ ๋ฉ์์ง ๋ฐ์ → ๊ฒฐ๊ณผ ์ ์ก
๐ข ์ฆ,
"๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ์์ฝ → ๊ฒฐ๊ณผ ๋์ค๋ฉด ์๋ ๋ฐ๊ธฐ"
์ด๊ฒ Node.js ์คํ์ผ์ด์ผ.
๐ ์ด๋ฐ ๊ฑธ "๋น๋๊ธฐ(Asynchronous) ์ด๋ฒคํธ ๊ธฐ๋ฐ(Event-driven)" ์ด๋ผ๊ณ ํด.
๐ ๏ธ Node.js ์ฃผ์ ์ฌ์ฉ์ฒ
์ฌ์ฉ์ฒ | ์์ |
API ์๋ฒ ๋ง๋ค๊ธฐ | ๋ก๊ทธ์ธ, ๋ฐ์ดํฐ ์กฐํ ์๋ฒ |
์ค์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ | ์ฑํ ์ฑ, ๊ฒ์ ์๋ฒ |
ํ์ผ ์ฒ๋ฆฌ ์๋ฒ | ์ด๋ฏธ์ง ์ ๋ก๋/๋ค์ด๋ก๋ |
์คํธ๋ฆฌ๋ฐ ์๋ฒ | ์ ํ๋ธ ๊ฐ์ ์์ ์คํธ๋ฆฌ๋ฐ |
CLI ํด ๋ง๋ค๊ธฐ | ํฐ๋ฏธ๋ ๋ช ๋ น์ด ํ๋ก๊ทธ๋จ (npm, eslint ๊ฐ์ ๊ฒ) |
๐ ๏ธ Node.js๋ก ๊ฐ๋จํ ์๋ฒ ๋ง๋ค๊ธฐ ์์
// 1. http ๋ชจ๋ ๋ถ๋ฌ์ค๊ธฐ
const http = require('http');
// 2. ์๋ฒ ๋ง๋ค๊ธฐ
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' }); // ์๋ต ํค๋
res.end('Hello Node.js World!\n'); // ์๋ต ๋ณธ๋ฌธ
});
// 3. ์๋ฒ ๋ฆฌ์ค๋ ์์ (ํฌํธ 3000)
server.listen(3000, () => {
console.log('์๋ฒ๊ฐ 3000๋ฒ ํฌํธ์์ ์คํ ์ค์
๋๋ค.');
});
์ด ์ฝ๋๋ฅผ ์คํํ๋ฉด → ๋ธ๋ผ์ฐ์ ์์ http://localhost:3000 ์ ์ํ๋ฉด "Hello Node.js World!" ๋ผ๊ณ ๋ฌ๋ค!
๐งฉ Node.js์ ๋ด๋ถ ๊ตฌ์ฑ ์์ (์ข ๋ ์ฌํ)
๊ตฌ์ฑ ์์ | ์ค๋ช |
V8 ์์ง | Google Chrome์ ๋ค์ด๊ฐ๋ ์ด๊ณ ์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง |
libuv | ๋น๋๊ธฐ ์ ์ถ๋ ฅ์ ๊ด๋ฆฌํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
์ด๋ฒคํธ ๋ฃจํ | ์์ฒญ์ ํ์ ๋ฃ๊ณ ์ฒ๋ฆฌํ๋ ๋ฐ๋ณต ์ฅ์น |
๋ด์ฅ ๋ชจ๋ | http, fs, path ๋ฑ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ ๋ชจ๋๋ค |
npm | ํจํค์ง ๊ด๋ฆฌ์ (ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฝ๊ฒ ์ค์น ๊ฐ๋ฅ) |
๐ข ํ๋์ ์์ฝ
- Node.js๋ "๋ธ๋ผ์ฐ์ ๋ฐ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ์ ์๊ฒ ํด์ฃผ๋ ์๋ฒ ๊ธฐ์ "
- ๋น ๋ฅด๊ณ ๋น๋๊ธฐ์ (Non-Blocking)
- ์๋ฒ ๊ฐ๋ฐ, ์ค์๊ฐ ์๋น์ค ๋ฑ์ ๊ฐ๋ ฅ
- npm์ ํตํด ๋ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ง์
- ํ๋์ ์ค๋ ๋๋ก ์๋ง์ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์์
๐ Node.js๋ฅผ ๊ณต๋ถํ ๋ ์ค์ํ ํฌ์ธํธ
โ
๋น๋๊ธฐ / ๋๊ธฐ ์ฐจ์ด ์ดํดํ๊ธฐ
โ
์ด๋ฒคํธ ๋ฃจํ(Event Loop) ๊ตฌ์กฐ ์ดํดํ๊ธฐ
โ
Express.js ๊ฐ์ ํ๋ ์์ํฌ ๋ฐฐ์ฐ๊ธฐ (์๋ฒ ์ฝ๊ฒ ๋ง๋ค๋ ค๊ณ )
โ
npm ์ฌ์ฉ๋ฒ ์ตํ๊ธฐ
โ
REST API ๊ธฐ๋ณธ ๊ฐ๋
์๊ธฐ
โ
JWT ๊ฐ์ ์ธ์ฆ ๋ฐฉ์ ์ดํดํ๊ธฐ (๋ค๊ฐ ํ๊ณ ์ถ์ ๊ฑฐ๋ ์ฐ๊ด๋ผ!)
๐งก ์ถ๊ฐ๋ก
- ๋์ค์ Node.js + Express๋ก ๋ก๊ทธ์ธ API ๋ง๋๋ ๊ฒ๋ ๊ฐ๋ฅํด
- ๊ทธ๋ฆฌ๊ณ Next.js ์์์๋ Node.js ์ฝ๋๊ฐ ๋ถ๋ถ์ ์ผ๋ก ์ฐ์ฌ (์: API Routes)
๐ฅ ํ์ค ์์ฝ
"Node.js๋ ์๋ฒ์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋๋ฆด ์ ์๊ฒ ๋ง๋ ์ํผ ํ์ ์์ง"
(๊ทธ๋ฆฌ๊ณ ๋๋ ์ด๊ฑธ ๊ฐ์ง๊ณ ๋ฐฑ์๋ ์๋ฒ๋ ๋ง๋ค ์ ์๊ฒ ๋๋ ๊ฑฐ์ผ!)
'๋ฆฌ์กํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
axios VS fetch ๋น๊ต์ ์ฐจ์ด (1) | 2025.04.20 |
---|---|
styled-components๋? (1) | 2025.04.20 |
useCallback vs useMemo ๊ฐ๋ (0) | 2025.04.18 |