Back-End ์ž‘์—…์‹ค/Nest.js

[Nest.js] JWT๋ฅผ ์ด์šฉํ•œ ์ธ์ฆ, ์ธ๊ฐ€ ๊ทธ๋ฆฌ๊ณ  Multi part ์ด์•ผ๊ธฐ - โ‘  ์ดˆ๊ธฐ๊ตฌ์„ฑ

์ฃผ๋‹ˆ์“ฐ๐Ÿง‘‍๐Ÿ’ป 2024. 1. 14. 17:35
728x90
๋ฐ˜์‘ํ˜•

 

 

์นด์นด์˜คํŽ˜์ด | ๋งˆ์Œ ๋†“๊ณ  ๊ธˆ์œตํ•˜๋‹ค

์—ฌ๊ธฐ๋ฅผ ๋ˆŒ๋Ÿฌ ๋งํฌ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

qr.kakaopay.com

 

 

 

 

 

"์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค."

 

 

 

๊ด€๋ จ ์†Œ์Šค ์ฝ”๋“œ:

 

GitHub - junyharang/nestTs-jwt-multer: Nest.ts๋ฅผ ์ด์šฉํ•œ JWT ์ธ์ฆ, ์ธ๊ฐ€์™€ ํŒŒ์ผ ์ฒ˜๋ฆฌ ์—ฐ์Šต

Nest.ts๋ฅผ ์ด์šฉํ•œ JWT ์ธ์ฆ, ์ธ๊ฐ€์™€ ํŒŒ์ผ ์ฒ˜๋ฆฌ ์—ฐ์Šต. Contribute to junyharang/nestTs-jwt-multer development by creating an account on GitHub.

github.com

 




๐Ÿ—‚ ๋ชฉ์ฐจ

โœ… [Nest.js] JWT๋ฅผ ์ด์šฉํ•œ ์ธ์ฆ, ์ธ๊ฐ€ ๊ทธ๋ฆฌ๊ณ  Multi part ์ด์•ผ๊ธฐ - โ‘  ์ดˆ๊ธฐ๊ตฌ์„ฑ
โœ… [Nest.js] JWT๋ฅผ ์ด์šฉํ•œ ์ธ์ฆ, ์ธ๊ฐ€ ๊ทธ๋ฆฌ๊ณ  Multi part ์ด์•ผ๊ธฐ - โ‘ก ํšŒ์›๊ฐ€์ž…๊ณผ ์ธ์ฆ(feat. Access Token & Refresh Token)
โœ… [Nest.js] JWT๋ฅผ ์ด์šฉํ•œ ์ธ์ฆ, ์ธ๊ฐ€ ๊ทธ๋ฆฌ๊ณ  Multi part ์ด์•ผ๊ธฐ - โ‘ข Multer๋ฅผ ์ด์šฉํ•œ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ
โœ… 

 

 

 

 

NestJS๋กœ ๋ฐฐ์šฐ๋Š” ๋ฐฑ์—”๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ:ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํ™˜๊ฒฝ์˜ ์ฐจ์„ธ๋Œ€ ์„œ๋ฒ„ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋งŒ๋‚˜๋‹ค

COUPANG

www.coupang.com

"์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค."

 

 

 

 

๐Ÿš€ JWT๋ฅผ ์ด์šฉํ•œ ์ธ์ฆ, ์ธ๊ฐ€ ๊ทธ๋ฆฌ๊ณ  Multi part ์ด์•ผ๊ธฐ

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

        ๐Ÿ“ฆ ๊ฐœ์š”

์ด๋ฒˆ ๊ธ€์€ Nest.ts(Type Script & Nest.js)๋ฅผ ์ด์šฉํ•œ Back-end ๊ตฌ์„ฑ์—์„œ JWT(Json Web Token)๋ฅผ ์ด์šฉํ•˜์—ฌ ์ธ์ฆ, ์ธ๊ฐ€ ๊ทธ๋ฆฌ๊ณ  Multi part๋ฅผ ์ด์šฉํ•œ File(ํŒŒ์ผ) ์ฒ˜๋ฆฌ์— ๋Œ€ํ•ด ์‹ค์Šตํ•ด ๋ณด๋ ค๊ณ  ํ•ด์š”.

