๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

Node.js ํ™œ์šฉ ๋ฐฉ๋ฒ• ์ด์ •๋ฆฌ ๐ŸŒ

by infomationtree 2025. 4. 12.
๋ฐ˜์‘ํ˜•

Node.js ํ™œ์šฉ ๋ฐฉ๋ฒ•

Node.js๋Š” ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ JavaScript๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์ด์—์š”. V8 ์—”์ง„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ๋™๋˜์–ด ๋น ๋ฅด๊ณ , ๋น„๋™๊ธฐ I/O๋ฅผ ์ง€์›ํ•˜์—ฌ ๋†’์€ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์„ ์ž๋ž‘ํ•ด์š”.

 

์›น ๊ฐœ๋ฐœ๋ฟ ์•„๋‹ˆ๋ผ ์‹ค์‹œ๊ฐ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค, IoT ํ”„๋กœ์ ํŠธ์—๋„ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋ฉฐ, ํŠนํžˆ Express์™€ ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ํ•จ๊ป˜ ๊ฐ•๋ ฅํ•œ ์›น ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด์š”. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Node.js์˜ ์ฃผ์š” ํ™œ์šฉ ๋ฐฉ๋ฒ•์„ ๋‹จ๊ณ„๋ณ„๋กœ ์•Œ์•„๋ณผ๊ฒŒ์š”! ๐Ÿš€

 

Node.js๋ž€? ๐Ÿ› ๏ธ

Node.js๋Š” Chrome V8 JavaScript ์—”์ง„์œผ๋กœ ๊ตฌ๋™๋˜๋Š” ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋Ÿฐํƒ€์ž„์ด์—์š”. ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋น ๋ฅธ ์†๋„์™€ ๋†’์€ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•˜์ฃ . ํŒŒ์ผ I/O, ๋„คํŠธ์›Œํฌ ์š”์ฒญ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ๋“ฑ์„ ํšจ์œจ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์š”.

 

๊ธฐ์กด ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ์–ธ์–ด(์˜ˆ: PHP, Python)์™€ ๋‹ฌ๋ฆฌ, ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ์ด์šฉํ•ด ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ ๋˜์–ด ์žˆ์–ด ๋งŽ์€ ์š”์ฒญ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ด๋กœ ์ธํ•ด ์ฑ„ํŒ… ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ „์†ก ๋“ฑ์— ๋งค์šฐ ์œ ๋ฆฌํ•˜๋‹ต๋‹ˆ๋‹ค. ๐Ÿ’ฌ

 

๐ŸŒŸ Node.js์˜ ์ฃผ์š” ํŠน์ง•

ํŠน์ง• ์„ค๋ช…
๋น„๋™๊ธฐ I/O ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋กœ ๊ณ ์„ฑ๋Šฅ ์ œ๊ณต
์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ๋น„๋™๊ธฐ ์ž‘์—…์„ ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ์—์„œ ๊ด€๋ฆฌ
NPM ์ง€์› ์ˆ˜๋งŽ์€ ํŒจํ‚ค์ง€๋กœ ํ™•์žฅ์„ฑ ํ™•๋ณด
ํฌ๋กœ์Šค ํ”Œ๋žซํผ Windows, macOS, Linux์—์„œ ๋ชจ๋‘ ์‹คํ–‰ ๊ฐ€๋Šฅ
๋น ๋ฅธ ์ฒ˜๋ฆฌ ์†๋„ V8 ์—”์ง„ ๋•๋ถ„์— ๋น ๋ฅธ ์—ฐ์‚ฐ ์„ฑ๋Šฅ

 

Node.js์˜ ํŠน์ง• ๋•๋ถ„์— ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๊ฐ€ ์ค‘์š”ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํŠนํžˆ ๊ฐ•๋ ฅํ•ด์š”. ์›น ์†Œ์ผ“์„ ์ด์šฉํ•œ ์ฑ„ํŒ… ์„œ๋น„์Šค๋‚˜ ์ŠคํŠธ๋ฆฌ๋ฐ ์„œ๋ฒ„์— ๋งŽ์ด ์‚ฌ์šฉ๋˜์ฃ .

 

๋˜ํ•œ NPM(Node Package Manager)์„ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ์˜คํ”ˆ ์†Œ์Šค ๋ชจ๋“ˆ์„ ์‰ฝ๊ฒŒ ์„ค์น˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด, ๋ณต์žกํ•œ ํ”„๋กœ์ ํŠธ๋„ ๋น ๋ฅด๊ฒŒ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค. ๐ŸŒ

 

