Etc๐Ÿ„‍โ™€๏ธ

Node.js, Next.js, NestJS, Nuxt.js

JanuDev 2025. 10. 14. 16:43

๋„ค์ด๋ฐ ์„ผ์Šค ํ™ฉ๋‹นํ•˜๋‹ค... ๊ฑฐ ์•ˆํ—ท๊ฐˆ๋ฆฌ๊ฒŒ ์ง€์•„์ค˜์•ผ ํ•˜๋Š”๊ฒŒ ์˜ˆ์˜ ์•„๋‹Œ์ง€;

์ด๋ฆ„๋“ค์ด ๊ฑฐ๊ธฐ์„œ ๊ฑฐ๊ธฐ๋ผ ํ—ท๊ฐˆ๋ ค์„œ ์ •๋ฆฌํ•œ๋‹ค

Node.js: JavaScript ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ

V8์—”์ง„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ JavaScript ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์œผ๋กœ, โญ์›น ๋ธŒ๋ผ์šฐ์ € ๋ฐ–์—์„œ๋„ JavaScript ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค. 

(V8์ด๋ž€ ๊ตฌ๊ธ€์ด ๊ฐœ๋ฐœํ•œ JavaScript ์—”์ง„์œผ๋กœ C++๋กœ ์ž‘์„ฑ๋˜์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค.)

Node.js๊ฐ€ ๊ฐœ๋ฐœ๋œ ๋•์— ๊ฐœ๋ฐœ์ž๋“ค์€ JavaScript๋ฅผ ํ†ตํ•ด์„œ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•ด์ง„ ๊ฒƒ์ด๋‹ค. JavaScript๋กœ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๊ฑฐ๋‚˜, ๋ฐ์Šคํฌํ†ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜, ๋ชจ๋ฐ”์ผ ์•ฑ๋„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๊ฒŒ๋œ ๊ฒƒ์ด๋‹ค.

๋˜ํ•œ Node.js๋Š” ๋‹ค๋ฅธ ์–ธ์–ด(C, Java)์ฒ˜๋Ÿผ ์ปดํ“จํ„ฐ์—์„œ ์ง์ ‘ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•œ๋‹ค.

npm(Node Package Manager)

Node.js๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด 'npm'์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. npm(Node Package Manager)์€ Node.js ์ƒํƒœ๊ณ„์˜ ํ‘œ์ค€ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์ด๋‹ค. 

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

  • ํŒจํ‚ค์ง€ ์ €์žฅ์†Œ ์ ‘๊ทผ : npm์€ ๊ณต๊ฐœ ํŒจํ‚ค์ง€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜์—ฌ ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(ex. React ๋“ฑ)๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ๋‹ค์šด๋กœ๋“œํ•œ๋‹ค.
  • ์˜์กด์„ฑ ๊ด€๋ฆฌ: ํ”„๋กœ์ ํŠธ์— ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋“ค์˜ ๋ชฉ๋ก๊ณผ ๋ฒ„์ „์„ package.json์ด๋ผ๋Š” ํŒŒ์ผ์„ ํ†ตํ•ด ๊ด€๋ฆฌํ•˜๊ณ , ํ•ด๋‹น ํŒŒ์ผ์— ์ •์˜๋œ ๋ชจ๋“  ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Node.js๋ฅผ ์„ค์น˜ํ•˜๋ฉด npm์ด ์ž๋™์œผ๋กœ ์„ค์น˜๋œ๋‹ค.

์ ๋‹ค๋ณด๋‹ˆ Java์˜ Maven, gradle๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•˜๋‹ค.

  npm(Node.js ๊ด€๋ฆฌ์ž) Maven Gradle
๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ Node.js ํ™˜๊ฒฝ JVM(Java Virtual Machine) ํ™˜๊ฒฝ JVM(Java Virtual Machine) ํ™˜๊ฒฝ
ํ‘œ์ค€ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž npm Maven Repository (์ค‘์•™์ €์žฅ์†Œ) Maven /JCenter/์ž์ฒด ์ €์žฅ์†Œ
์„ค์ • ํŒŒ์ผ package.json pom.xml build.gradle
์„ค์ • ์–ธ์–ด JSON XML Groovy ๋˜๋Š” Kotlin DSL
์ฃผ์š” ์—ญํ•  ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜์กด์„ฑ ๊ด€๋ฆฌ ๋ฐ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ด€๋ฆฌ ๋ฐ
์ •ํ˜•ํ™”๋œ ๋นŒ๋“œ ๋ผ์ดํ”„์‚ฌ์ดํด ๊ด€๋ฆฌ
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ด€๋ฆฌ ๋ฐ ์œ ์—ฐํ•˜๊ณ  ๋น ๋ฅธ
๋นŒ๋“œ ์ž๋™ํ™” ๊ด€๋ฆฌ

https://nodejs.org/en/download

 

Node.js — Download Node.js®

Node.js® is a free, open-source, cross-platform JavaScript runtime environment that lets developers create servers, web apps, command line tools and scripts.

nodejs.org

Node.js๋Š” ์œ„์—์„œ ๋‹ค์šด๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ์ฐธ๊ณ ๋กœ ์ง์ˆ˜๋ฒˆ์งธ, LTS๋ผ๊ณ  ์“ฐ์—ฌ ์žˆ๋Š” ๋ฒ„์ „์ด ์ข‹๋‹ค๊ณ  ํ•œ๋‹ค...

https://www.npmjs.com/

npm์˜ ์›ํ•˜๋Š” ํŒจํ‚ค์ง€๋Š” ์—ฌ๊ธฐ์„œ ๋‹ค์šด๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. React๋„ ์žˆ๊ณ , Socket.IO๋„ ์žˆ๊ณ .... 

 

Next.js: ์›น ํ”„๋ ˆ์ž„์›Œํฌ(์ฃผ๋กœ ํ”„๋ก ํŠธ์—”๋“œ)

Next.js๋Š” React๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ํ’€์Šคํƒ ์›น ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. ์ฃผ๋กœ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์— ์‚ฌ์šฉ๋˜์ง€๋งŒ API ๋ผ์šฐํ„ฐ ๊ธฐ๋Šฅ๋„ ํฌํ•จ๋˜์–ด ์žˆ์–ด ๋ฐฑ์—”๋“œ๋กœ ๋กœ์ง์„ ์ผ๋ถ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ํŠนํžˆ ์„œ๋ฒ„ ์‚ฌ์ดํŠธ ๋ Œ๋”๋ง(SSR), ์ •์  ์‚ฌ์ดํŠธ ์ƒ์„ฑ(SSG), ํŒŒ์ผ ์‹œ์Šคํ…œ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ… ๊ฐ™์€ ๊ธฐ๋Šฅ๋“ค์„ ๋‚ด์žฅํ•˜๊ณ  ์žˆ์–ด SEO(๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™”)์— ์œ ๋ฆฌํ•˜๊ณ  ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•œ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ๋นŒ๋“œ ์‹œ ๋ชจ๋“  ํŽ˜์ด์ง€๋ฅผ ๋ฏธ๋ฆฌ ๋ Œ๋”๋งํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ต‰์žฅํžˆ ๋นจ๋ฆฌ ๋ณด์—ฌ์„œ SEO์— ์ข‹๋‹ค.

 

1. ํ”„๋ก ํŠธ์—”๋“œ + ์ผ๋ถ€ ๋ฐฑ์—”๋“œ

๋ณดํ†ต ์›น ๊ฐœ๋ฐœ์€ 1๏ธโƒฃํ™”๋ฉด ๋ณด์—ฌ์ฃผ๊ธฐ(ํ”„๋ก ํŠธ์—”๋“œ), 2๏ธโƒฃ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ(๋ฐฑ์—”๋“œ) 2๊ฐ€์ง€๋กœ ๋‚˜๋‰œ๋‹ค. Next.js๋Š” ์ฃผ๋กœ ํ™”๋ฉด ๋ณด์—ฌ์ฃผ๊ธฐ์šฉ์ด์ง€๋งŒ API ๋ผ์šฐํ„ฐ๋ผ๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์–ด์„œ ๊ฐ„๋‹จํ•œ ์„œ๋ฒ„ ์—ญํ• ๋„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