Nest.js๋Š” ๋ฌด์—‡์ธ์ง€์— ๋Œ€ํ•ด ๊ถ๊ธˆํ•˜์‹ ๊ฐ€์š”? ๊ทธ๋ ‡๋‹ค๋ฉด ์ด ๊ณณ์— ๊ด€์‹ฌ์„ ์ฃผ์„ธ์š”.

 

[Nest.js] ๊ฐœ๋… ์ •๋ฆฌ

์นด์นด์˜คํŽ˜์ด | ๋งˆ์Œ ๋†“๊ณ  ๊ธˆ์œตํ•˜๋‹ค ์—ฌ๊ธฐ๋ฅผ ๋ˆŒ๋Ÿฌ ๋งํฌ๋ฅผ ํ™•์ธํ•˜์„ธ์š”. qr.kakaopay.com "์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค." ๐Ÿš€ ๊ฐœ๋… ์ •๋ฆฌ ๐Ÿ”ฝ Back

junyharang.tistory.com


์ด๋ฒˆ ์‹ค์Šต์—์„œ๋Š” ๊ตฌ์ฒด์ ์œผ๋กœ JWT๋ฅผ ์ด์šฉํ•œ ์ธ์ฆ, ์ธ๊ฐ€์™€ ๋‘ ๊ฐœ์˜ ๊ฒŒ์‹œํŒ API๋ฅผ ๋งŒ๋“ค์–ด Multi part๋ฅผ ์ด์šฉํ•ด์„œ ํŒŒ์ผ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” API๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๋ ค๊ณ ํ•ด์š”.






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

        ๐Ÿ“ฆ ์‹ค์Šต ํ™˜๊ฒฝ

๐Ÿ” MacOS (M3 MacBook Pro Sonoma 14.2.1)
๐Ÿ” TypeScript
๐Ÿ” Nest.js
๐Ÿ” Embedded SQLite DBMS
๐Ÿ” MariaDB 10.11.2
๐Ÿ” TypeORM 0.3.19
๐Ÿ” InteliJ (2023.2.5 Ultimate)

 

 

 

 

        ๐Ÿ“ฆ ์†Œ๊ฐœ

์ฃผ๋‹ˆ๋Š” ์ด ์ „์— Nest.js๋ฅผ ์ด์šฉํ•˜์—ฌ GraphQL(๊ทธ๋ž˜ํ”„ํ์—˜)์„ ์‹ค์Šตํ•ด ๋ณธ ์ ์ด ์žˆ์–ด์š”.

 

[Nest.js] ์ดˆ๊ธฐ ํ™˜๊ฒฝ ๊ตฌ์„ฑ (feat. TypeORM, QueryBuilder, GraphQL, Apollo)

์นด์นด์˜คํŽ˜์ด | ๋งˆ์Œ ๋†“๊ณ  ๊ธˆ์œตํ•˜๋‹ค ์—ฌ๊ธฐ๋ฅผ ๋ˆŒ๋Ÿฌ ๋งํฌ๋ฅผ ํ™•์ธํ•˜์„ธ์š”. qr.kakaopay.com ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ:์Šคํ”„๋ง ๋ฐ์ดํ„ฐ ์˜ˆ์ œ ํ”„๋กœ์ ํŠธ๋กœ ๋ฐฐ์šฐ๋Š” ์ „์ž์ •๋ถ€ ํ‘œ์ค€ ๋ฐ์ดํ„ฐ๋ฒ ์ด COUPANG www.coupang.com

junyharang.tistory.com


์ด ๋•Œ ๊ตฌ์„ฑํ–ˆ๋˜ ๋ฐฉ๋ฒ•๋“ค์„ ์ด์šฉํ•˜์—ฌ ๋‹ค์‹œ Project(ํ”„๋กœ์ ํŠธ) ๊ธฐ๋ณธ ๊ตฌ์„ฑ์„ ์ง„ํ–‰ํ•˜๊ณ , ์ถ”๊ฐ€์ ์œผ๋กœ ํ•„์š”ํ•œ ๊ฒƒ๋“ค์„ ์ด์šฉํ•ด ๋ณด๋ ค๊ณ  ํ•ด์š”.





        ๐Ÿ“ฆ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ

