[BackEnd][Node.js] Express.js - ์ดˆ๊ธฐ ๊ตฌ์„ฑ

2022. 4. 7. 15:39ใ†Back-End ์ž‘์—…์‹ค/Node.js

728x90
๋ฐ˜์‘ํ˜•

 

 

 

Project Git Hub

 

 

๐Ÿ—‚ ๋ชฉ์ฐจ

โ— [BackEnd][Node.js] Express.js - ์ดˆ๊ธฐ ๊ตฌ์„ฑ
โ— [BackEnd][Node.js] Express.js - ์ดˆ๊ธฐ ๊ตฌ์„ฑ : DB ์—ฐ๊ฒฐ
โ— [BackEnd][Node.js] Express.js - ์ดˆ๊ธฐ ๊ตฌ์„ฑ : DB ์—ฐ๊ฒฐ(Sequelize)

 

 

๐Ÿ“š ๋ถ€๋ก

โ— [Node.js] Node.js ๊ธฐ์ดˆ
โ— [JavaScript] ๊ธฐ๋ณธ ๋ฌธ๋ฒ•
โ— [Web] URL์˜ ์ดํ•ด
โ— [Spring] Spring์ด๋ž€?



 

 

๐Ÿค” ๋‚ด๊ฐ€ ๋งŒ๋‚œ Error

โ— [Node.js][Error] Cannot find module '.dotenv'

 

 

 

 

 

 

 

 

 

 

๐Ÿš€ Node.js ์‹œ์ž‘ํ•˜๊ธฐ

    ๐Ÿ”ฝ  ๊ฐœ์š”

์ฃผ๋‹ˆํ•˜๋ž‘์€ SE(Server Engineer) ๊ทผ๋ฌด๋ฅผ ํ•˜๋‹ค๊ฐ€ ๊ฐœ๋ฐœ์ž๋กœ์จ ๋˜๋‹ค๋ฅธ ์ธ์ƒ์„ ์‹œ์ž‘ํ•˜๊ณ  ์‹ถ๋‹ค๋Š” ๊ฟˆ์„ ๊ฐ€์ง€๊ณ , JAVA์ง„์˜์˜ `Spring Boot`๋ฅผ ๊ณต๋ถ€ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

์–ด๋Š๋‚  ๋ฉ‹์ง„ Start Up ๋Œ€ํ‘œ๋‹˜๊ป˜์„œ ์ œ๊ฐ€ ์ •๋ฆฌํ•œ ๊ธ€์„ ๋ณด๊ณ , ์—…๋ฌด ๊ด€๋ จํ•ด์„œ ์ด์•ผ๊ธฐ๋ฅผ ๋‚˜๋ˆ„๊ณ  ์‹ถ๋‹ค๊ณ  ํ•˜์…”์„œ ์ด์•ผ๊ธฐ๋ฅผ ๋‚˜๋ˆˆ ๊ฒƒ์ด์—์š”. ์•Œ๊ณ ๋ณด๋‹ˆ ๊ทธ ํšŒ์‚ฌ๋Š” `Node.js`๋ฅผ ์ด์šฉํ•œ Server๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ์žˆ๋Š” ํšŒ์‚ฌ๋”๋ผ๊ตฌ์š”.

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

`Node.js`๋ฅผ ๊ณต๋ถ€ํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ๊ฐ•์˜๋ฅผ ์ฐพ์•„๋ดค์ง€๋งŒ, ์ฃผ๋‹ˆํ•˜๋ž‘์€ `Sping` ํ™˜๊ฒฝ์œผ๋กœ ๊ตฌ์„ฑ๋œ ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ๋ฅผ `Node.js`๋กœ ๋ฐ”๊ฟ”๋ณด๋Š” ๊ฒƒ์„ ํ•ด๋ณด๊ณ  ์‹ถ์€๋ฐ, ejs ๋“ฑ RESTFul ๋ฐฉ์‹์˜ JSON Data ํ†ต์‹ ์ด ์•„๋‹Œ html ๋“ค๋„ ๋“ค์–ด๊ฐ€๋Š” ๋“ฑ์˜ ๊ฐ•์˜๋“ค๋งŒ ์žˆ๋Š” ๊ฒƒ์„ ๋ณธ ๊ฒƒ์ด์—์š”.