ex) ์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋–„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๋Š” ๊ธฐ๋Šฅ: Next.js์•ˆ์—์„œ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

2. SSR(์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง) ↔ CSR(ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง, React์˜ ๋ฐฉ์‹)

SSR(์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง)์ด๋ž€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์™„์ „ํžˆ ๋งŒ๋“ค์–ด์ง„ htmlํŒŒ์ผ์„ ๋ฐ›์•„์™€ ํ™”๋ฉด์„ ๊ทธ๋ฆฌ๋Š” ๋ฐฉ์‹์„ ๋งํ•œ๋‹ค. 

React๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ™”๋ฉด์„ ๋‹ค ๊ทธ๋ฆฐ ํ›„ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ฃผ๋Š”๋ฐ(=CSR ๋ฐฉ์‹), ์›๋ž˜ React๋Š” ๋นˆ htmlํŒŒ์ผ์„ ๋ณด์—ฌ์ฃผ๊ณ  ๊ทธ ์ดํ›„ resource๋ฅผ ๋‹ค์šด๋ฐ›์•„์„œ ๋ณด์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„๊ฐ€ ๋А๋ฆฌ๊ณ , ๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™” ์ธก๋ฉด์—์„œ ๋ถˆ๋ฆฌํ•˜๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ Next.js๊ฐ€ SSR๋ฐฉ์‹์„ ๋„์ž…ํ–ˆ๋Š”๋ฐ, SSR์€ ์„œ๋ฒ„๊ฐ€ ๋จผ์ € ํ™”๋ฉด์„ ๋งŒ๋“ค์–ด์„œ ๋ณด๋‚ด์ฃผ๋Š” ๋ฐฉ์‹์ด๋ฏ€๋กœ ํŽ˜์ด๊ฐ€ ๋” ๋นจ๋ฆฌ ๋ณด์ด๊ณ , ๊ฒ€์ƒ‰ ์—”์ง„(Google ๋“ฑ)์ด ๋” ์ž˜ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

  • CSR (React ๋ฐฉ์‹)
    ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTML์„ ๋ฐ›๊ณ , JS๋ฅผ ๋‹ค์šด๋กœ๋“œํ•œ ํ›„ ํ™”๋ฉด์„ ๊ทธ๋ฆผ → ์ดˆ๊ธฐ ๋กœ๋”ฉ ๋А๋ฆผ
  • SSR (Next.js ๋ฐฉ์‹)
    ์„œ๋ฒ„๊ฐ€ ์™„์ „ํžˆ ๋ Œ๋”๋งํ•œ HTML์„ ๋งŒ๋“ค์–ด์„œ ๋ธŒ๋ผ์šฐ์ €์— ์ „์†ก → ํ™”๋ฉด์ด ๋” ๋นจ๋ฆฌ ๋œธ

์„œ๋ฒ„์‚ฌ์ด๋“œ ๋žœ๋”๋ง(Next.js์ฑ„ํƒ)๊ณผ ํด๋ผ์ด์–ธํŠธ์‚ฌ์ด๋“œ ๋žœ๋”๋ง(React ์ฑ„ํƒ)์„ ๋” ์ž์„ธํžˆ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด ์ด ๊ฒŒ์‹œ๊ธ€ ์ฐธ๊ณ ํ•  ๊ฒƒ...

 

3. SSG(์ •์  ์‚ฌ์ดํŠธ ์ƒ์„ฑ)

๋ฏธ๋ฆฌ ๋ชจ๋“  ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์–ด๋†“๊ณ  ๋ฐฐํฌ๋ฅผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„ ๋ถ€๋‹ด์ด ์ค„๊ณ  ํŽ˜์ด์ง€๊ฐ€ ์—„์ฒญ ๋นจ๋ฆฌ ์—ด๋ฆฐ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

 

4. ํŒŒ์ผ ์‹œ์Šคํ…œ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…