์ฃผ๋‹ˆ๋Š” InteliJ๋ฅผ ์ด์šฉํ•˜์—ฌ Nest.js ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ์„ ์ง„ํ–‰ํ•ด ๋ณผ๊ฒŒ์š”.

์ตœ์ดˆ NVM, Node.js, NPM์„ ์„ค์น˜ํ•ด ์ฃผ์–ด์•ผ ํ•ด์š”.

์ด ๋‚ด์šฉ์— ๋Œ€ํ•ด์„œ๋Š” ์ด ๊ณณ์— ๊ด€์‹ฌ์„ ์ฃผ์„ธ์š”.

 

[M1 Mac] NVM, Node.js, NPM ์„ค์น˜

COUPANG ์ฟ ํŒก์€ ๋กœ์ผ“๋ฐฐ์†ก www.coupang.com "์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค." ๐Ÿš€ NVM, Node.js, NPM ์„ค์น˜ ๐Ÿ”ฝ M1 Macbook ๐Ÿ“ฆ ์„ค์น˜ ๋ฐ ๊ตฌ์„ฑ ์ตœ์ดˆ Homebrew

junyharang.tistory.com

 

์œ„์˜ ๋‚ด์šฉ๋“ค์„ ํ•˜๋ฉด์„œ ๋ช‡๊ฐ€์ง€ ์ถ”๊ฐ€๋˜๋Š” ๋ถ€๋ถ„๋งŒ ์ด ๊ณณ์— ์ •๋ฆฌํ•ด ๋ณด๋„๋ก ํ• ๊ฒŒ์š”.