Node.js ๊ธฐ๋ณธ ๊ฐœ๋… ๐Ÿ“š

Node.js๋ฅผ ์ œ๋Œ€๋กœ ํ™œ์šฉํ•˜๋ ค๋ฉด ๋จผ์ € ๊ธฐ๋ณธ ๊ฐœ๋…์„ ์ดํ•ดํ•ด์•ผ ํ•ด์š”. Node.js๋Š” ์„œ๋ฒ„ ์ธก ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ JavaScript๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์ด์—์š”. ํŠนํžˆ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ์ž๋ž‘ํ•˜์ฃ .

 

Node.js๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋กœ ์ž‘๋™ํ•˜์ง€๋งŒ, ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋•๋ถ„์— ์ˆ˜๋งŽ์€ ์š”์ฒญ์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ํ†ตํ•ด ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋…ผ๋ธ”๋กœํ‚น I/O๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜์ฃ .

 

๐Ÿ”ง Node.js ์ฃผ์š” ๊ฐœ๋… ์š”์•ฝ

๊ฐœ๋… ์„ค๋ช…
์ด๋ฒคํŠธ ๋ฃจํ”„ ๋น„๋™๊ธฐ ์ž‘์—…์„ ๊ด€๋ฆฌํ•˜์—ฌ ๋…ผ๋ธ”๋กœํ‚น ์‹คํ–‰
๋…ผ๋ธ”๋กœํ‚น I/O ์ž…์ถœ๋ ฅ ์ž‘์—… ์ค‘์—๋„ ๋‹ค๋ฅธ ์ฝ”๋“œ ์‹คํ–‰
๋ชจ๋“ˆ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ๊ณผ ๊ตฌ์กฐํ™”๋ฅผ ์œ„ํ•œ ๋…๋ฆฝ ๋ชจ๋“ˆํ™”
NPM ์˜คํ”ˆ์†Œ์Šค ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ๋„๊ตฌ
์ฝœ๋ฐฑ ํ•จ์ˆ˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ํ›„ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜

 

Node.js์˜ ๊ฐ•์ ์€ ๋น„๋™๊ธฐ ๋…ผ๋ธ”๋กœํ‚น I/O๋ฅผ ํ†ตํ•ด ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ์„ ํšจ๊ณผ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด์—์š”. ์ด ๋•๋ถ„์— ์ฑ„ํŒ… ์„œ๋น„์Šค, ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋งŽ์ด ์‚ฌ์šฉ๋ผ์š”. ๐ŸŒ

 

๋˜ํ•œ, NPM์„ ํ†ตํ•ด ์ˆ˜๋งŽ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‰ฝ๊ฒŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์–ด ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ๋นจ๋ผ์š”. ๋ชจ๋“ˆํ™”๋œ ๊ตฌ์กฐ ๋•๋ถ„์— ์ฝ”๋“œ ๊ด€๋ฆฌ๋„ ์šฉ์ดํ•˜๋‹ต๋‹ˆ๋‹ค.

 

์ฃผ์š” ํ™œ์šฉ ์‚ฌ๋ก€ ๐Ÿ’ก

Node.js๋Š” ๋‹ค์–‘ํ•œ ๋ถ„์•ผ์—์„œ ๋„๋ฆฌ ํ™œ์šฉ๋ผ์š”. ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์™€ ๋น ๋ฅธ ์†๋„ ๋•๋ถ„์— ์‹ค์‹œ๊ฐ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋ฐ์ดํ„ฐ ์ง‘์•ฝ์ ์ธ ์„œ๋น„์Šค์—์„œ ํŠนํžˆ ์ธ๊ธฐ๊ฐ€ ๋งŽ์•„์š”. ๐Ÿ’ช

 

Node.js์˜ ์ฃผ์š” ํ™œ์šฉ ์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ์–ด๋–ค ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉํ•œ์ง€ ์•Œ์•„๋ณผ๊ฒŒ์š”. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋ถ€ํ„ฐ IoT๊นŒ์ง€ ํญ๋„“๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” ์ด์œ ๋ฅผ ์ดํ•ดํ•˜๋ฉด ํ”„๋กœ์ ํŠธ ์„ ํƒ์ด ์‰ฌ์›Œ์งˆ ๊ฑฐ์˜ˆ์š”.

 

