목록NestJS, Node.js/#01 Project - 투표 커뮤니티 (27)
개발일지
투표 글 좋아요 및 취소modelingmodel Votes { id Int @id @default(autoincrement()) likedUsers Users[] @relation("LikedVoteUsers") ...}model Users { id Int @id @default(autoincrement()) likedVotes Votes[] @relation("LikedVoteUsers") ...} votes/votes.controller.ts @Post(':voteId/like') async likeVote(@Param('voteId', ParseIntPipe)..
투표하기중복 투표 불가능합니다.하나의 선택지만 선택 가능합니다.modeling선택지 별 투표자들을 확인하기 위한 VotedUsers 모델을 생성했습니다. model Votes { id Int @id @default(autoincrement()) ... votedUsers VotedUsers[]}model VoteChoices { id Int @id @default(autoincrement()) ... votedUsers VotedUsers[]}model VotedUsers { id Int @id @default(autoincrement()) user Users ..
요구사항투표글 생성투표글 제목, 기간, 카테고리를 입력합니다.투표글 선택지를 생성합니다.최대 10개투표 하기중복 투표 불가능, 하나의 선택지만 선택 가능합니다.투표글 조회생성된 투표글 목록 조회투표 제목, 전체 투표수, 좋아요 수세부 내용 조회투표 제목, 전체 투표수, 좋아요 수, 선택지, 선택지별 투표수좋아요를 누를 수 있습니다.투표글 좋아요 기능 modelingUsers-Votes는 1:N 관계입니다. Votes-VoteChoices는 1:N 관계입니다. model Votes { id Int @id @default(autoincrement()) title String startDate DateTime @default(now()) endDate ..
프로젝트를 더 진행하기 전 구조적으로 보완이 필요하다고 판단했습니다.middleware 폴더 분리common은 interface, dto와 같이 공통적으로 정의 하기 위한 폴더입니다. middleware의 성격과는 다르다는 생각이 들어 common 폴더와 분리했습니다. 또한, middleware 안에서도 exception.filter와 interceptor를 분리했습니다.인증 관련 서비스 users > auth 모듈로 분리후에 소셜 로그인, 이메일 인증 등 인증 과정이 추가될 수 있다고 생각했습니다. 확장성을 위해 인증 관련된 부분만 관리하는 auth 모듈을 추가했습니다.또한, /users/jwt 에 있던 auth.decorator.ts 를 /common/decorator 로 이동했습니다. =app 폴더..
시나리오제가 생각한 access token 재발급 순서는 다음과 같습니다.access token 만료시 error를 반환합니다.클라이언트는 body refresh token를 포함한 뒤 access token 재발급을 요청합니다.서버에서는 refresh token을 검증합니다.db에 저장된 refresh token과의 일치 여부를 확인합니다.refresh token의 유효성을 검증합니다.검증된 refresh token의 경우 access token을 재생성해 response 합니다. 참고) Refresh token 생명 주기로그인 시 access token과 refresh token이 발급됩니다.로그아웃 시 db에 저장된 refresh token이 삭제됩니다.보안성을 위해 refresh token은 암..
Custom Decorator앞서 구현한 JwtAccessGuard는 JwtAccessStrategy를 거쳐 인증된 user 객체를 반환했습니다. 이를 바탕으로 인증된 유저 정보를 추출하는 @CurrUser() 데코레이터를 구현했습니다. // auth.decorator.tsimport { createParamDecorator, ExecutionContext } from '@nestjs/common';export const CurrUser = createParamDecorator( (data: string, ctx: ExecutionContext) => { const request = ctx.switchToHttp().getRequest(); const user = request?.user; ..
개념 정리PassportPassport는 Node.js에서 제공해주는 인증 미들웨어입니다. NestJS에서는 @nestjs/passport 모듈로써 NestJS 환경에 맞게 사용할 수 있도록 합니다. Passport는 인증 방식에 따른 다양한 전략(Strategy)이 존재하며, 다양한 인증 단계를 표준 패턴으로 추상화하여 제공합니다. 먼저 @nestjs/passport를 사용하기 전 vanilla Passport 작동방식에 대해 알아봅시다.1. 해당 전략에 적용할 옵션. 예를 들어 jwt strategy에서 token 서명에 필요한 secret key를 적용할 수 있습니다.2. verify callback. 사용자의 존재여부 또는 자격 증명 유효성 검증 등이 이뤄집니다. 유효성 검증에 성공하면 user ..