์ฃผ๋‹ˆํ•˜๋ž‘์€ ์—ด์‹ฌํžˆ ๊ตฌ๊ธ€๋ง์„ ํ•˜๊ณ  ์ฃผ๋‹ˆํ•˜๋ž‘์ด ์›ํ•˜๋Š” ๋‚ด์šฉ๋Œ€๋กœ ๊ณต๋ถ€๋ฅผ ํ•ด๋ณด๋ฉด์„œ ๋‚ด์šฉ์„ ์ •๋ฆฌ ํ•ด ๋ณผ๊ฒƒ์ด์—์š”.

 

 

 

        ๐Ÿ“ฆ  Spring VS Node.js

์‹œ์ž‘ํ•˜๊ธฐ ์•ž ์จ ์ฃผ๋‹ˆํ•˜๋ž‘์ด ์‚ฌ๋ž‘ํ•˜๋Š” `Spring`๊ณผ `Node.js`๋ฅผ ํ•œ๋ฒˆ ๋น„๊ตํ•ด ๋ณธ ๊ฒƒ์ด์—์š”.

์œ„์˜ ํ‘œ๋ฅผ ๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด `Node.js`๋Š” `Runtime` ํ™˜๊ฒฝ์ด๊ณ , `Spring`์€ `Framework`์ธ ๊ฒƒ์ด์—์š”. ๋”ฐ๋ผ์„œ `Runtime` ํ™˜๊ฒฝ๊ณผ `Framwork`๋ฅผ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์ด ์–ด๋ถˆ์„ฑ์„ค์ผ ์ˆ˜ ์žˆ์œผ๋‚˜, ๋‘ ๊ฐ€์ง€์˜ ๊ธฐ์ˆ ์ด ์žˆ๋‹ค๋Š” ์ ์—์„œ ๋น„๊ตํ•ด ๋ณด๋Š” ๊ฒƒ์ด์—์š”. ๋˜ํ•œ, ์ด ๋‘๊ฐ€์ง€๊ฐ€ ์–ธ๊ธ‰๋˜๋Š” ์ด์œ ๋Š” `Node.js` ๋“ฑ์žฅ์œผ๋กœ `JavaScript`๋กœ Application ๊ฐœ๋ฐœ์ด ์šฉ์ดํ•ด์กŒ๊ณ , `Spring`์˜ ๋“ฑ์žฅ์œผ๋กœ JAVA์˜ Application ๊ฐœ๋ฐœ์ด ์šฉ์ดํ•ด์กŒ๊ธฐ ๋•Œ๋ฌธ์ธ ๊ฒƒ์ด์—์š”.

 

 

        ๐Ÿ“ฆ  Express.js

JAVA์—์„œ Web Application์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด `Spring`์„ ์ด์šฉํ•˜๋“ฏ `Node.js`์—์„œ๋Š” `Express.js`๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด์—์š”. ์ด ์™ธ์—๋„ ์—ฌ๋Ÿฌ `Framework`๊ฐ€ ์žˆ์ง€๋งŒ, `Express.js`๋Š” ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” Web Framework์ด๊ธฐ ๋•Œ๋ฌธ์— ์„ ํƒํ•œ ๊ฒƒ์ด์—์š”. `Express.js`๋Š” `Spring`๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ, ํ›จ์”ฌ ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•˜๊ณ , ์‹ค์ œ Server Code๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ๋‹ค๊ณ  ํ•ด์š”.

ํ˜„์—…์—์„œ๋„ ๋งŽ์ด ์• ์šฉ๋˜๋Š” `ํƒ€์ž… ์Šคํฌ๋ฆฝํŠธ`์™€ ํ•จ๊ป˜ ์ด์šฉํ•˜๋ฉด ๋ณดํ†ต `Nest.js`๋ผ๋Š” `Framework`๋ฅผ ์ด์šฉํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ `Node.js`๋Š” `NoSQL`๊ณผ ๊ถํ•ฉ์ด ์ž˜ ๋งž์•„ `MongoDB`๋ฅผ ๋งŽ์ด ์ด์šฉํ•˜๋Š”๋ฐ, ์ฃผ๋‹ˆํ•˜๋ž‘์€ RDBMS์ธ `MySQL`์„ ์ด์šฉํ•ด ๋ณผ ๊ฒƒ์ด์—์š”.

`Express.js`๋Š” ๋”ฐ๋กœ ๋””์ž์ธ ํŒจํ„ด์„ ์ •ํ•˜์ง€ ์•Š๊ณ  ์žˆ๋Š”๋ฐ, `์ฝ”๋“œ ๊ฐ€๋…์„ฑ`๊ณผ `์œ ์ง€๋ณด์ˆ˜ ์„ฑ` ๋“ฑ์„ ์œ„ํ•˜์—ฌ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜๋Š” `route`, ๊ฐ Route์˜ ์ž…๋ ฅ๊ฐ’๊ณผ ์‹ค์ œ Query๋ฌธ์„ ์—ฐ๊ฒฐํ•˜๋Š” `Controller`, ์‹ค์ œ Query๋ฌธ์„ ์ž‘์„ฑํ•˜๋Š” `Model` Layer๋กœ ๋‚˜๋ˆ„์–ด ์ง„ํ–‰ ํ•ด ๋ณด๋„๋ก ํ•  ๊ฒƒ์ด์—์š”.