๐Ÿš€ Node.js ํ™œ์šฉ ์‚ฌ๋ก€

๋ถ„์•ผ ํ™œ์šฉ ์˜ˆ์‹œ ์„ค๋ช…
์›น ์„œ๋ฒ„ Express, Koa ๊ฐ€๋ฒผ์šด ์›น ์„œ๋ฒ„์™€ API ์„œ๋ฒ„ ๊ตฌ์ถ•
์‹ค์‹œ๊ฐ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฑ„ํŒ… ์•ฑ, ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ Socket.io๋กœ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ „์†ก
๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ๊ตฌ์ถ• ๋ชจ๋“ˆํ˜• ์•„ํ‚คํ…์ฒ˜๋กœ ํ™•์žฅ์„ฑ ๊ฐ•ํ™”
API ์„œ๋ฒ„ RESTful, GraphQL ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์™€ ์ „์†ก ์†๋„ ์ตœ์ ํ™”
IoT ๋””๋ฐ”์ด์Šค ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ MQTT, WebSocket ํ™œ์šฉ

 

Node.js๋Š” ๊ฐ€๋ฒผ์šด ์„œ๋ฒ„ ํ™˜๊ฒฝ์„ ํ•„์š”๋กœ ํ•˜๋Š” ๊ณณ์—์„œ ํŠนํžˆ ์œ ์šฉํ•ด์š”. Express๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ฐ„๋‹จํ•œ API ์„œ๋ฒ„๋ถ€ํ„ฐ ๋ณต์žกํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊นŒ์ง€ ๋น ๋ฅด๊ฒŒ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.

 

๋˜ํ•œ, ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ๊ฐ€ ์ค‘์š”ํ•œ ์ฑ„ํŒ… ์„œ๋น„์Šค๋‚˜ ํ˜‘์—… ๋„๊ตฌ ๊ฐœ๋ฐœ์—๋„ ๋งŽ์ด ์‚ฌ์šฉ๋ผ์š”. Socket.io๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์ฑ„ํŒ…๋ฐฉ ๊ด€๋ฆฌ์™€ ์‹ค์‹œ๊ฐ„ ๋ฉ”์‹œ์ง€ ์ „์†ก์ด ์‰ฌ์›Œ์ ธ์š”. ๐Ÿ’ฌ

 

ํŠนํžˆ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์—์„œ๋Š” ๋ชจ๋“ˆํ™”๊ฐ€ ์ค‘์š”ํ•œ๋ฐ, Node.js๋Š” ๊ฐ ์„œ๋น„์Šค๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด ์œ ์—ฐํ•˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•ด์š”.

 

Express๋ฅผ ์ด์šฉํ•œ ์›น ์„œ๋ฒ„ ๊ตฌ์ถ• ๐ŸŒ

Node.js๋กœ ์›น ์„œ๋ฒ„๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“ค๋ ค๋ฉด Express ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์ข‹์•„์š”. Express๋Š” ๊ฐ„๊ฒฐํ•˜๊ณ  ์œ ์—ฐํ•œ ๊ตฌ์กฐ๋กœ, ๋น ๋ฅด๊ฒŒ RESTful API๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์–ด์š”. ๐Ÿ› ๏ธ

 

Express๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฏธ๋“ค์›จ์–ด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์š”. ๋˜ํ•œ, ๋ผ์šฐํŒ…์„ ํ†ตํ•ด ๋‹ค์–‘ํ•œ URL ํŒจํ„ด์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์„œ ๋Œ€๊ทœ๋ชจ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—๋„ ์ ํ•ฉํ•˜๋‹ต๋‹ˆ๋‹ค.

 

๐Ÿš€ Express ์›น ์„œ๋ฒ„ ๊ธฐ๋ณธ ์ฝ”๋“œ


const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
    res.send('Hello, Node.js with Express! ๐ŸŒŸ');
});

app.listen(port, () => {
    console.log(`์„œ๋ฒ„ ์‹คํ–‰ ์ค‘: http://localhost:${port}`);
});

 

์œ„ ์ฝ”๋“œ๋กœ ๊ฐ„๋‹จํ•œ ์›น ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์š”. ํ„ฐ๋ฏธ๋„์—์„œ node app.js๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋กœ์ปฌ ์„œ๋ฒ„๊ฐ€ ์‹œ์ž‘๋ผ์š”. ๋ธŒ๋ผ์šฐ์ €์—์„œ http://localhost:3000์— ์ ‘์†ํ•˜๋ฉด "Hello, Node.js with Express!"๊ฐ€ ํ‘œ์‹œ๋ผ์š”. ๐ŸŒ

