정말 말 많고 탈 많던 회고가 될 것으로 생각된다.

우선 처음에는 이메일 컨트롤러를 만들었다. 아래와 같이

import { Controller, Get, Query } from '@nestjs/common';
import { EmailService } from './email.service';

@Controller('email')
export class EmailController {
  constructor(private readonly emailService: EmailService) {}

  @Get('validate')
  async validateEmail(@Query('email') email: string): Promise<boolean> {
    const isValidFormat = this.emailService.validateEmailFormat(email);
    if (!isValidFormat) {
      return false;
    }

    const isDuplicate = await this.emailService.checkDuplicateEmail(email);
    if (isDuplicate) {
      return false;
    }

    return true;
  }
}
//위의 코드에서 validateEmail 메서드는 email 쿼리 파라미터로 전달받은 이메일 주소의 유효성을 검사합니다.
먼저 validateEmailFormat 메서드로 이메일 주소의 형식이 올바른지 확인하고, 
그 다음에 checkDuplicateEmail 메서드로 중복 여부를 확인합니다. 모든 검사가 통과되면 true를 반환하고, 
그렇지 않으면 false를 반환합니다.

 

다음으로, 해당 컨트롤러에서 사용할 서비스 클래스인 EmailService도 생성해주었다.

이 서비스 클래스에서 실제로 유효성 검사와 중복 여부 확인 로직을 구현한다.

import { Injectable } from '@nestjs/common';

@Injectable()
export class EmailService {
  validateEmailFormat(email: string): boolean {
    // 여기에 이메일 형식 검증 로직을 구현하세요.
    // 예시: 정규식을 사용하여 형식이 맞는지 확인하는 방법
    const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
    return emailRegex.test(email);
  }

  async checkDuplicateEmail(email: string): Promise<boolean> {
    // 여기에 중복 여부 확인 로직을 구현하세요.
    // 예시: 데이터베이스에서 이미 등록된 이메일인지 조회하는 방법
    const existingUser = await User.findOne({ where: { email } });
    
     return !!existingUser; // 이미 등록된 경우 true 반환
   }
}

위의 코드에서는 각각 validateEmailFormat 메서드와 checkDuplicateEmail 메서드가 있다.

첫 번째 메서드(validateEmailFormat)는 정규식을 사용하여 입력된 이메일 주소가 올바른 형식인지 판별하고,

두 번째 메서드(checkDuplicateEmail)는 데이터베이스나 다른 저장소에서 이미 등록된 이메일인지 조회하여 중복 여부를 판별한다.

마지막으로, 해당 컨트롤러와 서비스 클래스를 Nest.js 앱 모듈에 등록해 주면 API 제작이 끝난다

import { Module } from '@nestjs/common';
import { EmailController } from './email.controller';
import { EmailService } from './email.service';

@Module({
  controllers: [EmailController],
  providers: [EmailService],
})
export class AppModule {}
// 대략 이런 식으로

그런데, 알고 보니 유저 컨트롤러에 이미 회원가입(당연히 이메일 관련 내용도 포함) 로직이 있던 것이다. 

이럴 경우, 이메일 컨트롤러를 만들 필요 없이 유저 컨트롤러에 추가적으로 로직을 구현하면 되는 일이었다. 서비스가 늘어날수록 컨트롤러도 다양해질 것인데, 그럴 경우를 미리 대비해서 조금이라도 컨트롤러의 개수를 줄이려고 노력해보았다. 

그래서 결국 이메일 컨트롤러를 지우고 유저 컨트롤러에 병합을 시도했다.

문제는 다음부터였다...ㅂㄷㅂㄷ

+ Recent posts