`Spring`์˜ MVC ๋ฐฉ์‹๊ณผ ๋‹ค๋ฅด๋‹ค๋ณด๋‹ˆ ๋งŽ์ด ํ—ท๊ฐˆ๋ฆฌ๋Š” ๊ฒƒ์ด์—์š”.

 

 

 

 

    ๐Ÿ”ฝ  ์ดˆ๊ธฐ ๊ตฌ์„ฑ

์ตœ์ดˆ VSCODE์™€ ๊ฐ™์€ IDE๋ฅผ ์ด์šฉํ•ด์„œ ํ„ฐ๋ฏธ๋„์„ ์—ด๊ณ , ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด์„œ ์ดˆ๊ธฐ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•ด ์ค„ ๊ฒƒ์ด์—์š”. ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด `package.json` ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๋Š”๋ฐ, ์ด ํŒŒ์ผ์€ `Spring` `Gradle`์—์„œ๋Š” `build.gradle` `Mavne`์—์„œ๋Š” `pom.xml`๊ณผ ๊ฐ™์ด `dependency` ์ •๋ณด์™€ ํ”„๋กœ์ ํŠธ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ํŒŒ์ผ๋กœ ์ด ์นœ๊ตฌ๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์—์„œ ์ด์šฉํ•˜๋Š” Package๋ฅผ ๊ด€๋ฆฌ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

๋ช…๋ น์–ด

npm init

npm init์„ ํ†ตํ•œ ํ™˜๊ฒฝ ๊ตฌ์„ฑ

์ฃผ๋‹ˆํ•˜๋ž‘์€ ์œ„์™€ ๊ฐ™์ด ํ™˜๊ฒฝ ๊ตฌ์„ฑ์„ ํ•ด ์ค€ ๊ฒƒ์ด์—์š”.

 

package.json

์™„๋ฃŒ๊ฐ€ ๋˜๋ฉด ์œ„์™€ ๊ฐ™์ด `package.json`์ด ๋งŒ๋“ค์–ด์ง€๊ฒŒ ๋˜๋Š”๋ฐ, ์•„์ง ์ถ”๊ฐ€ Package๋ฅผ ์„ค์น˜ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— `dependency` ๊ด€๋ จ ๋‚ด์šฉ์€ ์—†๋Š” ๊ฒƒ์ด์—์š”.

 

        ๐Ÿ“ฆ Express.js ์„ค์น˜

๋ช…๋ น์–ด

npm install express --save
npm i express --save

`Express.js`๋ฅผ ์„ค์น˜ํ•  ๋• ์œ„์˜ ๋‘๊ฐ€์ง€ ์ค‘ ํ•œ ๊ฐ€์ง€ ๋ช…๋ น์„ ์“ฐ๋ฉด ๋˜๋Š”๋ฐ, `i`์™€ `install`์˜ ์ฐจ์ด๋Š” ๊ทธ๋ƒฅ `i`๋กœ ์งง๊ฒŒ ์“ด ๊ฒƒ์ด์—์š”.

๋˜ํ•œ, `--save` Option์€ ์šฐ๋ฆฌ๊ฐ€ Git์„ ์ด์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ๋ฅผ ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ๋‚˜์ค‘์— Package ๋“ค์„ ์„ค์น˜ํ•˜๊ฒŒ ๋˜๋ฉด ๋งŒ๋“ค์–ด์งˆ `node_modules`๋ผ๋Š” Directory ์ฆ‰, ์•„๋ž˜ `Spring` ๊ฐ™์ด Package๋‚˜ Library๋ฅผ ๋ณด๊ด€ํ•˜๋Š” Repository์— ๋งŽ์€ ๊ฒƒ๋“ค์ด ๋งŒ๋“ค์–ด์ง€๋Š”๋ฐ, ์ด๊ฒƒ์„ Git์— ์˜ฌ๋ฆฌ๋ฉด ํšจ์œจ์„ฑ์ด ๋–จ์–ด์ง€๋‹ˆ `.gitignore`์— `node_modules`๋ฅผ ๋“ฑ๋กํ•˜๊ณ , ์ฐจ ํ›„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด๋‚˜, ๋‚ด๊ฐ€ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์—์„œ ํ•ด๋‹น Project๋ฅผ ๋‚ด๋ ค ๋ฐ›์•˜์„ ๋•Œ, `$ npm install` ๋ช…๋ น์–ด ํ•˜๋‚˜๋กœ `package.json`์— `dependency`๋กœ ์ž‘์„ฑ๋œ ํ™˜๊ฒฝ ๊ตฌ์„ฑ์„ ๋‹ค์‹œ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•œ Option์ธ ๊ฒƒ์ด์—์š”.

 

