๐Ÿ•Š๏ธํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค/TIL

[๋ฐ๋ธŒ์ฝ”์Šค] Node.js ๋ชจ๋“ˆ๊ณผ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์ดํ•ด(๋ชจ๋“ˆํ™”, npm, ๋…ผ๋ธ”๋กœํ‚น I/O)

ํ‚ํ‚์ž‰ 2025. 4. 7. 23:56

์˜ค๋Š˜์€ HTTP Method๋ฅผ ๋ณต์Šตํ•˜๊ณ  Node.js๋ฅผ ์ข€ ๋” ๊นŠ๊ฒŒ ์•Œ์•„๋ณด์•˜๋‹ค. ์ด์ „ ์‹œ๊ฐ„์— ๋ฐฐ์šด ๋ชจ๋“ˆ์— ๋Œ€ํ•ด์„œ๋„ ์ข€ ๋” ์ž์„ธํžˆ ๋ฐฐ์šฐ๊ณ , ๋ชจ๋“ˆ๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ฐจ์ด๋„ ์•Œ์•„๋ณด์•˜์Œ.


๐Ÿ”ญHTTP method

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ ์–ด๋–ค ๋™์ž‘์„ ์›ํ•˜๋Š”์ง€ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ์‹. ๊ฐ ๋ฉ”์„œ๋“œ๋Š” ๊ณ ์œ ์˜ ๋ชฉ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, REST API ์„ค๊ณ„์˜ ๊ธฐ๋ณธ์ด ๋œ๋‹ค.

์ฃผ์š” HTTP Method

Method ์—ญํ• 
์ƒ์„ฑ POST ์ƒˆ๋กœ์šด ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์š”์ฒญ ๋ณธ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•ด์„œ ์ „์†กํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ๊ฐ€ URL์— ๋…ธ์ถœ๋˜์ง€ ์•Š์•„ ๋ณด์•ˆ์„ฑ์ด ๋†’๋‹ค. ๋˜ํ•œ ์บ์‹œ๋˜์ง€ ์•Š๊ณ , ๋ธŒ๋ผ์šฐ์ € ํžˆ์Šคํ† ๋ฆฌ์— ๋‚จ์ง€ ์•Š๋Š”๋‹ค.
์กฐํšŒ GET ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ฉ”์„œ๋“œ์ด๋‹ค. URL์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋ฉฐ, ๋ธŒ๋ผ์šฐ์ € ํžˆ์Šคํ† ๋ฆฌ์— ๋‚จ๊ณ  ์บ์‹œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ๊ฐ€ URL์— ๋…ธ์ถœ๋˜์–ด ๋ณด์•ˆ์— ์ทจ์•ฝํ•  ์ˆ˜ ์žˆ๋‹ค.
์ˆ˜์ • PUT ๋ฆฌ์†Œ์Šค๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ. ๋ฆฌ์†Œ์Šค ์ „์ฒด๋ฅผ ๊ต์ฒดํ•œ๋‹ค. ๋ฉฑ๋“ฑ์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.
์ˆ˜์ • PATCH ๋ฆฌ์†Œ์Šค๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ. ๋ฆฌ์†Œ์Šค ์ผ๋ถ€๋งŒ ์ˆ˜์ •ํ•œ๋‹ค. ๋ฉฑ๋“ฑ์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.
์‚ญ์ œ DELETE ์„œ๋ฒ„์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ฑฐํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์ง€์ •๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ์™„์ „ํžˆ ์‚ญ์ œํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 
๊ธฐํƒ€ HTTP Method
๊ฐ•์‚ฌ๋‹˜๊ป˜์„œ ์‹ค๋ฌด์—์„œ๋„ ๋งŽ์ด ์“ฐ์ง€๋Š” ์•Š๋Š”๋‹ค๊ณ  ํ•˜์…จ๋‹ค. ํ•˜์ง€๋งŒ ์ผ๋‹จ ์•Œ์•„๋‘์ž!

