๐Ÿ˜Ž ๊ณต๋ถ€ํ•˜๋Š” ์ง•์ง•์•ŒํŒŒ์นด๋Š” ์ฒ˜์Œ์ด์ง€?

[Authentication in Nest.js] Access Tokens & Refresh Tokens ๋ณธ๋ฌธ

๐Ÿ‘ฉ‍๐Ÿ’ป ๋ฐฑ์—”๋“œ(Back-End)/Nest js

[Authentication in Nest.js] Access Tokens & Refresh Tokens

์ง•์ง•์•ŒํŒŒ์นด 2023. 6. 21. 19:15
728x90
๋ฐ˜์‘ํ˜•

<๋ณธ ๋ธ”๋กœ๊ทธ๋Š” Code with Vlad ๋‹˜์˜ ์œ ํŠœ๋ธŒ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค :-)>

=> NestJs JWT - Access Tokens & Refresh Tokens - Ultimate Guide

 

๐Ÿ–ฅ๏ธ ์ดˆ๊ธฐ ํ™˜๊ฒฝ ์„ค์ •

nest new AuthNest
npm add -D prisma@latest
npm add @prisma/client
npx prisma studio
npx prisma init

 

โžก๏ธ Prisma 

: SQL ์ฝ”๋“œ๋ฅผ ์“ฐ์ง€ ์•Š๊ณ , js์ฝ”๋“œ(typescript๋„ ๊ฐ€๋Šฅ)๋ฅผ ์ž‘์„ฑํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ์„œ๋น„์Šค

์ฐจ์„ธ๋Œ€ Node.js์™€ TypeScript ORM!
๊ธฐ์กด ORM์€ ๊ฐ์ฒด ์ง€ํ–ฅ ๋ฐฉ์‹์œผ๋กœ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์„ ๋งคํ•‘
Prisma shcema์€ ์„ ์–ธ์ ์ธ ๋ชจ๋ธ์„ ์ •์˜ํ•ด์„œ ๋ณต์žกํ•œ ๋ชจ๋ธ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ์•ˆ์ „ํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์”€
Prisma Client : Node.js์™€ Typescript๋ฅผ ์œ„ํ•œ ์ž๋™ ์ƒ์„ฑ๊ณผ ์•ˆ์ „ํ•œ ํƒ€์ž… ์ฟผ๋ฆฌ ๋นŒ๋”
Prisma Migrate : ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์‹œ์Šคํ…œ
Prisma Studio : ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ณ  ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ๋Š” GUI ํŽธ์ง‘๊ธฐ

 

๐Ÿ–ฅ๏ธ 1) docker ์„ค์ •

โžก๏ธ docker-compose.yml

version: '3'
services:
  db:
    image: postgres:12
    ports:
      - 5432:5432
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: 123
      POSTGRES_DB: nestjs

โžก๏ธ .env

# Environment variables declared in this file are automatically made available to Prisma.
# See the documentation for more detail: https://pris.ly/d/prisma-schema#accessing-environment-variables-from-the-schema

# Prisma supports the native connection string format for PostgreSQL, MySQL, SQLite, SQL Server, MongoDB and CockroachDB.
# See the documentation for all the connection string options: https://pris.ly/d/connection-strings

DATABASE_URL="postgresql://postgres:123@localhost:5432/nestjs?schema=public"

 

docker-compose up

 

๐Ÿ–ฅ๏ธ 2) prisma ์„ค์ •

:  DB GUI tool ์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” studio

npx prisma migrate dev --create-only

 

npx prisma db push
npx prisma studio

 

๐Ÿ–ฅ๏ธ 3) auth & prisma module ์ดˆ๊ธฐ ์„ค์ •

npx nest g module auth
npx nest g module prisma
npx nest g service prisma

npx nest g controller auth --no-spec
npx nest g service auth --no-spec

// --no-spec : spec.ts ํŒŒ์ผ์„ ์ƒ์„ฑ X

 

โžก๏ธ Lifecycle sequence

OnModuleInit() ํ˜ธ์ŠคํŠธ ๋ชจ๋“ˆ์ด ์ดˆ๊ธฐํ™”๋˜๋ฉด ํ˜ธ์ถœ
OnApplicationBootstrap() ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์™„์ „ํžˆ ์‹œ์ž‘๋˜๊ณ  ๋ถ€ํŠธ ์ŠคํŠธ๋žฉ๋˜๋ฉด ํ˜ธ์ถœ
OnModuleDestroy() Nest๊ฐ€ ํ˜ธ์ŠคํŠธ ๋ชจ๋“ˆ์„ ํŒŒ๊ดดํ•˜๊ธฐ ์ง์ „์— ์ •๋ฆฌ
beforeApplicationShutdown() onModuleDestroy() ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์™„๋ฃŒ๋œ ํ›„์— ํ˜ธ์ถœ
OnApplicationShutdown() ์‹œ์Šคํ…œ ์‹ ํ˜ธ์— ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค

 

๐Ÿ–ฅ๏ธ 4) ์˜์กด์„ฑ ์ฃผ์ž…(Defendency Injection)

: ์ œ์–ด์˜ ์—ญ์ „(Inversion of Control) ์˜ ๊ธฐ์ˆ  ์ค‘ ํ•˜๋‚˜

์ œ์–ด์˜ ์—ญ์ „ : ๊ฐœ๋ฐœ์ž๊ฐ€ ์ œ์–ดํ•ด์•ผํ•  ์˜์—ญ์„ ํ”„๋ ˆ์ž„์›Œํฌ์—๊ฒŒ ๋ฏฟ๊ณ  ๋ง๊ธฐ๋Š” ๊ฒƒ
์˜์กด์„ฑ ์ฃผ์ž… : ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•„์š”ํ•œ ์ž์›(ํด๋ž˜์Šค, ํ•จ์ˆ˜..)๋“ค์„ ์™ธ๋ถ€์—์„œ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ๋„ฃ์–ด์ค€๋‹ค

 

๐Ÿ–ฅ๏ธ 5) DTO ์„ค์ •

โžก๏ธ class-transformer & class-validator

: ๋ผ์šฐํ„ฐ๋‚˜ ์ปจํŠธ๋กค๋Ÿฌ์— ๋„๋‹ฌํ•˜๊ธฐ ์ „์— ์š”์ฒญ์˜ JSON body๋ฅผ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋กœ ๋ณ€ํ™˜ํ•œ ๋’ค์— ๊ฒ€์ฆ

npm add class-validator class-transformer

 

โžก๏ธ bcrypt

npm add bcrypt
npm add -D @types/bcrypt

 

๐Ÿ–ฅ๏ธ  6) Auth ์„ค์ • 

โžก๏ธ passport

npm add @nestjs/jwt passport-jwt
npm add -D @types/passport-jwt
npm add @nestjs/passport passport

 

728x90
๋ฐ˜์‘ํ˜•
Comments