์ด๋ฒˆ์— ํ•  ์ž‘์—…์€ Local(๋กœ์ปฌ), Development(๊ฐœ๋ฐœ), Production(์šด์˜) ๋“ฑ์˜ ๊ฐ๊ฐ์˜ ํ™˜๊ฒฝ์„ ๋‚˜๋ˆ„๊ณ , ๊ฑฐ๊ธฐ์— ๋งž๋Š” Database(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋“ฑ์˜ ํ™˜๊ฒฝ์„ ๋‚˜๋ˆ„๋Š” ์ž‘์—…์„ ํ•ด๋ณด๋ ค๊ณ  ํ•ด์š”.

Nest.js์—์„œ๋Š” @nestjs/config package(ํŒจํ‚ค์ง€)๋ฅผ ํ†ตํ•ด ํ™˜๊ฒฝ์— ๋งž๋Š” env ํŒŒ์ผ์„ Load(๋กœ๋“œ)ํ•˜๋Š” Config Module์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์–ด์š”.

npm i -D @nestjs/config

 

npm i config



npm i @types/config



npm i -D corss-env

728x90

npm i fs js-yaml path



config/environment/.env.local.yml

 

config/environment/.env.dev.yml


์œ„์™€ ๊ฐ™์ด ๊ฐ๊ฐ์˜ ํ™˜๊ฒฝ์— ๋”ฐ๋ฅธ ๊ฐ’๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” yaml ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค.


config/environment/configuration.ts


์ด์ œ ์œ„ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ํ™˜๊ฒฝ ์„ค์ • ํŒŒ์ผ (.env.local.yml, .env.dev.yml, .env.prod.yml)์„ ์ฝ์–ด ๋“œ๋ฆฌ๊ณ ,
ํ•ด๋‹น ์„ค์ •์„ ๋ฐ˜ํ™˜ํ•˜๋Š” Function(ํ•จ์ˆ˜)์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ๊ฒŒ์š”.

์ตœ์ดˆ 8๋ฒˆ์งธ ์ค„์„ ํ†ตํ•ด ํ˜„์žฌ ๊ตฌ๋™ ํ™˜๊ฒฝ์ด ๋กœ์ปฌ, ๊ฐœ๋ฐœ, ์šด์˜ ํ™˜๊ฒฝ ์ค‘ ํ•˜๋‚˜์ธ์ง€๋ฅผ ํ™•์ธํ•˜๊ณ ,
ํ•ด๋‹นํ•˜์ง€ ์•Š์œผ๋ฉด assert()๋ฅผ ํ†ตํ•ด Exception์ด ํ„ฐ์ง€๋„๋ก ํ•ด ์ฃผ์—ˆ์–ด์š”.

10๋ฒˆ์งธ ์ค„์€ join()์„ ์ด์šฉํ•˜์—ฌ ํ˜„์žฌ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ ์ฆ‰ ํ”„๋กœ์ ํŠธ Root Dirctory๋ฅผ ๊ธฐ์ค€์œผ๋กœ(process.cwd()), common/config/environment ์•ˆ์— ์žˆ๋Š” ์„ค์ • ํŒŒ์ผ(.yml) ๊ฒฝ๋กœ๋ฅผ ์ƒ์„ฑํ•ด ์ฃผ์—ˆ์–ด์š”.
๊ทธ๋Ÿฐ ๋’ค ํ•ด๋‹น ๊ฒฝ๋กœ ๊ฐ’์„ configFilePath ์ƒ์ˆ˜ ๋ณ€์ˆ˜์— ๋„ฃ์–ด์ฃผ์—ˆ์–ด์š”.

12๋ฒˆ์งธ ์ค„์€ readFileSync()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ .yml ํŒŒ์ผ์„ ๋™๊ธฐ์ ์œผ๋กœ ์ฝ๊ณ , yaml.load()๋กœ ์„ค์ •๊ฐ’๋“ค์„ Parsing(ํŒŒ์‹ฑ)ํ•˜๋„๋ก ํ•ด ์ฃผ์—ˆ๋Š”๋ฐ, ์ด ๋•Œ, ๋ฐ˜ํ™˜๋œ .yml์˜ Data(๋ฐ์ดํ„ฐ)๋Š” Record<String, any> ํ˜•ํƒœ๋กœ
Casting(์บ์ŠคํŒ… - ์ž๋ฃŒํ˜• ๋ณ€ํ™˜) ๋˜๋„๋ก ํ•ด ์ฃผ์—ˆ์–ด์š”.

13๋ฒˆ์งธ ์ค„์—์„œ๋Š” environmentConfig ๊ฐ์ฒด์— server Property(ํ”„๋กœํผํ‹ฐ)์— environment ํ”„๋กœํผํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ ,
ํ•ด๋‹น ๊ฐ’์€ ๊ตฌ๋™๋˜๋Š” ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๊ฒฐ์ •๋˜๋„๋ก ์„ค์ •ํ•ด ์ค€ ๋ถ€๋ถ„์ด์—์š”.

๋งˆ์ง€๋ง‰์œผ๋กœ 15๋ฒˆ์งธ ์ค„์— ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š”๋ฐ, ํŒŒ์‹ฑ๋œ .yml ๋ฐ์ดํ„ฐ์™€ ์ถ”๊ฐ€๋กœ ์„ค์ •๋œ server.environment ๊ฐ’์„ ํฌํ•จํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•ด ์ฃผ์—ˆ์–ด์š”.

์œ„ ์ฝ”๋“œ๋Š” ํ™˜๊ฒฝ ์„ค์ •์„ Load(๋กœ๋“œ)ํ•˜๊ณ , ๊ฐ ์„ค์ • ํŒŒ์ผ์— ๋”ฐ๋ผ ์„œ๋ฒ„ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋‚ด์šฉ์ด์—์š”.
ํŠนํžˆ ์„œ๋ฒ„ ํ™˜๊ฒฝ์€ environmentConfig.server.environment์— ์ €์žฅ๋˜์–ด ์žฌ์‚ฌ์šฉ ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ด ์ฃผ์—ˆ์–ด์š”.


src/app.module.ts

์œ„ ์ฝ”๋“œ๋Š” Nest.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์„ค์ •์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด @nestjs/config ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ถ€๋ถ„์ด์—์š”.

1๋ฒˆ์งธ ์ค„์— @nestjs/config ๋ชจ๋“ˆ์„ Import(์ž„ํฌํŠธ) ํ•ด ์ฃผ๊ณ , ์ด๋ฅผ ํ†ตํ•ด ์„ค์ • ๊ด€๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด ์ฃผ์—ˆ์–ด์š”.

9 ~ 13๋ฒˆ์งธ ์ค„์—์„œ 10๋ฒˆ์งธ ์ค„์€ ์„ค์ •์ด ์บ์‹œ๋˜์–ด ์—ฌ๋Ÿฌ๋ฒˆ ๋กœ๋“œ๋˜์ง€ ์•Š๋„๋ก ์„ค์ •ํ•ด ์ค€ ๋ถ€๋ถ„์ด์—์š”.
์ด๋Š” ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ์„ค์ •์ด์—์š”.


11๋ฒˆ์งธ ์ค„์„ true๋กœ ์„ค์ •ํ–ˆ๋‹ค๋Š” ๊ฑด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์—ญ์—์„œ ์„ค์ •์„ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •ํ•˜๋Š” ๋ถ€๋ถ„์ด์—์š”.
์ด ์„ค์ •์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ configModule์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ต๋‹ˆ๋‹ค.

12๋ฒˆ์งธ ์ค„์—๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹œ์ž‘ํ•  ๋•Œ ์„ค์ •์„ ๋กœ๋“œํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ด ๋•Œ ์‚ฌ์šฉํ•  ์„ค์ • Provider(ํ”„๋กœ๋ฐ”์ด๋”)๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ถ€๋ถ„์ด์—์š”. ์œ„์—์„œ ๋งŒ๋“  configuration()์„ ๋ถˆ๋Ÿฌ ์ด ๊ณณ์— ๋„ฃ์–ด์ค€ ๊ฒƒ์ด์—์š”.

์ด ์ฝ”๋“œ๋Š” Nest.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์„ค์ •์„ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์—ญ์—์„œ ์„ค์ •์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑํ•ด ์ค€ ๋ถ€๋ถ„์ด์—์š”. 

src/main.ts

๋ฐ˜์‘ํ˜•


๊ทธ๋Ÿฐ ๋’ค ์œ„์™€ ๊ฐ™์ด main.ts๋ฅผ ๊ตฌ์„ฑํ•ด ์ฃผ์—ˆ๋Š”๋ฐ, ์œ„์—์„œ ๋งŒ๋“  configuration()์„ ํ˜ธ์ถœํ•˜์—ฌ serverConfig ์ƒ์ˆ˜ ๋ณ€์ˆ˜์— ๋‹ด๊ณ , ์ด๋ฅผ ํ†ตํ•ด ํ™˜๊ฒฝ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑํ•ด ์ฃผ์—ˆ์–ด์š”.

package.json


์œ„ npm script(์Šคํฌ๋ฆฝํŠธ)๋Š” Nest.js Application(์• ํ”Œ๋ฆฌ์ผ€์ด์…˜)์„ ๊ฐ๊ฐ์˜ ํ™˜๊ฒฝ์—์„œ ๋นŒ๋“œํ•˜๊ณ , local๊ณผ dev ํ™˜๊ฒฝ์˜ ๊ฒฝ์šฐ Webpack์„ ์‚ฌ์šฉํ•˜์—ฌ Bundling(๋ฒˆ๋“ค๋ง)ํ•˜๋ฉฐ, --watch Option(์˜ต์…˜)์„ ํ†ตํ•ด ํŒŒ์ผ ๋ณ€๊ฒฝ์„ ๊ฐ์ง€ํ•˜์—ฌ ์ž๋™์œผ๋กœ ๋นŒ๋“œํ•˜๋Š” ์—ญํ• ์„ ํ•ด ์ฃผ๋„๋ก ํ•œ ๋ถ€๋ถ„์ด์—์š”.

13๋ฒˆ์งธ ์ค„์— ๋Œ€ํ•ด ๋ถ„์„ํ•ด ๋ณด๋ฉด npm run start:local ๋ช…๋ น์–ด๋ฅผ ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์ž…๋ ฅํ•˜๊ฒŒ ๋˜๋ฉด ๋กœ์ปฌ ํ™˜๊ฒฝ์œผ๋กœ ๊ตฌ๋™๋  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•ด ์ค€ ๋ถ€๋ถ„์ด์—์š”.

cross-env NODE_EVN=local์€ cross-env ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ NODE_ENV๋ฅผ ์„ค์ •ํ•˜๋„๋ก ํ•œ ๋ถ€๋ถ„์ด์—์š”.
์—ฌ๊ธฐ์„œ๋Š” local๋กœ ์„ค์ •๋˜์–ด ๋กœ์ปฌ ํ™˜๊ฒฝ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ๋™ํ•˜๋„๋ก ํ•ด ์ค€ ๋ถ€๋ถ„์ด์—์š”.

nest build๋Š” Nest.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ Build(๋นŒ๋“œ) ๋ช…๋ น์–ด์—์š”. ์ด ๋ช…๋ น์–ด๋Š” src ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ Type Script Code๋ฅผ Compile (์ปดํŒŒ์ผ)ํ•˜์—ฌ dist ๋””๋ ‰ํ„ฐ๋ฆฌ์— Java Script๋กœ Code๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ํ•˜๋Š” ๋ช…๋ น์–ด์—์š”.

--webpack ์˜ต์…˜์€ Nest.js ๋‚ด๋ถ€์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ์ ์ธ Webpack ์„ค์ • ๋Œ€์‹ , ๊ฐœ๋ฐœ์ž ์ •์˜ Webpcak ์„ค์ • ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์˜ต์…˜์ด์—์š”. ์ด ๋•Œ, ๋’ค์— webpack-hmr.config.js ํŒŒ์ผ์„ Webpack ์„ค์ • ํŒŒ์ผ๋กœ ์“ฐ๊ฒ ๋‹ค๋Š” ์˜๋ฏธ์ด๊ณ , webpack-hmr-config.js๋Š” ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์„ค์ •๋œ Webpack ์„ค์ •์„ ์ง€์ •ํ•˜๋Š” ์—ญํ• ์„ ํ•  ๊ฒƒ์ด์—์š”.

--watch ์˜ต์…˜์€ ํŒŒ์ผ์˜ ๋ณ€๊ฒฝ์„ ๊ฐ์ง€ํ•˜์—ฌ ์ž๋™์œผ๋กœ ๋นŒ๋“œํ•˜๋„๋ก ํ•˜๋Š” ์˜ต์…˜์ด์—์š”.
์ด ์˜ต์…˜์ด ํ™œ์„ฑํ™”๋˜๋ฉด ํŒŒ์ผ ๋ณ€๊ฒฝ ์‹œ ์ž๋™์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ Re Build(์žฌ๋นŒ๋“œ) ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ ์ค‘์— ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์ด์—์š”.

๋‹ค๋งŒ, ์ด ๋ถ€๋ถ„์— ์œ ์˜์‚ฌํ•ญ์€ ๋ฐ˜๋“œ์‹œ ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ์ ์šฉ๋˜๋ฉด ์•ˆ๋œ๋‹ค๋Š” ๊ฒƒ์ด์—์š”.

์ด๋ ‡๊ฒŒ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด Nest.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ฐ๊ฐ์˜ ํ™˜๊ฒฝ์— ๋งž์ถฐ ๋นŒ๋“œ๋˜๊ณ , ์ง€์ •๋œ Webpack ์„ค์ •์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฒˆ๋“ค๋ง๋˜๋ฉฐ, ํŒŒ์ผ ๋ณ€๊ฒฝ์„ ๊ฐ์ง€ํ•˜์—ฌ ์ž๋™์„ ๋นŒ๋“œ๋˜๊ฒŒ ๋ผ์š”.

Local ํ™˜๊ฒฝ ๊ตฌ๋™

 

 

NestJS๋กœ ๋ฐฐ์šฐ๋Š” ๋ฐฑ์—”๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ:ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํ™˜๊ฒฝ์˜ ์ฐจ์„ธ๋Œ€ ์„œ๋ฒ„ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋งŒ๋‚˜๋‹ค

COUPANG

www.coupang.com

 



        ๐Ÿ“ฆ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ - mariadb ์—ฐ๊ฒฐ

npm i mysql2 --save



src/app.module.ts


15 ~ 23๋ฒˆ์งธ ์ค„์„ ๋ถ„์„ํ•ด ๋ณผ๊ฒŒ์š”.
์œ„ ๋‚ด์šฉ์€ TypeORM ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ Nest.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์„ ์œ„ํ•œ ์„ค์ • ๋ถ€๋ถ„์ด์—์š”.

15๋ฒˆ์งธ ์ค„์€ TypeOrmModule์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•œ ๋ถ€๋ถ„์ด์—์š”.

16๋ฒˆ์งธ ์ค„์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์œ ํ˜•์„ ์„ค์ •ํ•˜๋Š” ๋ถ€๋ถ„์œผ๋กœ configuration()์— ๊ตฌํ˜„๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ • ๋ถ€๋ถ„์ค‘ type ๋‚ด์šฉ์„ ๊ฐ€์ ธ์˜ค๋„๋ก ํ•ด ์ค€ ๋ถ€๋ถ„์ด์—์š”.

17๋ฒˆ์งธ ์ค„์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ˜ธ์ŠคํŠธ ์„ค์ • ๋ถ€๋ถ„์ด์—์š”.

18๋ฒˆ์งธ ์ค„์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ด๋ฆ„ ์„ค์ • ๋ถ€๋ถ„์ด์—์š”.

19๋ฒˆ์งธ ์ค„์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„ ํฌํŠธ ์„ค์ • ๋ถ€๋ถ„์ด์—์š”.

20๋ฒˆ์งธ ์ค„์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ณ„์ •์˜ ID๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ถ€๋ถ„์ด์—์š”.

21๋ฒˆ์งธ ์ค„์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ณ„์ •์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ถ€๋ถ„์ด์—์š”.

22๋ฒˆ์งธ ์ค„์€ Entity(์—”ํ‹ฐํ‹ฐ) ์„ค์ • ๋ถ€๋ถ„์œผ๋กœ TypeORM์ด ์ฐธ์กฐํ•  ์—”ํ‹ฐํ‹ฐ๋“ค์˜ ๊ฒฝ๋กœ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ถ€๋ถ„์ด์—์š”.
์ด ๋ถ€๋ถ„์—์„œ __dirname์€ ํ˜„์žฌ ํŒŒ์ผ์ด ์†ํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ถ€๋ถ„์ด๊ณ , ๊ทธ ๋’ค์— ๋‚ด์šฉ์€ ํ•ด๋‹น ๋””๋ ‰ํ„ฐ๋ฆฌ์™€ ํ•˜์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์žˆ๋Š” ๋ชจ๋“  ํŒŒ์ผ ์ค‘ *.entity.ts ๋˜๋Š” *.entity.js๋กœ ๋๋‚˜๋Š” ํŒŒ์ผ๋“ค์„ ์—”ํ‹ฐํ‹ฐ๋กœ ์ธ์‹ํ•˜๋ผ๊ณ  ํ•ด ์ค€ ๋ถ€๋ถ„์ด์—์š”.

์œ„ ์„ค์ •์„ ํ†ตํ•ด TypeORM์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ง€์ •๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•˜๊ณ , ์„ค์ •๋œ ์—”ํ‹ฐํ‹ฐ๋“ค์„ ์ธ์‹ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด ์ฃผ๋Š” ๋ถ€๋ถ„์ด์—์š”.

์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ TypeORM์€ ์„ค์ •๊ณผ ์—”ํ‹ฐํ‹ฐ๋“ค์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ํ†ตํ•ฉ์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.


 

 

Dev ํ™˜๊ฒฝ ๊ตฌ๋™


๊ฐœ๋ฐœ ํ™˜๊ฒฝ์˜ Database ๋‚ด์— test DB๋ฅผ ์•„์ง ์•ˆ ๋งŒ๋“ค์–ด์„œ ์ฐพ์„ ์ˆ˜ ์—†์–ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฑฐ์—์š”.
์ฆ‰, ์„ค์ •์€ ์ž˜ ๋˜์—ˆ๋‹ค๋Š” ์˜๋ฏธ์—์š”.


test DB๋ฅผ ๋งŒ๋“ค๊ณ  ๋‚˜์„œ ๋‹ค์‹œ ๊ธฐ๋™ํ•ด ๋ณผ๊ฒŒ์š”.


nrpm run start:dev


์ž˜ ๊ธฐ๋™ ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.

 

 

 

        ๐Ÿ“ฆ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ - Swagger ์„ค์ •

Swagger ์„ค์ • ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ๋Š” ์ด ์ „์— ์ž‘์„ฑํ–ˆ๋˜ ์ด ๊ณณ์— ๊ด€์‹ฌ์„ ์ฃผ์„ธ์š”.

 

[BackEnd][Node.js][nest.js-PJ] ์‚ฌ๋‚ด ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ ์„œ๋น„์Šค - ์ดˆ๊ธฐ ๊ตฌ์„ฑ(Pipe, TypeORM, Configuration, Swagger, Lo

Project Git Hub ๐Ÿ—‚ ๋ชฉ์ฐจ โ— [BackEnd][Node.js][nest.js-PJ] ์‚ฌ๋‚ด ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ ์„œ๋น„์Šค - ์ดˆ๊ธฐ ๊ตฌ์„ฑ(Pipe, TypeORM, Configuration, Swagger, Logger) โ— [BackEnd][Node.js][Nest.js] ์‚ฌ๋‚ด ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ ์„œ๋น„์Šค - ํšŒ์› ๊ฐ€์ž…

junyharang.tistory.com

 

Local ํ™˜๊ฒฝ

 

Dev ํ™˜๊ฒฝ



 

 

        ๐Ÿ“ฆ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ - JWT Package ์„ค์น˜

npm i @nestjs/jwt --save

 

 

 

 

        ๐Ÿ“ฆ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ - Multer Package ์„ค์น˜

npm i @types/multer --save

 

์ด๋ ‡๊ฒŒ ์‹ค์Šตํ•ด ๋ณผ ๋‚ด์šฉ์— ๋Œ€ํ•ด ๋ฏธ๋ฆฌ ์ค€๋น„ํ•ด ๋ณด์•˜์–ด์š”.
์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ ๋‹ค์Œ ๊ธ€๋ถ€ํ„ฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์ง„ํ–‰ํ•ด ๋ณผ๊ฒŒ์š”.

 

 

๊ด€๋ จ ์†Œ์Šค ์ฝ”๋“œ:

 

GitHub - junyharang/nestTs-jwt-multer: Nest.ts๋ฅผ ์ด์šฉํ•œ JWT ์ธ์ฆ, ์ธ๊ฐ€์™€ ํŒŒ์ผ ์ฒ˜๋ฆฌ ์—ฐ์Šต

Nest.ts๋ฅผ ์ด์šฉํ•œ JWT ์ธ์ฆ, ์ธ๊ฐ€์™€ ํŒŒ์ผ ์ฒ˜๋ฆฌ ์—ฐ์Šต. Contribute to junyharang/nestTs-jwt-multer development by creating an account on GitHub.

github.com

 

 

 

"์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค."

 

 

 

 

์นด์นด์˜คํŽ˜์ด | ๋งˆ์Œ ๋†“๊ณ  ๊ธˆ์œตํ•˜๋‹ค

์—ฌ๊ธฐ๋ฅผ ๋ˆŒ๋Ÿฌ ๋งํฌ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

qr.kakaopay.com

 

 

 

728x90
๋ฐ˜์‘ํ˜•