Method ์—ญํ• 
HEAD GET๊ณผ ๋™์ผํ•˜์ง€๋งŒ ์‘๋‹ต ๋ณธ๋ฌธ์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋ฆฌ์†Œ์Šค์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋งŒ ํ•„์š”ํ•  ๋•Œ ์œ ์šฉํ•œ ๋ฉ”์„œ๋“œ์ด๋‹ค.
OPTIONS ์„œ๋ฒ„๊ฐ€ ์ง€์›ํ•˜๋Š” HTTP ๋ฉ”์„œ๋“œ๋ฅผ ํ™•์ธํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. CORS ํ”„๋ฆฌํ”Œ๋ผ์ดํŠธ ์š”์ฒญ์—์„œ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•œ๋‹ค.
CONNECT ํ”„๋ก์‹œ ์„œ๋ฒ„๋ฅผ ํ†ตํ•œ ํ„ฐ๋„๋ง ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. HTTPS์™€ ๊ฐ™์€ ์•”ํ˜ธํ™”๋œ ํ†ต์‹ ์— ์ฃผ๋กœ ํ™œ์šฉ๋œ๋‹ค.
TRACE ์š”์ฒญ/์‘๋‹ต ์‚ฌ์ดํด์„ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์„œ๋“œ๋กœ, ๋””๋ฒ„๊น… ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

๐Ÿ’ปNode.js

Nodejs๋Š” ๋ฐฑ์—”๋“œ์„œ๋งŒ ์“ด๋‹ค??

Node.js๋Š” only ๋ฐฑ์—”๋“œ ๊ธฐ์ˆ ์ด ์•„๋‹ˆ๋‹ค.

Node.js๋Š” ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์—๋„ ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๊ณ , Node.js ๊ธฐ๋ฐ˜ ํ”„๋ก ํŠธ์—”๋“œ ๋„๊ตฌ๋Š” ํ˜„๋Œ€ ์›น ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ํ•„์ˆ˜ ์š”์†Œ์ด๋‹ค.
 
Stack Overflow์˜ 2024๋…„ ์กฐ์‚ฌ ๊ฒฐ๊ณผ, Node.js๋Š” "Web frameworks and Technologies" ๋ถ„์•ผ์—์„œ 1์œ„๋ฅผ ์ฐจ์ง€ํ–ˆ๋‹ค. ์ด๋Š” Node.js๊ฐ€ ํ˜„๋Œ€ ์›น ๊ฐœ๋ฐœ์—์„œ ์–ผ๋งˆ๋‚˜ ์ค‘์š”ํ•œ ์œ„์น˜๋ฅผ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋Š”์ง€ ๋ณด์—ฌ์ค€๋‹ค.

๋‹ค๋ฅธ ๋ฐฑ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ์™€์˜ ๋น„๊ต

๐Ÿ‘‰ Spring์€ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ์ตœ์ ํ™”๋œ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ๊ฐ•๋ ฅํ•œ ๋ณด์•ˆ ๊ธฐ๋Šฅ๊ณผ ์•ˆ์ •์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค. ๋Œ€๊ทœ๋ชจ ๊ธฐ์—… ํ™˜๊ฒฝ์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋‹ค์–‘ํ•œ ๋ชจ๋“ˆ๊ณผ ์ƒํƒœ๊ณ„๋ฅผ ๊ฐ–์ถ”๊ณ  ์žˆ๋‹ค. ๋‹ค๋งŒ Node.js์— ๋น„ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ๋ฌด๊ฒ๊ณ , ์„ค์ •์ด ๋ณต์žกํ•  ์ˆ˜ ์žˆ๋‹ค.
๐Ÿ‘‰ Python ๋ฐฑ์—”๋“œ(Django, Flask)๋Š” ๊ฐ„๊ฒฐํ•œ ๋ฌธ๋ฒ•๊ณผ ํ’๋ถ€ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋น ๋ฅธ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ํŠนํžˆ ๋ฐ์ดํ„ฐ ์‚ฌ์ด์–ธ์Šค, ๋จธ์‹ ๋Ÿฌ๋‹ ๋ถ„์•ผ์™€์˜ ํ†ตํ•ฉ์ด ์šฉ์ดํ•˜๋‹ค. ํ•˜์ง€๋งŒ ๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ์—์„œ๋Š” Node.js์— ๋น„ํ•ด ์ œํ•œ์ ์ผ ์ˆ˜ ์žˆ๋‹ค.