Spring์˜ Library Repository

.m2 Directory

 

 

npm i express --save

์œ„์™€ ๊ฐ™์ด `package.json`์— `dependencies`๋กœ `Express.js`์ด ์ถ”๊ฐ€ ๋˜์—ˆ๊ณ , `node_modules` Directory๊ฐ€ ๋งŒ๋“ค์–ด ์ง„ ๊ฒƒ์ด์—์š”.

 

 

        ๐Ÿ“ฆ Express.js ๋™์ž‘ ํ™•์ธ

`Express.js`๊ฐ€ ์„ค์น˜ ๋˜์—ˆ์œผ๋‹ˆ Server๋ฅผ ์‹คํ–‰์‹œ์ผœ ์ž˜ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธ ํ•ด๋ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

์ตœ์ดˆ `app.js`(JAVA์˜ Main()์ด ์žˆ๋Š” Class์™€ ๋น„์Šท)๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ๋ฅผ ๋„ฃ์–ด ๋ณผ ๊ฒƒ์ด์—์š”.

`app.js`๋Š” ํ•ด๋‹น ํ”„๋กœ์ ํŠธ Direcotry ์ตœ์ƒ์œ„์— ๋งŒ๋“ค์–ด์ค˜์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์žŠ์œผ๋ฉด ์•ˆ๋˜๋Š” ๊ฒƒ์ด์—์š”.

 

app.js ๋งŒ๋“ค๊ธฐ

 

app.js

`app.js`๋ฅผ ์œ„์™€ ๊ฐ™์ด ์ž‘์„ฑํ•˜๊ณ , ๋ฐ˜๋“œ์‹œ ์ €์žฅ์„ ํ•ด์ค˜์•ผ ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

๊ทธ๋Ÿฐ ๋’ค ์ด์ œ ์‹คํ–‰์„ ์‹œ์ผœ๋ณผ ๊ฒƒ์ธ๋ฐ, ์•„๋ž˜ ๋ฐฉ๋ฒ•์œผ๋กœ Server๋ฅผ ๊ตฌ๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

๋ช…๋ น์–ด

node app.js
๋ฐ˜์‘ํ˜•

 

์œ„์™€ ๊ฐ™์ด `$node` ๋ช…๋ น์–ด๋ฅผ ์จ๋„ ๋˜์ง€๋งŒ, ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด Code๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด Server๋ฅผ ๋‚ด๋ ธ๋‹ค๊ฐ€ ๋‹ค์‹œ `$node` ๋ช…๋ น์–ด๋กœ ๊ตฌ๋™ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด์—์š”.

๊ทธ๋ž˜์„œ ์ฃผ๋‹ˆํ•˜๋ž‘์€ `nodemon`์„ ์„ค์น˜ํ•ด์„œ ๊ตฌ๋™ํ•ด ๋ณผ ๊ฒƒ์ด์—์š”.

 

์„ค์น˜ ๋ช…๋ น์–ด

npm i nodemon --save

 

nodemon ์„ค์น˜

 

 

์„œ๋ฒ„ ๊ตฌ๋™ ๋ช…๋ น์–ด

nodemon app.js

nodemon์„ ์ด์šฉํ•œ Server ๊ธฐ๋™

Server๊ฐ€ ์•„์ฃผ ์ž˜ ๊ตฌ๋™๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

Browser๋ฅผ ํ†ตํ•ด ํ™•์ธ ํ•ด ๋ณด์•„๋„ ์•„์ฃผ ์ž˜ ๊ตฌ๋™๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

๋‹ค์Œ Posting์—์„œ๋Š” DB๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ณต๋ถ€ ํ•ด ๋ณด๊ณ , ๊ณต์œ ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

 

 

 

์ฐธ๊ณ  ์ž๋ฃŒ : [Node.js] Express + MySQL๋กœ REST API ๋งŒ๋“ค๊ธฐ (1)

 

 

 

 

 

 

 

 

 

 

728x90
๋ฐ˜์‘ํ˜•