[Nest.js] JWT๋ฅผ ์ด์ฉํ ์ธ์ฆ, ์ธ๊ฐ ๊ทธ๋ฆฌ๊ณ Multi part ์ด์ผ๊ธฐ - โ ์ด๊ธฐ๊ตฌ์ฑ
"์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค."
๐ ๋ชฉ์ฐจ
โ
[Nest.js] JWT๋ฅผ ์ด์ฉํ ์ธ์ฆ, ์ธ๊ฐ ๊ทธ๋ฆฌ๊ณ Multi part ์ด์ผ๊ธฐ - โ ์ด๊ธฐ๊ตฌ์ฑ
โ
[Nest.js] JWT๋ฅผ ์ด์ฉํ ์ธ์ฆ, ์ธ๊ฐ ๊ทธ๋ฆฌ๊ณ Multi part ์ด์ผ๊ธฐ - โก ํ์๊ฐ์
๊ณผ ์ธ์ฆ(feat. Access Token & Refresh Token)
โ
[Nest.js] JWT๋ฅผ ์ด์ฉํ ์ธ์ฆ, ์ธ๊ฐ ๊ทธ๋ฆฌ๊ณ Multi part ์ด์ผ๊ธฐ - โข Multer๋ฅผ ์ด์ฉํ ์ด๋ฏธ์ง ์ฒ๋ฆฌ
โ
"์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค."
๐ JWT๋ฅผ ์ด์ฉํ ์ธ์ฆ, ์ธ๊ฐ ๊ทธ๋ฆฌ๊ณ Multi part ์ด์ผ๊ธฐ
๐ฝ โ ์ด๊ธฐ๊ตฌ์ฑ
๐ฆ ๊ฐ์
์ด๋ฒ ๊ธ์ Nest.ts(Type Script & Nest.js)๋ฅผ ์ด์ฉํ Back-end ๊ตฌ์ฑ์์ JWT(Json Web Token)๋ฅผ ์ด์ฉํ์ฌ ์ธ์ฆ, ์ธ๊ฐ ๊ทธ๋ฆฌ๊ณ Multi part๋ฅผ ์ด์ฉํ File(ํ์ผ) ์ฒ๋ฆฌ์ ๋ํด ์ค์ตํด ๋ณด๋ ค๊ณ ํด์.
Nest.js๋ ๋ฌด์์ธ์ง์ ๋ํด ๊ถ๊ธํ์ ๊ฐ์? ๊ทธ๋ ๋ค๋ฉด ์ด ๊ณณ์ ๊ด์ฌ์ ์ฃผ์ธ์.
์ด๋ฒ ์ค์ต์์๋ ๊ตฌ์ฒด์ ์ผ๋ก 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(๊ทธ๋ํํ์)์ ์ค์ตํด ๋ณธ ์ ์ด ์์ด์.
์ด ๋ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ๋ค์ ์ด์ฉํ์ฌ ๋ค์ Project(ํ๋ก์ ํธ) ๊ธฐ๋ณธ ๊ตฌ์ฑ์ ์งํํ๊ณ , ์ถ๊ฐ์ ์ผ๋ก ํ์ํ ๊ฒ๋ค์ ์ด์ฉํด ๋ณด๋ ค๊ณ ํด์.
๐ฆ ํ๋ก์ ํธ ๊ตฌ์ฑ
์ฃผ๋๋ InteliJ๋ฅผ ์ด์ฉํ์ฌ Nest.js ํ๋ก์ ํธ ๊ตฌ์ฑ์ ์งํํด ๋ณผ๊ฒ์.
์ต์ด NVM, Node.js, NPM์ ์ค์นํด ์ฃผ์ด์ผ ํด์.
์ด ๋ด์ฉ์ ๋ํด์๋ ์ด ๊ณณ์ ๊ด์ฌ์ ์ฃผ์ธ์.
์์ ๋ด์ฉ๋ค์ ํ๋ฉด์ ๋ช๊ฐ์ง ์ถ๊ฐ๋๋ ๋ถ๋ถ๋ง ์ด ๊ณณ์ ์ ๋ฆฌํด ๋ณด๋๋ก ํ ๊ฒ์.
์ด๋ฒ์ ํ ์์
์ Local(๋ก์ปฌ), Development(๊ฐ๋ฐ), Production(์ด์) ๋ฑ์ ๊ฐ๊ฐ์ ํ๊ฒฝ์ ๋๋๊ณ , ๊ฑฐ๊ธฐ์ ๋ง๋ Database(๋ฐ์ดํฐ๋ฒ ์ด์ค)๋ฅผ ์ฌ์ฉํ๋ ๋ฑ์ ํ๊ฒฝ์ ๋๋๋ ์์
์ ํด๋ณด๋ ค๊ณ ํด์.
Nest.js์์๋ @nestjs/config package(ํจํค์ง)๋ฅผ ํตํด ํ๊ฒฝ์ ๋ง๋ env ํ์ผ์ Load(๋ก๋)ํ๋ Config Module์ ์ ๊ณตํ๊ณ ์์ด์.
์์ ๊ฐ์ด ๊ฐ๊ฐ์ ํ๊ฒฝ์ ๋ฐ๋ฅธ ๊ฐ๋ค์ ๊ฐ์ง๊ณ ์๋ yaml ํ์ผ์ ๋ง๋ค์ด ์ค๋๋ค.
์ด์ ์ ์ฝ๋๋ฅผ ํตํด ํ๊ฒฝ ์ค์ ํ์ผ (.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์ ์ ์ฅ๋์ด ์ฌ์ฌ์ฉ ๋ ์ ์๋๋ก ํด ์ฃผ์์ด์.
์ ์ฝ๋๋ Nest.js ์ ํ๋ฆฌ์ผ์ด์
์์ ์ค์ ์ ๋ค๋ฃจ๊ธฐ ์ํด @nestjs/config ๋ชจ๋์ ์ฌ์ฉํ๋ ๋ถ๋ถ์ด์์.
1๋ฒ์งธ ์ค์ @nestjs/config ๋ชจ๋์ Import(์ํฌํธ) ํด ์ฃผ๊ณ , ์ด๋ฅผ ํตํด ์ค์ ๊ด๋ฆฌ๋ฅผ ํ ์ ์๋๋ก ํด ์ฃผ์์ด์.
9 ~ 13๋ฒ์งธ ์ค์์ 10๋ฒ์งธ ์ค์ ์ค์ ์ด ์บ์๋์ด ์ฌ๋ฌ๋ฒ ๋ก๋๋์ง ์๋๋ก ์ค์ ํด ์ค ๋ถ๋ถ์ด์์.
์ด๋ ์ฑ๋ฅ ํฅ์์ ํ ์ ์๋ ์ค์ ์ด์์.
11๋ฒ์งธ ์ค์ true๋ก ์ค์ ํ๋ค๋ ๊ฑด ์ ํ๋ฆฌ์ผ์ด์
์ ์ญ์์ ์ค์ ์ ์ฌ์ฉํ๋๋ก ์ค์ ํ๋ ๋ถ๋ถ์ด์์.
์ด ์ค์ ์ ์ฌ์ฉํ๋ฉด ๋ค๋ฅธ ๋ชจ๋์์ configModule์ ์ถ๊ฐํ์ง ์์๋ ๋๋ต๋๋ค.
12๋ฒ์งธ ์ค์๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์์ํ ๋ ์ค์ ์ ๋ก๋ํ๊ฒ ๋๋๋ฐ, ์ด ๋ ์ฌ์ฉํ ์ค์ Provider(ํ๋ก๋ฐ์ด๋)๋ฅผ ์ ๊ณตํ๋ ๋ถ๋ถ์ด์์. ์์์ ๋ง๋ configuration()์ ๋ถ๋ฌ ์ด ๊ณณ์ ๋ฃ์ด์ค ๊ฒ์ด์์.
์ด ์ฝ๋๋ Nest.js ์ ํ๋ฆฌ์ผ์ด์
์์ ์ค์ ์ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ , ์ ํ๋ฆฌ์ผ์ด์
์ ์ญ์์ ์ค์ ์ ์ฌ์ฉํ ์ ์๋๋ก ๊ตฌ์ฑํด ์ค ๋ถ๋ถ์ด์์.
๊ทธ๋ฐ ๋ค ์์ ๊ฐ์ด main.ts๋ฅผ ๊ตฌ์ฑํด ์ฃผ์๋๋ฐ, ์์์ ๋ง๋ configuration()์ ํธ์ถํ์ฌ serverConfig ์์ ๋ณ์์ ๋ด๊ณ , ์ด๋ฅผ ํตํด ํ๊ฒฝ ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์๋๋ก ๊ตฌ์ฑํด ์ฃผ์์ด์.
์ 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 ์ค์ ์ ์ฌ์ฉํ์ฌ ๋ฒ๋ค๋ง๋๋ฉฐ, ํ์ผ ๋ณ๊ฒฝ์ ๊ฐ์งํ์ฌ ์๋์ ๋น๋๋๊ฒ ๋ผ์.
๐ฆ ํ๋ก์ ํธ ๊ตฌ์ฑ - mariadb ์ฐ๊ฒฐ
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์ ์ค์ ๊ณผ ์ํฐํฐ๋ค์ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํตํฉ์ ๊ฐํธํ๊ฒ ์ํํ ์ ์๋ต๋๋ค.
๊ฐ๋ฐ ํ๊ฒฝ์ Database ๋ด์ test DB๋ฅผ ์์ง ์ ๋ง๋ค์ด์ ์ฐพ์ ์ ์์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฑฐ์์.
์ฆ, ์ค์ ์ ์ ๋์๋ค๋ ์๋ฏธ์์.
test DB๋ฅผ ๋ง๋ค๊ณ ๋์ ๋ค์ ๊ธฐ๋ํด ๋ณผ๊ฒ์.
์ ๊ธฐ๋ ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ด์.
๐ฆ ํ๋ก์ ํธ ๊ตฌ์ฑ - Swagger ์ค์
Swagger ์ค์ ๋ฐฉ๋ฒ์ ๋ํด์๋ ์ด ์ ์ ์์ฑํ๋ ์ด ๊ณณ์ ๊ด์ฌ์ ์ฃผ์ธ์.
๐ฆ ํ๋ก์ ํธ ๊ตฌ์ฑ - JWT Package ์ค์น
๐ฆ ํ๋ก์ ํธ ๊ตฌ์ฑ - Multer Package ์ค์น
์ด๋ ๊ฒ ์ค์ตํด ๋ณผ ๋ด์ฉ์ ๋ํด ๋ฏธ๋ฆฌ ์ค๋นํด ๋ณด์์ด์.
์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก ๋ค์ ๊ธ๋ถํฐ ๊ธฐ๋ฅ ๊ตฌํ์ ์งํํด ๋ณผ๊ฒ์.
"์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค."