NestJS는 Node.js 기반의 프레임워크로, 서버 사이드 애플리케이션을 개발하기 위해 많은 개발자들에게 선택되고 있습니다. 이 프레임워크는 Express.js 위에서 구축되며, 강력한 모듈러 구조와 간결한 코드 작성을 지원합니다. 이번에는 NestJS 애플리케이션에서 세션 인증을 구현하는 방법에 대해 소개하겠습니다.
세션 인증이란?
세션 인증은 사용자가 로그인한 후 서버에서 사용자 정보를 저장하는 인증 방법입니다. 사용자가 인증된 상태를 유지하기 위해 세션 ID를 사용하며, 이 세션 ID는 보통 쿠키를 통해 클라이언트에 저장됩니다. 각 요청이 있을 때마다 서버는 세션 ID를 확인하여 인증 여부를 판단합니다.
NestJS에서 세션 인증 구현하기
NestJS에서 세션 인증을 구현하기 위해서는 다음과 같은 단계를 거쳐야 합니다:
1. 익스프레스 세션 미들웨어 설치
NestJS는 익스프레스 기반이므로, 세션을 처리하기 위해 익스프레스 세션 미들웨어를 설치해야 합니다. 프로젝트 디렉토리에서 다음 명령어를 실행하여 익스프레스 세션 패키지를 설치합니다.
npm install express-session
2. 익스프레스 세션 설정
익스프레스 앱 모듈에서 세션 미들웨어를 설정해야 합니다. app.module.ts
파일을 열고 다음과 같이 NestExpressApplication
을 가져온 후, use
메소드를 사용하여 세션 미들웨어를 적용합니다.
import { NestFactory } from '@nestjs/core';
import { NestExpressApplication } from '@nestjs/platform-express';
import session from 'express-session';
async function bootstrap() {
const app = await NestFactory.create<NestExpressApplication>(AppModule);
app.use(session({
secret: 'my-secret-key',
resave: false,
saveUninitialized: false,
}));
await app.listen(3000);
}
bootstrap();
3. 로그인 라우터 구현
세션을 사용하여 로그인 기능을 구현하기 위해 로그인 라우터를 만들어야 합니다. auth.controller.ts
파일을 생성하고, 다음과 같이 로그인 라우터를 작성합니다.
import { Controller, Post, Req, Res } from '@nestjs/common';
import { Request, Response } from 'express';
@Controller('auth')
export class AuthController {
@Post('login')
async login(@Req() req: Request, @Res() res: Response) {
// 로그인 로직 구현
const { username, password } = req.body;
// 사용자 인증 로직
if (username === 'admin' && password === '1234') {
// 세션에 사용자 정보 저장
req.session.user = { username };
res.send('로그인 성공');
} else {
res.send('로그인 실패');
}
}
}
4. 인증된 요청 처리
세션에 사용자 정보를 저장한 후, 인증된 요청을 처리하기 위해서는 미들웨어를 작성해야 합니다. 미들웨어 함수를 작성하고, 각 라우터에서 이 함수를 사용하여 인증 여부를 확인합니다.
// auth.middleware.ts
import { Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response, NextFunction } from 'express';
@Injectable()
export class AuthMiddleware implements NestMiddleware {
use(req: Request, res: Response, next: NextFunction) {
if (!req.session.user) {
res.status(401).send('인증 필요');
} else {
next();
}
}
}
// app.module.ts
import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
import { AuthMiddleware } from './auth.middleware';
@Module({
// ...
})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer.apply(AuthMiddleware).forRoutes('*');
}
}
이제 NestJS 애플리케이션에서 세션 인증을 구현하는 방법을 알게 되었습니다. 세션을 사용하여 사용자 인증을 처리함으로써, 보안적인 측면과 사용자 경험 측면에서 좋은 결과를 얻을 수 있습니다. NestJS를 활용하여 안전하고 신뢰할 수 있는 웹 애플리케이션을 개발하는 데 도움이 되기를 바랍니다.
참고 문헌:
#NestJS #JavaScript