์šฐ๋ฆฌ๋‚˜๋ผ๋Š” ์ž๋ฐ”์™€ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉ๋˜์–ด ์™”์ง€๋งŒ, ๊ธ€๋กœ๋ฒŒ ๊ด€์ ์—์„œ๋Š” Node.js์™€ Spring์ด ๋น„์Šทํ•œ ์ˆ˜์ค€์˜ ์ธ๊ธฐ๋ฅผ ๋ˆ„๋ฆฌ๊ณ  ์žˆ๋‹ค..๋ผ๊ณ  ํ•˜๊ธฐ์—” ์ฐจ์ด๊ฐ€ ๋„ˆ๋ฌด ๊ทน์‹ฌํ•œ ๊ฒƒ ๊ฐ™๊ธฐ๋„ ํ•˜๊ณ ๐Ÿ™„์•„๋ฌดํŠผ ์šฐ๋ฆฌ๋‚˜๋ผ๋Š” ์Šคํ”„๋ง์ด ์งฑ์ด๊ธด ํ•˜๋‹ค. ๊ทธ๋ž˜๋„!! Node.js๋Š” ์Šคํ”„๋ง์— ๋น„ํ•ด ํ’€์Šคํƒ ๊ฐœ๋ฐœ์— ๋” ์œ ์šฉํ•˜๋ฉฐ, ํ”„๋ก ํŠธ์—”๋“œ ์ ‘๊ทผ๋„ ๋” ์‰ฝ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.
 
์•„์ง ์šฐ๋ฆฌ๋‚˜๋ผ๋Š” "์ž๋ฐ” ๊ณตํ™”๊ตญ"์ด๋ผ๊ณ  ๋ถˆ๋ฆด ๋งŒํผ ์ž๋ฐ” ๊ธฐ์ˆ ์ด ๊ฐ•์„ธ์ด์ง€๋งŒ, ์ตœ๊ทผ์—๋Š” Node.js ๋ฐฑ์—”๋“œ ์กฐํ•ฉ๋„ ์ ์  ๋Š˜์–ด๋‚˜๋Š” ์ถ”์„ธ์ด๋‹ค. ํ•ด์™ธ์—์„œ๋Š” Netflix, Airbnb, LinkedIn, Uber, NASA ๋“ฑ ๋งŽ์€ ๊ธ€๋กœ๋ฒŒ ๊ธฐ์—…๋“ค์ด ์ด๋ฏธ Node.js๋ฅผ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•˜๊ณ  ์žˆ๋‹ค!

๊ทธ๋ž˜์„œ Node.js๊ฐ€ ์ •ํ™•ํžˆ ๋ญ˜๊นŒ

Node.js๋Š” Chrome v8 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์œผ๋กœ ๊ตฌ๋™๋˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์ด๋‹ค. ์ด๋Š” ๋ธŒ๋ผ์šฐ์ € ์™ธ๋ถ€์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋ฉฐ, ์„œ๋ฒ„ ์ธก ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

Node.js์˜ ํ•ต์‹ฌ ํŠน์ง•

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

์‹ค์Šต: ๋…ผ๋ธ”๋กœํ‚น ์ฝ”๋“œ๋กœ ์•Œ์•„๋ณด๊ธฐ

Node.js์˜ ๋…ผ๋ธ”๋กœํ‚น ํŠน์„ฑ์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋ฅผ ์‚ดํŽด๋ณด์ž.

function first() {
  console.log("์ฒซ๋ฒˆ์งธ");
}

function second() {
  console.log("๋‘๋ฒˆ์งธ");
}

function third() {
  console.log("์„ธ๋ฒˆ์งธ");
}

first();
second();
third();

์œ„ ์ฝ”๋“œ๋Š” ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋˜์–ด, "์ฒซ๋ฒˆ์งธ", "๋‘๋ฒˆ์งธ", "์„ธ๋ฒˆ์งธ" ์ˆœ์„œ๋กœ ์ถœ๋ ฅ๋œ๋‹ค. ํ•˜์ง€๋งŒ setTimeout์„ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

function first() {
  console.log("์ฒซ๋ฒˆ์งธ");
}

function second() {
  console.log("๋‘๋ฒˆ์งธ");
}

function third() {
  console.log("์„ธ๋ฒˆ์งธ");
}

first();
setTimeout(second, 2000);
third();

์ด ์˜ˆ์ œ์—์„œ๋Š” setTimeout์„ ์‚ฌ์šฉํ•˜์—ฌ second ํ•จ์ˆ˜์˜ ์‹คํ–‰์„ 2์ดˆ ์ง€์—ฐ์‹œ์ผฐ๋‹ค. Node.js์˜ ๋…ผ๋ธ”๋กœํ‚น ํŠน์„ฑ์œผ๋กœ ์ธํ•ด, ์‹คํ–‰ ํ๋ฆ„์ด second ํ•จ์ˆ˜์˜ ์‹คํ–‰์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๊ณ„์† ์ง„ํ–‰๋˜์–ด third ํ•จ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ์‹คํ–‰๋œ๋‹ค. ์ด๋Ÿฌํ•œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์€ Node.js์˜ ํ•ต์‹ฌ์ด๋ฉฐ, ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰๊ณผ ํšจ์œจ์ ์ธ ๋ฆฌ์†Œ์Šค ํ™œ์šฉ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.!


๐Ÿงฉ๋ชจ๋“ˆ:์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ๊ณผ ๊ตฌ์กฐํ™”

๋ชจ๋“ˆ์ด๋ž€?

์žฌ์‚ฌ์šฉํ•œ ์ฝ”๋“œ ์กฐ๊ฐ์œผ๋กœ, ๊ธฐ๋Šฅ๋ณ„๋กœ ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฝ๊ฒŒ ํ•œ๋‹ค.

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

http์›น ์„œ๋ฒ„ ๋ฐ ํด๋ผ์ด์–ธํŠธ ์ƒ์„ฑcreateServer, request
fsํŒŒ์ผ ์‹œ์Šคํ…œ ์ž‘์—…readFile, writeFile, mkdir
pathํŒŒ์ผ ๊ฒฝ๋กœ ์ฒ˜๋ฆฌjoin, resolve, parse
events์ด๋ฒคํŠธ ์ฒ˜๋ฆฌEventEmitter
crypto์•”ํ˜ธํ™” ๊ธฐ๋Šฅhash, cipher, decipher
urlURL ํŒŒ์‹ฑ ๋ฐ ์ฒ˜๋ฆฌparse, format
os์šด์˜์ฒด์ œ ์ •๋ณด ์ ‘๊ทผplatform, cpus, totalmem
util์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜promisify, inspect

 
์™ธ๋ถ€ ๋ชจ๋“ˆ
Node.js์—์„œ๋Š” npm์„ ํ†ตํ•ด ์™ธ๋ถ€ ๋ชจ๋“ˆ์„ ์„ค์น˜ํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์™ธ๋ถ€ ๋ชจ๋“ˆ์€ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋งŒ๋“ค์–ด ๊ณต์œ ํ•œ ์ฝ”๋“œ ํŒจํ‚ค์ง€๋กœ, ์ด๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ ์†๋„์™€ ํšจ์œจ์„ฑ์„ ํฌ๊ฒŒ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.
 
์™ธ๋ถ€ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋จผ์ € npm์„ ํ†ตํ•ด ์„ค์น˜๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค.

npm install ๋ชจ๋“ˆ๋ช…
npm i ๋ชจ๋“ˆ๋ช…

๋ชจ๋“ˆ๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ฐจ์ด์  ์ดํ•ดํ•˜๊ธฐ

๋ชจ๋“ˆ