๐Ÿ—บ๏ธ ๋ผ์šฐํŒ… ์˜ˆ์ œ

๊ฒฝ๋กœ HTTP ๋ฉ”์„œ๋“œ ์„ค๋ช…
/ GET ํ™ˆ ํŽ˜์ด์ง€ ํ‘œ์‹œ
/about GET ์ •๋ณด ํŽ˜์ด์ง€
/api/data POST ๋ฐ์ดํ„ฐ ์ „์†ก

 

Express์˜ ๊ฐ€์žฅ ํฐ ์žฅ์ ์€ ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๋กœ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด์—์š”. ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๊น…, ์ธ์ฆ ๋“ฑ๋„ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์š”.

 

๋˜ํ•œ, ๋‹ค์–‘ํ•œ HTTP ๋ฉ”์„œ๋“œ๋ฅผ ์ง€์›ํ•˜๋ฏ€๋กœ RESTful API๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์œ ๋ฆฌํ•ด์š”. ๊ฐ„๋‹จํ•œ ์„œ๋ฒ„๋ถ€ํ„ฐ ๋ณต์žกํ•œ ๋ฐฑ์—”๋“œ ์‹œ์Šคํ…œ๊นŒ์ง€, Express๋Š” ๋‹ค์–‘ํ•œ ์š”๊ตฌ๋ฅผ ์ถฉ์กฑํ•  ์ˆ˜ ์žˆ์–ด์š”!

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์—ฐ๋™ ๐Ÿ’พ

Node.js์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์กฐํšŒํ•  ์ˆ˜ ์žˆ์–ด์š”. ๋Œ€ํ‘œ์ ์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” MySQL, MongoDB, PostgreSQL ๋“ฑ์ด ์žˆ์–ด์š”. ๐ŸŒŸ

 

๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์— ์ตœ์ ํ™”๋œ Node.js์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜๋ฉด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์š”. ํŠนํžˆ, ๋น„๋™๊ธฐ ์ฟผ๋ฆฌ ์ฒ˜๋ฆฌ๋กœ ์„ฑ๋Šฅ์ด ์šฐ์ˆ˜ํ•ด์š”.

 

๐Ÿ”— MySQL ์—ฐ๋™ ์˜ˆ์ œ


const mysql = require('mysql');

const connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'password',
    database: 'mydb'
});

connection.connect((err) => {
    if (err) throw err;
    console.log('MySQL ์—ฐ๊ฒฐ ์„ฑ๊ณต!');
});

connection.query('SELECT * FROM users', (err, results) => {
    if (err) throw err;
    console.log(results);
    connection.end();
});

 

์œ„ ์ฝ”๋“œ์—์„œ๋Š” MySQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•˜์—ฌ users ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ–ˆ์–ด์š”. mysql ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๊ณ  ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ–ˆ์–ด์š”.

๐Ÿ—ƒ๏ธ MongoDB ์—ฐ๋™ ์˜ˆ์ œ


const { MongoClient } = require('mongodb');
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri);

async function connectDB() {
    try {
        await client.connect();
        console.log("MongoDB ์—ฐ๊ฒฐ ์„ฑ๊ณต!");
        const db = client.db("mydb");
        const users = await db.collection("users").find().toArray();
        console.log(users);
    } finally {
        await client.close();
    }
}

connectDB().catch(console.error);

 

MongoDB๋Š” NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ, JSON ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด์š”. mongodb ํŒจํ‚ค์ง€๋ฅผ ์ด์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ ์กฐํšŒ๋ฅผ ํ•  ์ˆ˜ ์žˆ์–ด์š”.

