카테고리 없음

TIL :: 회원가입 기능 / 기술면접 공부

두캔두잇 2023. 8. 17. 21:40

오늘은 회원가입기능에 대해서 작업을 했는데 새로 알게 된 점과 기능을 구현한 것들을 설명을 해보겠다.

 

1.

우선, nest.js로 작업을 했기에 controller와 service 로직이 있는데, 컨트롤러쪽에서 서버로직을 작성할 때 새롭게 안 점이 있는데 그것은 바로 !

@Post()
@HttpCode(201)
async createMember(@Body() memberData: CreateMemberDto): Promise<IMessage> {
  return await this.memberService.createMember(memberData);
}

위의 코드에서 볼 수 있듯이 데코레이터 @HttpCode(201) 이다. 로그인기능이면은 return쪽에서 res ,message 등을 반환 할 수 있겠지만, 여기에서는 저런 식으로 내장되어 있는 HttpCode를 통해서 status(응답신호) 를 바로 보낼수 있다. 

 

그리고 service 로직으로 가면,

async createMember(createMember: CreateMemberDto): Promise<IMessage> {
  const { email } = createMember;
  const existingUser = await this.membersRepository.findOne({ where: { email } });

  if (existingUser) throw new HttpException('이미 존재하는 이메일 입니다.', 403);
  // 암호 복호화
  createMember.password = await bcrypt.hash(createMember.password, 10);
  const newMember = this.membersRepository.create(createMember);
  await this.membersRepository.save(newMember);
  return { message: '회원가입이 완료되었습니다.' };
}

이렇게 작성이 되어있는데, 먼저 회원가입을 할때 email을 찾고 똑같은 email이 있는지, 있다면 존재하는 이메일 이라고 메세지를 반환하게 되어 있는데 express를 할때에는 throw new ErrorCustom 이런식으로 유효성검사를 하였는데,

nest.js에는 HttpException 이라는게 내장되어 있어 저렇게 설정하고 뒤에 보내고자 하는 message와 status를 입력하면

정상적으로 반환되는 것을 볼 수있다. 이게 nest의 장점이 아닌가 싶다.(너무 편함)

2.

그리고 오늘 처음으로 bcrypt를 이용해 비밀번호 암호화를 하였는데 createMember.password 변수에 담은 값들을

해쉬화를 통해 사용자가 회원가입을 할때 DB에 저장되는 비밀번호가 암호화되서 안보이도록 구현했다.

 

3.

마지막으로는 Dto 폴더에 파일들을 만들어서 email, name, nickname, password, tel 등...

각자에게 맞는 정규식을 이용해서 좀 더 자세한 유효성검증을 완료하였다.

사실상 정규식을 다 외우는건 힘들어서, 다른 분의 블로그를 참고하였으니 출처를 남기고 오늘을 마무리 한다.

 

정규식 참고사이트

https://rateye.tistory.com/468

 

JavaScript 자주 쓰는 정규식 모음 (아이디, 이메일, 비밀번호, 전화번호,...)

자바 스크립트에서 자주 쓰는 정규식을 모아왔습니다. 일치할 시 true를 반환 합니다 이메일 체크 정규식 function isEmail(asValue) { var regExp = /^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z

rateye.tistory.com

 

4.

오늘은 MVC패턴에 대해 공부를 했는데 자세히 풀어 설명하기엔 너무 길어져 간략하게 정리한것과 그림으로 이해하는것이 좋은것 같아서 그림도 함께 남긴다.

 

 

mvc 패턴 원리

 

MVC 는 Model, View, Controller의 약자이고, 하나의 애플리케이션, 프로젝트를 구성할 때 그 구성요소를 세가지의 역할로 구분한 패턴이다.
모델(Model)은 애플리케이션의 정보(데이터)를 나타내며, 뷰(View)는 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소를 나타내고, 컨트롤러(Controller)는 데이터와 비즈니스 로직 사이의 상호동작을 관리한다.
MVC 패턴의 사용이유는 분리되어있기에 각자 역할에 집중할 수 있고, 유지보수성, 애플리케이션의 확장성, 유연성 증가, 중복제거 라는 효과가 있기때문에 사용한다.