Next.js์—์„œ ํŒŒ์ผ ์ด๋ฆ„์ด ๊ณง ์›น ์ฃผ์†Œ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด pages/about.js์ธ ๊ฒฝ์šฐ ๋ธŒ๋ผ์šฐ์ €์—์„œ www.example.com/about ์œผ๋กœ ๋ฐ”๋กœ ์ž๋™ ์—ฐ๊ฒฐ์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์†Œ๋ฅผ ๋”ฐ๋กœ ์„ค์ •ํ•  ํ•„์š” ์—†์ด ํŒŒ์ผ๋งŒ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค. 

 

NestJS: ๋ฐฑ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ

ํ”„๋ก ํŠธ์—”๋“œ๋Š” React, Angular, Vue๋“ฑ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋‹ค์–‘ํ•˜์ง€๋งŒ, ๋ฐฑ์—”๋“œ๋ฅผ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” Node.js์˜ ๋†’์€ ์ž์œ ๋„๋กœ ์ธํ•ด ์•„ํ‚คํ…์ณ์˜ ๊ตฌ์„ฑ์ด ์–ด๋ ต๊ณ  ํšจ๊ณผ์ ์ด์ง€ ๋ชปํ–ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Angular์˜ ์•„ํ‚คํ…์ณ์—์„œ ์˜๊ฐ์„ ๋ฐ›์•„ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์ด NestJS์ด๋‹ค.

 

Node.js๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋ฐฑ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ๋ณต์žกํ•œ ๋ฐฑ์—”๋“œ ์ฝ”๋“œ๋ฅผ ๋” ๊น”๋”ํžˆ ์ •๋ฆฌํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฝ๋„๋ก ๋งŒ๋“  ๊ฒƒ์ด๋‹ค.

Nest.js๋Š” ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค, REST API, GraphQL ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“œ๋Š”๋ฐ ์ ํ•ฉํ•˜๋ฉฐ, ๊ตฌ์กฐ์ ์ธ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์— ํŠนํ™”๋˜์–ด ์žˆ๋‹ค.

  • ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP) : ์ฝ”๋“œ์˜ ๊ตฌ์กฐ๋ฅผ "๊ฐ์ฒด"๋กœ ๋‚˜๋ˆ„์–ด์„œ ๊ด€๋ฆฌ
  • ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ(FP) : ๋ฐ์ดํ„ฐ๋ฅผ "๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ " ํ•จ์ˆ˜๋กœ๋งŒ ๋‹ค๋ฃจ๋Š” ๋ฐฉ์‹
  • ๋ฐ˜์‘ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Reactive) : ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ˜์‘ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐฉ์‹

์ด 3๊ฐ€์ง€์˜ ์ฒ ํ•™์„ ํ•ฉ์ณ์„œ ๊ฐœ๋ฐœ๋˜์—ˆ๋‹ค.

์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ์™€ ๋กœ์ง์„ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ํŠนํ™”๋˜์–ด ์žˆ๋Š”๋ฐ, ์˜ˆ๋ฅผ ๋“ค์–ด

  • ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธํ•  ๋•Œ ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ ํ™•์ธ → REST API
  • ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
  • ๋‹ค๋ฅธ ์„œ๋ฒ„(API)์™€ ์ •๋ณด ์ฃผ๊ณ ๋ฐ›๊ธฐ 
  • ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ(์ฑ„ํŒ…, ๊ฒŒ์ž„ ๋“ฑ) ์ฒ˜๋ฆฌํ•˜๊ธฐ

๋“ฑ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ•ธ๏ธ NestJS๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋Œ€ํ‘œ์ ์ธ ๊ฒƒ๋“ค

  • REST API → ์ผ๋ฐ˜์ ์ธ ์›น/์•ฑ ์„œ๋ฒ„ (์˜ˆ: ๋กœ๊ทธ์ธ, ๊ธ€์“ฐ๊ธฐ ๋“ฑ)
  • GraphQL ์„œ๋ฒ„ → ์ข€ ๋” ์œ ์—ฐํ•œ ๋ฐ์ดํ„ฐ ์š”์ฒญ์ด ๊ฐ€๋Šฅํ•œ ์„œ๋ฒ„
  • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค(Microservices) → ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์€ ์„œ๋ฒ„๊ฐ€ ํ˜‘๋ ฅํ•ด์„œ ํ•˜๋‚˜์˜ ํฐ ์„œ๋น„์Šค๋ฅผ ์ด๋ฃจ๋Š” ๊ตฌ์กฐ