๐Ÿ’ก ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋น„๊ต

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŠน์ง• ์‚ฌ์šฉ ์‚ฌ๋ก€
MySQL ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, SQL ์ง€์› ๋ธ”๋กœ๊ทธ, ์‡ผํ•‘๋ชฐ
MongoDB NoSQL, ๋ฌธ์„œ ์ง€ํ–ฅ ์ฑ„ํŒ… ์•ฑ, ๋ฐ์ดํ„ฐ ๋ถ„์„
PostgreSQL ๊ฐ์ฒด ๊ด€๊ณ„ํ˜• DB, ๋ณต์žกํ•œ ์ฟผ๋ฆฌ ์ฒ˜๋ฆฌ ๊ธˆ์œต ์‹œ์Šคํ…œ, ๋ฐ์ดํ„ฐ ๋ถ„์„

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ ํƒ์€ ํ”„๋กœ์ ํŠธ ์„ฑ๊ฒฉ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ ธ์š”. ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ ค๋ฉด MySQL์ด๋‚˜ PostgreSQL์ด ์ข‹๊ณ , ์œ ์—ฐํ•œ ์Šคํ‚ค๋งˆ๊ฐ€ ํ•„์š”ํ•˜๋ฉด MongoDB๊ฐ€ ์œ ๋ฆฌํ•ด์š”.

 

Node.js์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—ฐ๋™ํ•˜๋ฉด ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์š”. ํŠนํžˆ API ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค ๋•Œ ์œ ์šฉํ•ด์š”. ๐Ÿ“Š

 

๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์™€ ์ด๋ฒคํŠธ ๋ฃจํ”„ ๐Ÿ”„

Node.js์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์™€ ์ด๋ฒคํŠธ ๋ฃจํ”„์˜ˆ์š”. ์„œ๋ฒ„๊ฐ€ ๋งŽ์€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ, ๋น„๋™๊ธฐ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ์–ด์š”. ๐Ÿ’ช

 

Node.js๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜์ด์ง€๋งŒ, ๋น„๋™๊ธฐ I/O์™€ ์ด๋ฒคํŠธ ๋ฃจํ”„ ๋•๋ถ„์— ์ˆ˜๋งŽ์€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค. ์ด ๋•๋ถ„์— ์‹ค์‹œ๊ฐ„ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์„ฑ๋Šฅ์ด ๋›ฐ์–ด๋‚˜์ฃ .

 

๐Ÿ” ์ด๋ฒคํŠธ ๋ฃจํ”„ ์ž‘๋™ ๋ฐฉ์‹

๋‹จ๊ณ„ ์„ค๋ช…
Timers setTimeout๊ณผ setInterval์„ ์ฒ˜๋ฆฌ
Pending Callbacks ๋น„๋™๊ธฐ I/O์˜ ์ฝœ๋ฐฑ ์ฒ˜๋ฆฌ
Idle, Prepare ๋‚ด๋ถ€์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ž‘์—… ์ค€๋น„
Poll ์ƒˆ๋กœ์šด I/O ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ
Check setImmediate ์ฝœ๋ฐฑ ์‹คํ–‰
Close Callbacks ๋‹ซ๊ธฐ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ

 

Node.js๋Š” ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ํ†ตํ•ด ๋น„๋™๊ธฐ ์ž‘์—…์„ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•ด์š”. ํƒ€์ด๋จธ ์„ค์ •, ํŒŒ์ผ ์ฝ๊ธฐ, ๋„คํŠธ์›Œํฌ ์š”์ฒญ ๋“ฑ์„ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์ฐจ๋‹จํ•˜์ง€ ์•Š์ฃ . ๐Ÿš€

 

๐Ÿ“Œ ๋น„๋™๊ธฐ ํ•จ์ˆ˜ ์‚ฌ์šฉ ์˜ˆ์ œ


const fs = require('fs');

console.log('ํŒŒ์ผ ์ฝ๊ธฐ ์‹œ์ž‘');
fs.readFile('example.txt', 'utf8', (err, data) => {
    if (err) throw err;
    console.log('ํŒŒ์ผ ๋‚ด์šฉ:', data);
});
console.log('๋‹ค๋ฅธ ์ž‘์—… ์ˆ˜ํ–‰');

 

์œ„ ์ฝ”๋“œ์—์„œ fs.readFile์€ ๋น„๋™๊ธฐ์ ์œผ๋กœ ํŒŒ์ผ์„ ์ฝ์–ด์š”. ๋”ฐ๋ผ์„œ ํŒŒ์ผ์„ ์ฝ๋Š” ๋™์•ˆ์—๋„ "๋‹ค๋ฅธ ์ž‘์—… ์ˆ˜ํ–‰"์ด ๋จผ์ € ์ถœ๋ ฅ๋ผ์š”. ์ด๊ฒƒ์ด ๋ฐ”๋กœ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์˜ ํž˜์ด์—์š”! ๐ŸŒŸ

 