์ž‘์€ ์ฝ”๋“œ ๋‹จ์œ„. ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹จ์ผ ํŒŒ์ผ ๋˜๋Š” ๊ธด๋ฐ€ํ•˜๊ฒŒ ์—ฐ๊ด€๋œ ์†Œ์ˆ˜์˜ ํŒŒ์ผ

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

๊ฐœ๋ฐœ์ž๊ฐ€ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋งŒ ์„ ํƒ์ ์œผ๋กœ ๊ฐ€์ ธ์™€ ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ ๋ชจ์Œ. ๊ด€๋ จ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ชจ๋“ˆ๋“ค์˜ ์ง‘ํ•ฉ

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ • ๊ธฐ๋Šฅ์„ ์ง์ ‘ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ณ ๋„ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
 
โœ… ์žฅ์ :

  • ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋งŒ ์„ ํƒ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์„œ ์œ ์—ฐํ•˜๋‹ค.
  • ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ์˜ ํ๋ฆ„์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํŠน์ • ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ ์ตœ์ ํ™”๋œ ๋„๊ตฌ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.

โŒ ๋‹จ์ :

  • ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐพ๊ณ  ์„ ํƒํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์ด ์†Œ์š”๋  ์ˆ˜ ์žˆ๋‹ค.
  • ์—ฌ๋Ÿฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์กฐํ•ฉํ•ด ์‚ฌ์šฉํ•  ๋•Œ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋งˆ๋‹ค ํ•™์Šต ๊ณก์„ ์ด ์กด์žฌํ•œ๋‹ค.

๐Ÿ’ก์˜ˆ์‹œ:

  • JQuery, React, Axios, Lodash ๋“ฑ

ํ”„๋ ˆ์ž„์›Œํฌ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ‹€

๊ฐœ๋ฐœ์ž๋Š” ํ‹€ ์•ˆ์—์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉฐ, ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ •ํ•œ ๊ทœ์น™๊ณผ ํŒจํ„ด์„ ๋”ฐ๋ผ์•ผ ํ•œ๋‹ค. ํ”„๋ ˆ์ž„์›Œํฌ๋Š” "๋งŒ๋“ค๊ณ  ์‹ถ์€ ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ‹€"์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
 
โœ… ์žฅ์ :

  • ์ผ๊ด€๋œ ์ฝ”๋“œ ๊ตฌ์กฐ์™€ ํŒจํ„ด ์œ ์ง€
  • ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ๋“ค์ด ์ด๋ฏธ ๊ตฌํ˜„๋˜์–ด ์žˆ์–ด ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.
  • ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ์ ํ•ฉํ•˜๋‹ค.

โŒ ๋‹จ์ :

  • ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ทœ์น™์„ ๋”ฐ๋ผ์•ผ ํ•˜๋ฏ€๋กœ ์ž์œ ๋„๊ฐ€ ์ œํ•œ๋  ์ˆ˜ ์žˆ๋‹ค.
  • ํ•™์Šต ๊ณก์„ ์ด ๊ฐ€ํŒŒ๋ฅผ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ถˆํ•„์š”ํ•œ ๊ธฐ๋Šฅ๊นŒ์ง€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์–ด, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฌด๊ฑฐ์›Œ์งˆ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ’ก์˜ˆ์‹œ:

  • Angular, Vue.js, Express, Django, Spring ๋“ฑ
โญ Node.js๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์•„๋‹ˆ๋ผ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์ด๋‹ค.

 


๐ŸŸฅNPM

npm(Node Package Manager)์€ Node.js์˜ ๊ธฐ๋ณธ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋กœ, ์™ธ๋ถ€ ๋ชจ๋“ˆ์„ ์‰ฝ๊ฒŒ ์„ค์น˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. npm ๋•๋ถ„์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ƒํƒœ๊ณ„๋Š” ํฌ๊ฒŒ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , ๊ฐœ๋ฐœ์ž๋“ค์€ ์ˆ˜๋งŽ์€ ์˜คํ”ˆ ์†Œ์Šค ํŒจํ‚ค์ง€๋ฅผ ๊ณต์œ ํ•˜๊ณ  ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