์œ„ ์„ค๋ช…์„ ๋ณด๋ฉด ์ง๊ฐ์ด ์˜ค์ง€๋งŒ Java + Sporing์˜ ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์กฐ์™€ ๋งค์šฐ ๋น„์Šทํ•˜๋‹ค. 

 

๐ŸŒฑ 1๏ธโƒฃ Java + Spring Boot

// HelloController.java
@RestController
@RequestMapping("/hello")
public class HelloController {

    private final HelloService helloService;

    // ์˜์กด์„ฑ ์ฃผ์ž… (Dependency Injection)
    // ํด๋ž˜์Šค์—์„œ @RequiredArgsConstructor๋กœ ๋Œ€์ฒด๋  ์ˆ˜ ์žˆ์Œ
    public HelloController(HelloService helloService) {
        this.helloService = helloService;
    }

    @GetMapping
    public String getHello() {
        return helloService.sayHello();
    }
}

// HelloService.java
@Service
public class HelloService {
    public String sayHello() {
        return "Hello World";
    }
}

๐Ÿงฉ 2๏ธโƒฃ TypeScript + NestJS

 

// hello.controller.ts
import { Controller, Get } from '@nestjs/common';
import { HelloService } from './hello.service';

@Controller('hello')
export class HelloController {
  constructor(private readonly helloService: HelloService) {}

  @Get()
  getHello(): string {
    return this.helloService.sayHello();
  }
}

// hello.service.ts
import { Injectable } from '@nestjs/common';

@Injectable()
export class HelloService {
  sayHello(): string {
    return 'Hello World';
  }
}
  Spring Boot(Java) NestJS(TypeScript)
์–ธ์–ด Java TypeScript
์ฃผ์š” ๊ตฌ์กฐ Controller, Service, Repository Controller, Service, Module
์˜์กด์„ฑ ์ฃผ์ž… @Autowired or ์ƒ์„ฑ์ž ์ฃผ์ž… @Injectable() + ์ƒ์„ฑ์ž ์ฃผ์ž…
์„œ๋ฒ„ ์‹œ์ž‘ SpringApplication.run() NestFactoryu.create(AppModule)
๋ผ์šฐํŒ… ๋ฐฉ์‹ @RequestMapping, @GetMapping @Controller, @Get
๋นŒ๋“œ ๋„๊ตฌ Maven, Gradle npm, yarn
ํ”„๋ ˆ์ž„์›Œํฌ ์ฒ ํ•™ LOC(์ œ์–ด์˜ ์—ญ์ „), DI(์˜์กด์„ฑ ์ฃผ์ž…) LOC(์ œ์–ด์˜ ์—ญ์ „), DI(์˜์กด์„ฑ ์ฃผ์ž…)

+ @Repository : Spring์—์„œ DB์™€ ์ง์ ‘ ์†Œํ†ตํ•˜๋Š” ๋ฐ์ดํ„ฐ ์†Œํ†ต ๊ณ„์ธต. Mybatis์˜ ์–ด๋…ธํ…Œ์ด์…˜ @Mapper๋Š” SQL ๋งคํ•‘ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•˜๋ฉด์„œ ์ž๋™์œผ๋กœ @Repository์˜ ์—ญํ•  + DAO์—ญํ• ์„ ๊ฐ™์ด ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Mybatis๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด @Mapper๋งŒ ์จ๋„ ๋œ๋‹ค.

 

Nuxt.js : ํ’€์Šคํƒ ํ”„๋ ˆ์ž„์›Œํฌ

Vue.js๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ํ’€์Šคํƒ ์›น ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. Next.js๊ฐ€ React๊ธฐ๋ฐ˜์ธ ๊ฒƒ ์ฒ˜๋Ÿผ Nuxt๋Š” Vue ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ์ตœ๊ณ ์˜ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•œ๋‹ค. 

์›๋ž˜ Vue.js๋กœ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“ค๋ฉด ๋ผ์šฐํ„ฐ, SEO์„ค์ •, ์„œ๋ฒ„ ๋ Œ๋”๋ง(SSR), ํด๋” ๊ตฌ์กฐ ๋“ฑ์„ ์ „๋ถ€ ์ง์ ‘ ์„ค์ •ํ•ด์•ผ ํ•˜๋Š”๋ฐ, Nuxt.js๋Š” ์ด๋Ÿฐ ๊ฒƒ์„ ๋ชจ๋‘ ์ž๋™์œผ๋กœ ์„ธํŒ…ํ•ด์ค€๋‹ค. 

 

1. ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(SSR) ๋ฐ SEO ์ตœ์ ํ™”

์•ž์„œ ์„ค๋ช…ํ•œ Next.js์™€ ๊ฐ™์ด Nuxt.js๋„ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(SSR)์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฏธ๋ฆฌ ์„œ๋ฒ„์—์„œ ๋ Œ๋”๋ง๋œ ์™„์ „ํ•œ HTML ํŽ˜์ด์ง€๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „์†กํ•˜์—ฌ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„๋ฅผ ๋†’์ด๊ณ  SEO(๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™”)์— ์œ ๋ฆฌํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค. ํŠนํžˆ Nuxt๋Š” ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์˜์ชฝ์—์„œ ๋ Œ๋”๋ง์ด ๊ฐ€๋Šฅํ•œ ์œ ๋‹ˆ๋ฒ„์…œ ๋ชจ๋“œ๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•œ๋‹ค. 

 

2. ํŒŒ์ผ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ… ๋ฐ ์ž๋™ ๊ตฌ์„ฑ

  • ์ž๋™ ๋ผ์šฐํŒ… : pages ํด๋” ์•ˆ์— VueํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด Nuxt๊ฐ€ ์ž๋™์œผ๋กœ ๋ผ์šฐํŒ… ์„ค์ •์„ ํ•œ๋‹ค(Next.js์™€ ๋™์ผ)
  • ์ž๋™ ๊ฐ€์ ธ์˜ค๊ธฐ : ์ปดํฌ๋„ŒํŠธ, ์ƒํƒœ ๊ด€๋ฆฌ ์ €์žฅ์†Œ, ํ”Œ๋Ÿฌ๊ทธ์ธ ๋“ฑ์„ ์ˆ˜๋™์œผ๋กœ importํ•  ํ•„์š” ์—†์ด ์ž๋™์œผ๋กœ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์ด ๋งค์šฐ ๋†’๋‹ค. 

3. ๋ Œ๋”๋ง ์˜ต์…˜

๋‹ค์–‘ํ•œ ๋ Œ๋”๋ง ๋ฐฉ์‹์„ ์ง€์›ํ•ด์„œ ํ”„๋กœ์ ํŠธ์˜ ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž๊ฒŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค. 

  • SPA(Single Page Application) : ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ๋งŒ ๋ Œ๋”๋ง. ์ผ๋ฐ˜์ ์ธ Vue ์•ฑ ๋ฐฉ์‹
  • SSR(Server-Side Rendering) : ์š”์ฒญ ์‹œ ์„œ๋ฒ„์—์„œ ๋ Œ๋”๋ง
  • SSG(Static Site Generation) : ๋นŒ๋“œ ์‹œ์ ์— ๋ชจ๋“  ํŽ˜์ด์ง€๋ฅผ ์ •์  HTML๋กœ ์ƒ์„ฑ, ๋น ๋ฅด๊ณ  ๋ณด์•ˆ์— ๊ฐ•ํ•จ
  Next.js Nuxt.js