Node.js์˜ ๋น„๋™๊ธฐ ํŠน์„ฑ ๋•๋ถ„์— ์„œ๋ฒ„๊ฐ€ ๋ธ”๋กœํ‚น ์—†์ด ์—ฌ๋Ÿฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ด๋กœ ์ธํ•ด ์‹ค์‹œ๊ฐ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์—์„œ ๊ฐ•์ ์„ ๊ฐ€์ง€์ฃ .

 

FAQ ๐Ÿ’ก

Q1. Node.js๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์žฅ ํฐ ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

 

A1. ๋น„๋™๊ธฐ I/O ์ฒ˜๋ฆฌ์™€ ๋†’์€ ์„ฑ๋Šฅ ๋•๋ถ„์ด์—์š”. ์‹ค์‹œ๊ฐ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ์ฑ„ํŒ… ์„œ๋ฒ„, API ์„œ๋ฒ„ ๋“ฑ์—์„œ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ธ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์š”.

 

Q2. Express์™€ Node.js๋Š” ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅด๋‚˜์š”?

 

A2. Node.js๋Š” ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์ด๊ณ , Express๋Š” ๊ทธ ์œ„์—์„œ ๋Œ์•„๊ฐ€๋Š” ์›น ํ”„๋ ˆ์ž„์›Œํฌ์˜ˆ์š”. Express๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด HTTP ์š”์ฒญ ์ฒ˜๋ฆฌ์™€ ๋ผ์šฐํŒ…์ด ๋” ๊ฐ„ํŽธํ•ด์ ธ์š”.

 

Q3. Node.js์—์„œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

 

A3. ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ž€ ์ฝ”๋“œ ์‹คํ–‰์„ ์ค‘๋‹จํ•˜์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์„ ๋งํ•ด์š”. Node.js๋Š” ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ์‚ฌ์šฉํ•ด ๋…ผ๋ธ”๋กœํ‚น I/O๋ฅผ ์‹คํ˜„ํ•ด์š”.

 

Q4. Node.js์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์€ ์–ด๋–ป๊ฒŒ ํ•˜๋‚˜์š”?

 

A4. MySQL, MongoDB ๋“ฑ ๋‹ค์–‘ํ•œ DB์™€ ์—ฐ๋™ํ•  ์ˆ˜ ์žˆ์–ด์š”. npm ํŒจํ‚ค์ง€์ธ mysql, mongodb๋ฅผ ์‚ฌ์šฉํ•ด ์—ฐ๊ฒฐํ•˜๊ณ  ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์š”.

 

Q5. ์™œ Node.js๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋กœ ๋™์ž‘ํ•˜๋‚˜์š”?

 

A5. ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ๊ตฌ์กฐ ๋•๋ถ„์— ์ž์› ์†Œ๋ชจ๊ฐ€ ์ ๊ณ , ๋น„๋™๊ธฐ I/O๋กœ ๋งŽ์€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ด๋ฒคํŠธ ๋ฃจํ”„ ๋•๋ถ„์— ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์—ฌ์š”.

 

Q6. Node.js์—์„œ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๋ ค๋ฉด?

 

A6. Socket.io์™€ ๊ฐ™์€ ์‹ค์‹œ๊ฐ„ ํ†ต์‹  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์–ด์š”. Express์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ์›น ์†Œ์ผ“ ๊ธฐ๋ฐ˜ ์ฑ„ํŒ… ์•ฑ์„ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.

 

Q7. ๋น„๋™๊ธฐ ์ฝ”๋“œ๊ฐ€ ๋งŽ์œผ๋ฉด ๋””๋ฒ„๊น…์ด ์–ด๋ ค์šด๋ฐ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•˜๋‚˜์š”?

 

A7. async/await ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ๋™๊ธฐ์‹์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์–ด ๊ฐ€๋…์„ฑ์ด ์ข‹์•„์ ธ์š”. ๋˜ํ•œ, try-catch๋กœ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋„ ์ˆ˜์›”ํ•ด์š”.

 

Q8. Node.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๋ ค๋ฉด?

 

A8. PM2๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , Nginx๋ฅผ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋กœ ์„ค์ •ํ•˜์—ฌ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์–ด์š”. AWS EC2๋‚˜ Heroku ๋“ฑ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ด์—์š”.

๋ฐ˜์‘ํ˜•