패스트캠퍼스 챌린지

패스트캠퍼스 환급 챌린지 28일차 : 9개 도메인 프로젝트로 끝내는 백엔드 웹 개발 (Java/Spring) 초격차 패키지 Online 강의 후기

ssoonearth 2025. 4. 28. 23:43

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

https://abit.ly/lisbva

 

 

 

 

 

패스트캠퍼스의 '9개 도메인 프로젝트로 끝내는 백엔드 웹 개발 (Java/Spring) 초격차 패키지 Online' 강의 수강 28일차!
오늘은 커뮤니티 피드 서비스의 회원가입 테스트 및 기능 구현 작업을 진행하였다.

 

@Test
void givenUnverifiedEmail_whenRegister_thenThrowError() {
    // given
    requestSendEmail(new SendEmailRequestDto(email));
    
    // when
    CreateUserAuthRequestDto dto = new CreateUserAuthRequestDto(email, "password", "USER", "name", "profileImageUrl");
    Integer code = registerUser(dto);

    // then
    assertEquals(400, code);
}

 

인증되지 않은 이메일로 회원가입을 진행하는 경우에는 IllegalArgumentException을 발생시켜야 하는데, 기존 코드에는 인증된 이메일인지 검증하는 작업이 빠져있었기 때문에 별다른 예외처리 없이 기능이 동작했다. 그렇기에 테스트에서는 코드값이 400인 것을 기대하지만, 실제 결과로는 정상 처리를 의미하는 0이 반환되어 테스트가 실패했었다.

 

public interface EmailVerificationRepository {
    void createEmailVerification(Email email, String token);
    void verifyEmail(Email email, String token);
    boolean isEmailVerified(Email email);
}

@Override
public boolean isEmailVerified(Email email) {
    EmailVerificationEntity entity = jpaEmailVerificationRepository.findByEmail(email.getEmailText())
            .orElseThrow(() -> new IllegalArgumentException("인증 요청을 하지 않은 이메일입니다."));
    return entity.isVerified();
}

boolean 타입을 반환값으로 가지는 인증된 이메일인지 확인하는 기능의 메소드를 만들고,

public Long registerUser(CreateUserAuthRequestDto dto) {
    Email email = Email.createEmail(dto.email());

    if (!verificationRepository.isEmailVerified(email)) {
        throw new IllegalArgumentException("인증되지 않은 이메일입니다.");
    }

    UserAuth userAuth = new UserAuth(dto.email(), dto.password(), dto.role());
    User user = new User(dto.name(), dto.profileImageUrl());
    userAuth = userAuthRepository.registerUser(userAuth, user);

    return userAuth.getUserId();
}

해당 메소드를 Service의 registerUser에서 호출하여 인증을 거치게끔 하였다.

 

 

과거의 내가 똑같은 기능을 구현하고 있었다면, 아마 postman으로 하나하나 요청을 보내며 에러의 원인을 찾아내고 고쳤을 것이다.

한 기능을 구현하기 위해서는 여러 객체들이 필요한 만큼, 사용되는 모든 클래스를 확인하느라 시간이 아주 오래 걸렸을 것 같다.

인수테스트와 단위테스트를 활용하여 테스트 주도 개발 방법으로 작업을 진행하니 위와 같은 단점들을 크게 줄일 수 있게 되었다.