https://www.npmjs.com/

loading-card

loading-ui. Latest version: 1.0.1, last published: 7 years ago. Start using loading-card in your project by running `npm i loading-card`. There are no other projects in the npm registry using loading-card.

www.npmjs.com

 

Package.json

npm์„ ์‚ฌ์šฉํ•  ๋•Œ ํ•ต์‹ฌ์ด ๋˜๋Š” ํŒŒ์ผ์€ package.json์ด๋‹ค. ์ด ํŒŒ์ผ์—๋Š” ํ”„๋กœ์ ํŠธ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ํ•จ๊ป˜ ์˜์กด์„ฑ(dependency)์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค. pacakage.json ๋•๋ถ„์— ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋“ค๋„ ๊ฐ™์€ ํ™˜๊ฒฝ์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์‰ฝ๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

npm ์‚ฌ์šฉ ์˜ˆ์‹œ:

figlet์ด๋ผ๋Š” ์•„์Šคํ‚ค ์•„ํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์‚ฌ์šฉํ•ด๋ณด์•˜๋‹ค.

npm i figlet

์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด, node_modules ํด๋”๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , package.json์— figlet์ด ์˜์กด์„ฑ์œผ๋กœ ์ถ”๊ฐ€๋œ๋‹ค. ์ด์ œ figlet์„ ํ™œ์šฉํ•˜์—ฌ ์•„์Šคํ‚ค ์•„ํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

var figlet = require("figlet");

figlet("MONICX", function (err, data) {
  if (err) {
    console.log("Something went wrong...");
    console.dir(err);
    return;
  }
  console.log(data);
});

npm ํŒจํ‚ค์ง€ ์‚ญ์ œํ•˜๊ธฐ

npm uninstall ํŒจํ‚ค์ง€๋ช…

โ†ฉ๏ธ์ฝœ๋ฐฑ ํ•จ์ˆ˜์™€ ์Šค์ฝ”ํ”„

์ฝœ๋ฐฑ ํ•จ์ˆ˜

๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋˜์–ด, ํŠน์ • ์‹œ์ ์— ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜. Node.js์˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์—์„œ ์ฝœ๋ฐฑ ํŒจํ„ด์€ ๋งค์šฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•œ๋‹ค.

๋‹ค์Œ์€ Node.js๋กœ ๊ฐ„๋‹จํ•œ ์„œ๋ฒ„๋ฅผ ๋งŒ๋“œ๋Š” ์˜ˆ์ œ์ด๋‹ค.

let http = require('http');

function onRequest(request, response) {
    console.log("Request received.");
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write(data);
    response.end();
}

http.createServer(onRequest).listen(8888);
  • onRequest ํ•จ์ˆ˜๋Š” http.createServer()์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋กœ ์ „๋‹ฌ๋œ๋‹ค. ์„œ๋ฒ„์— ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด Node.js๋Š” ์ด ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

์Šค์ฝ”ํ”„

๋ณ€์ˆ˜๊ฐ€ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๋ฒ”์œ„๋ฅผ ๊ฒฐ์ •

var, let, const๋Š” ๊ฐ๊ฐ ๋‹ค๋ฅธ ์Šค์ฝ”ํ”„ ๊ทœ์น™์„ ๊ฐ€์ง„๋‹ค.

if(true){
    var num1 = 7;
    const num2 = 3;
    let num3 = 5;
}

console.log(num1);
console.log(num2); //const๋Š” ๋ธ”๋ก ์Šค์ฝ”ํ”„์—ฌ์„œ {} ๋ฐ–์—์„œ ์‚ฌ์šฉ ๋ถˆ๊ฐ€
console.log(num3); //let๋„ ๋ธ”๋ก ์Šค์ฝ”ํ”„
  • var์€ ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ if ๋ธ”๋ก ๋ฐ–์—์„œ๋„ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • const์™€ let์€ ๋ธ”๋ก ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ ์„ ์–ธ๋œ ๋ธ”๋ก({}๋‚ด๋ถ€) ๋ฐ–์—์„œ๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.

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