JWT(Json Web Token)이란??

JWT는 인증(Authentication) 과 인가(Authorization) 를 위해 사용되는 토큰 기반 인증 방식이다. 서버가 로그인에 성공한 사용자에게 토큰을 발급하고, 이후 요청마다 이 토큰을 함께 보내서 “누구인지”를 증명하는 구조이다.
<기존의 세션 방식>
- 서버가 로그인 정보를 메모리 / DB / Redis에 저장
- 클라이언트는 Session ID만 전달
- 서버가 상태(State)를 관리
<기존의 세션 방식 - 문제점>
- 서버 확장 시 세션 동기화 필요
- 로드밸런서 환경에서 복잡
- 모바일 앱, 외부 API 연동에 불리
<JWT 기반 인증>
- 서버는 로그인 시 토큰만 발급
- 이후 요청은 토큰으로만 인증
- 서버는 상태를 저장하지 않음 (Stateless)
<JWT 기반 인증 - 문제점>
- 토큰 탈취 시 위험
- 토큰 강제 만료가 어려움
- Payload에 정보가 노출됨

발급 같은 경우에는 아주 간단하다. 로그인 성공 시 내가 담고 싶은 값을 넣어서 생성 시킨 후 사용자에게 던져주는것 이까지가 한 패턴이다. 즉 우리는 1번 ~ 3번 까지 구현을 할 것이다.
jwt 토큰 사용을 위한 셋팅 (npm i @nestjs/jwt)
블로그에 모든 글은 공식문서를 기준으로 하나하나 테스트해보면서 적는다. 시간이 지나면서 공식문서의 문법이나 코드가 바뀔수 있으니 공식문서를 잘 확인하자.
https://docs.nestjs.com/security/authentication
npm i @nestjs/jwt
위의 명령어를 이용하여 설치 후 jwt 토큰을 발행할 준비를 해보자.
본격적인 시작에 앞서 헷갈리지 않기 위해서 간단하게 설명하고 들어간다.
- auth 모듈 만들기
- auth 서비스 만들기 -> 여기에다가 로그인 로직 넣어놓고
- auth 모듈에 JwtModule.register() 임포트
- auth 서비스의 로그인 로직에서 로그인 성공시 발급 코드 하나 추가
- 끝
auth module 수정하기
import { Module } from '@nestjs/common';
import { AuthService } from './auth.service';
import { JwtModule } from '@nestjs/jwt';
import { jwtConstants } from './constants';
@Module({
imports: [
JwtModule.register({
global: true,
secret: jwtConstants.secret,
signOptions: { expiresIn: '30m' }, //30분
}),
],
providers: [AuthService],
exports: [AuthService],
})
export class AuthModule {}
여기서 JwtModule.register() 이게 어떤 역할을 하는지가 궁금할텐데 모듈내에서 저렇게 시크릿키와 만료시간을 적어서 모듈에 임포트를 해주면 NestJS가 내부적으로 JwtService를 만들고, DI에 등록한다.
- 비밀 키, 만료 시간 등 JWT 설정값을 한 번 등록
- AuthService에서 쉽게 JWT 발급/검증 가능
- 필요하면 다른 모듈에서도 JwtService 주입 가능
// auth/constants.ts 환경변수 사용
import 'dotenv/config';
export const jwtConstants = {
secret: process.env.JWT_SECRET,
};
JWT 토큰 발급
const payload = { id: memberData.st, role: memberData.lv };
const message = { access_token: 'Bearer ' + (await this.jwtService.signAsync(payload)) };
return message;
위의 코드는 현재 테스트용으로 한번 짜보고 있는 로그인 성공 후 토큰 발급 부분이다. payload를 하나 만든 후 signAsync에 넣기만 하면 된다. 여기서 sign()과 signAsync()가 있는데 간단하게 비교를 해보자.
sign()
- 동기방식
- await 필요없음
- 즉시 반환, payload가 작을때는 괜찮음
signAsync()
- 비동기
- await 필요함
- Promise 반환임
이제 로그인 후 리스폰스를 확인해보자.

참고
https://docs.nestjs.com/security/authentication#authentication
Documentation | NestJS - A progressive Node.js framework
Nest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and combines elements of OOP (Object Oriented Programming), FP (Functional Programming), and FRP (Functional Rea
docs.nestjs.com
GitHub - nestjs/jwt: JWT utilities module based on the jsonwebtoken package 🔓
JWT utilities module based on the jsonwebtoken package 🔓 - nestjs/jwt
github.com
'NestJS > 개발' 카테고리의 다른 글
| Redis/BullMQ 이용하여 연산 작업 따로하기 (0) | 2025.12.23 |
|---|---|
| JWT - Passport 사용하기 (0) | 2025.12.22 |
| JWT - 역할 기반 관리하기 (1) | 2025.12.21 |
| JWT - 토큰 활용하기 (0) | 2025.12.21 |
| NestJS + Prisma 연결하기 - (공식 문서를 잘 확인하자...) (0) | 2025.12.20 |