카테고리 없음

TIL :: 회원가입 로직 / 기술면접

두캔두잇 2023. 8. 25. 03:02

1.Controller

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

이렇게 변수를 하나 만들어주고 Body에 파라미터를 만들고 Dto 파일을 만들어 타입을 지정해준다. 그리고 Promise에는 

Interface 파일을 만들어서 return문에서 코드사용을 줄이기 위해 만들었다.

2. Service

async createMember(createMember: CreateMemberDto): Promise<IMessage> {
  const findByVerifyData: IClientVerifyIdentity = await this.cacheManager.get(createMember.tel);
  console.log(typeof findByVerifyData.sequence, typeof createMember.sequence);
  if (!findByVerifyData || +findByVerifyData.sequence !== createMember.sequence || findByVerifyData.type !== 200)
    throw new HttpException('핸드폰 인증이 완료되지 않았습니다.', 403);

  const { email, nickname, tel } = createMember;
  // 존재하는 이메일이 있을때
  const existingEmail = await this.membersRepository.findOne({ where: { email } });
  if (existingEmail) throw new HttpException('이미 존재하는 이메일 입니다.', 403);
  // 존재하는 닉네임이 있을때
  const existingNickname = await this.membersRepository.findOne({ where: { nickname } });
  if (existingNickname) throw new HttpException('이미 존재하는 닉네임 입니다.', 403);
  // 존재하는 전화번호가 있을때
  const existingTel = await this.membersRepository.findOne({ where: { tel } });
  if (existingTel) 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: '회원가입이 완료되었습니다.' };
}

여기도 마찬가지로 인자값에 타입을 지정해주고 Promise에서도 return문에 메세지를 보내줄꺼기 때문에 Interface 만든것으로 타입을 지정해준다. 그 밑에 것들은 레디스를 사용하기때문에 캐시를 담았다. 휴대폰 인증을 하면서 sequence에 담고 그것들을 비교하여 검증을 한다. 그 밑에도 회원가입을 하면서 필요한 검증들을 각자 추가하면서 적으면 된다.

 

 

# 기술면접 준비 

- 브라우저의 작동방식에 대해서 

HTML 파싱 후 DOM 트리를 만들고 그 다음 렌더 트리를 만들고 레이아웃을 만든다. 그리고 만든 렌더 트리를 페인팅 한다. 쉽게 이야기를하면 서버가 브라우저에게 HTML문서를 전달하고 브라우저는 이를 읽고 해석한 후 클라이언트에게 보여준다.