원티드 프리온보딩 기업과제 3차 회고록

전준영·2022년 10월 24일
0

프로젝트 회고록

목록 보기
5/6
post-thumbnail

📌 커뮤니티 어플리케이션 만들기

1. 프로젝트 소개

유저들이 서로 친구를 맺고 글을 올릴 수 있는 커뮤니티 앱을 만들기 위한 어플리케이션입니다.

1. 프로젝트 진행기간 및 인원

  • 2022.10.11 ~ 2022.10.13
  • BE : 3명

2. 기술스택

  • Back-End : TypeScript, Nest.js, Typeorm, MySQL
  • Common : RESTful API, Git, Github
  • Communication : Slack, Notion, Zep

3. 맡은 기능

  1. 회원가입 기능
  2. 로그인 기능

👉 Github link

4. db모델링

👉 DB diagram link

db모델링 사진

2. 프로젝트를 진행하며 느낀점

과제를 제출한 회사측에서 어떤 기술스택을 사용하던지 상관없지만 현재 기업측에서 사용중인 기술이 Nest.js와 Typescript이기 때문에 이 기술들을 사용하여 과제를 진행한다면 가산점이 있다고했다.
팀원들과 상의하여 Nest.js , Typescipt 를 사용해 학습에 의의를 두고 필수 구현 사항만 구현해보기로 했다.

Nest.js 와 TypeScript의 조합은 객체지향개발에 더욱 초점을 두었기에 처음에 적응하기에 정말 어색했고 어려웠다. 데이터베이스에 관련한 부분도 항상 raw query를 쓰다가 orm문법으로 작성해보기 시작해서 어색했지만 최대한 적응을 많이 해보려고 했다.
가장 신기했던건 유효성검사, 토큰검증 등 라이브러리를 통해서 너무 간편하게 작동한 부분이 새롭게 다가왔다.

회원가입 유효성 검사

// src/users/dto/create-user.dto.ts

import { IsEmail, IsNotEmpty, IsString, Matches, MaxLength, MinLength } from 'class-validator';

export class CreateUserDto {
  @IsNotEmpty()
  @IsEmail()
  @IsString()
  @MaxLength(30, { message: 'email is too long' })
  @MinLength(5, { message: 'email is too short' })
  email: string;

  @IsNotEmpty()
  @IsString()
  @MinLength(8, { message: 'min length is 8' })
  @MaxLength(30, { message: 'password is too long' })
  @Matches(/^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,}$/, {
    message: 'password Error',
  })
  password: string;
}

이렇게 class-validator 라는 라이브러리를 이용해서 내가 유효성 검사를 하고싶은 곳 위에 데코레이터로 원하는 유효성검사를 작성하고 틀렸을 시 반환하고싶은 메세지도 정할 수 있었다.

또 토큰을 검증하는 부분도 데코레이터를 통해서 간단하게 가능했다.

토큰 검증

// src/users/users.controller.ts

import { JwtAuthGuard } from './security/jwt.guard';

  @UseGuards(JwtAuthGuard)
  @Get('/token-test')
  getUser(@Req() req: Request): Payload {
    const user: any = req.user;
    console.log(req.user);
    return user;
  }

JwtAuthGuard 라는 class를 import 해온 부분에 따로 jwt를 검증하기 위한 strategy를 따로 작성하고 여러가지의 과정이 있었지만 이런식으로 토큰을 검증한다는 부분도 굉장히 마음에 들었다.
앞으로 nest.js 를 더 열심히 공부해두면 java를 이용한 개발에도 어려움 없이 접근 할 수있다고 했기에 꾸준히 공부해서 nest.js로 개발을 많이 해보고 싶다고 생각했다.
이번 과제로 새로운 환경을 접해보면서 어색하고 서툴기도했지만 여러가지 찾아가면서 공부하고 개발했기 때문에 굉장히 뜻깊은 과제였다.

profile
Just do it!

0개의 댓글