๊ธฐ๋ฐ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ React Vue
์–ธ์–ด ์Šคํƒ€์ผ JSX๋ฌธ๋ฒ• template, script, style
์ƒํƒœ ๊ด€๋ฆฌ ๊ธฐ๋ณธ ๋„๊ตฌ ์—†์Œ(Redux, Zustand) Pinia, Vuex ๋“ฑ
์ƒํƒœ๊ณ„ ๊ธฐ์—…์šฉ ๋Œ€ํ˜• ํ”„๋กœ์ ํŠธ ๋””์ž์ธ ์ค‘์‹ฌ์˜ ํ”„๋ก ํŠธ์—”๋“œ, ์Šคํƒ€ํŠธ์—…
ํ•™์Šต ๋‚œ์ด๋„ JSX ๊ฐœ๋…์ด ์ฒ˜์Œ์— ์–ด๋ ค์›€ ๋ฌธ๋ฒ•์ด ์ง๊ด€์ 

 

๋ฌด์—‡์„ ์„ ํƒํ•ด์•ผ ํ•˜๋А๋ƒ

์›น ๊ฐœ๋ฐœ์—์„œ ๋ Œ๋”๋ง ๋ฐฉ์‹์ด ๋ญ๋ƒ์— ๋”ฐ๋ผ ์„ ํƒ์ด ๋‹ฌ๋ผ์ง„๋‹ค.

1. Next.js / Nuxt.js๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

  • ๊ฒ€์ƒ‰์—”์ง„(SEO) ๋…ธ์ถœ์ด ๋งค์ถœ์— ์ง๊ฒฐ๋˜๋Š” ๊ฒฝ์šฐ
  • ๋‰ด์Šค, ๋ธ”๋ก, ์ฝ˜ํ…์ธ  ๋ฏธ๋””์–ด ๋“ฑ
  • ๋งˆ์ผ€ํŒ…, ๋žœ๋”ฉ ํŽ˜์ด์ง€
  • ์ƒํ’ˆ ๊ฒ€์ƒ‰ํ˜• ์ด์ปค๋จธ์Šค
  • ๊ธ€๋กœ๋ฒŒ SaaS ๊ฐ€์ž…, ํ™๋ณด ํŽ˜์ด์ง€

2. ์ „ํ†ต์ ์ธ ๋ฐฑ์—”๋“œ(Spring Boot, NestJS) + SPA(React, Vue)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

  • ๋Œ€๊ทœ๋ชจ Enterprise Saas
  • ERP, ๊ทธ๋ฃน์›จ์–ด
  • ๊ณ ์„ฑ๋Šฅ ์‹ค์‹œ๊ฐ„ ์„œ๋น„์Šค(๊ฒŒ์ž„, ์ฑ„ํŒ…, ์ŠคํŠธ๋ฆฌ๋ฐ)

+ SaaS : ์„œ๋น„์Šคํ˜• ์†Œํ”„ํŠธ์›จ์–ด. ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ตฌ๋งคํ•ด์„œ ๋‚ด ์ปดํ“จํ„ฐ์— ์„ค์น˜ํ•˜๋Š” ๋Œ€์‹  ์ธํ„ฐ๋„ท์„ ์ ‘์†ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ์˜๋ฏธํ•œ๋‹ค(ex. Microsoft 365, Gmail๋“ฑ)

๊ตฌ๋ถ„ ์ „ํ†ต์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด SaaS
์„ค์น˜ ๋ฐฉ์‹ CD๋ฅผ ๊ตฌ๋งคํ•˜๊ฑฐ๋‚˜ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ PC์— ์ง์ ‘ ์„ค์น˜
์ธํ„ฐ๋„ท์œผ๋กœ ์ ‘์†ํ•˜์—ฌ ๋ฐ”๋กœ ์‚ฌ์šฉ
์—…๋ฐ์ดํŠธ ์‚ฌ์šฉ์ž๊ฐ€ ์ˆ˜๋™์œผ๋กœ ์ง„ํ–‰
์„œ๋น„์Šค ์ œ๊ณต์—…์ฒด๊ฐ€ ์ž๋™์œผ๋กœ ์ง„ํ–‰
๋Œ€ํ‘œ ์˜ˆ์‹œ MS Office 2019 (ํŒจํ‚ค์ง€ ๊ตฌ๋งค)
Microsoft 365, Gmail, Salesforce

๊ฒฐ๋ก 

๊ตฌ๋ถ„ Node.js Next.js NestJS
์—ญํ•  ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ ์›น ํ”„๋ ˆ์ž„์›Œํฌ ๋ฐฑ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ
์ฃผ ์‚ฌ์šฉ๋ถ„์•ผ ์„œ๋ฒ„, ๋„๊ตฌ, CLI๋“ฑ ํ”„๋ก ํŠธ์—”๋“œ ์ค‘์‹ฌ์˜ ์›น ์•ฑ ๋ฐฑ์—”๋“œ API,  ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค
๊ธฐ๋ฐ˜ ๊ธฐ์ˆ  V8์—”์ง„ Node.js, React Node.js, TypeScript
ํ•ต์‹ฌ ํŠน์ง• JavaScript ์‹คํ–‰ ํ™˜๊ฒฝ SSR, SSG, ํŒŒ์ผ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ… ๋ชจ๋“ˆํ™”, ๊ตฌ์กฐ์ ์ธ ์•„ํ‚คํ…์ณ

 

 

[์ฐธ๊ณ  ์ž๋ฃŒ]

https://return-true.tistory.com/17

 

[Node.js] V8์ด๋ž€? ๊ตฌ์กฐ์™€ Javascript ์ฝ”๋“œ์˜ ์‹คํ–‰ ์ˆœ์„œ

ํ•œ ์ค„ ์š”์•ฝ V8? Javascript ์ฝ”๋“œ๋ฅผ Ignition์ด๋ผ๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ์™€ Turbofan์ด๋ผ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด JIT ์ปดํŒŒ์ผ์„ ์ˆ˜ํ–‰ํ•˜๋Š” Javascript ์˜คํ”ˆ์†Œ์Šค ์—”์ง„์ด๋‹ค. V8์ด๋ž€? ๊ตฌ๊ธ€์ด ๊ฐœ๋ฐœํ•œ Javascript ์—”์ง„์ด๋‹ค. C++๋กœ ์ž‘์„ฑ

return-true.tistory.com

https://www.notion.so/Node-js-5f9344d1dfe44b5eac121449cc1eacfb#5f9344d1dfe44b5eac121449cc1eacfb

 

Node.js ์ •๋ฆฌ | Notion

์›๋ž˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” “์›น์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ๋„ˆ๋ฌด ์ข‹๋‹ค”

confirmed-clave-f2a.notion.site

https://velog.io/@codns1223/Nextjs-Next.js%EB%9E%80

 

[Nextjs] Next.js๋ž€?

โžก๏ธ Next.js๋ž€? Next.js๋Š” ํ’€์Šคํƒ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ React ๊ธฐ๋ฐ˜ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ์˜ UI๋Š” React๋กœ ๊ตฌ์„ฑํ•˜๋ฉฐ, Next.js๋Š” ํŽ˜์ด์ง€ ๋ผ์šฐํŒ…, ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(SSR), ์ •์  ์‚ฌ์ดํŠธ ์ƒ

velog.io

https://velog.io/@minsang9735/NestJs-%EB%9E%80

 

NestJs ๋ž€?

NestJS ์š”์ฆ˜ ์•ˆ๊ทธ๋ž˜๋„ ๋ฐฑ์—”๋“œ express๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ์„œ๋ฒ„ ๋งŒ๋“ค์–ด๋ณด๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ ๊ธฐํšŒ๊ฐ€ ์ƒ๊ฒจ์„œ Nest๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์ง€๊ธˆ๋„ ๋ฐ”๋น  ๋’ค์ง€๊ฒ ๋Š”๋ฐ ํ”„๋กœ์ ํŠธ ๋˜ ์ƒ๊ฒผ๋‹ค. ๋„ˆ๋ฌด ์ข‹๋‹ค. Ne

velog.io