[Spring] 회원가입 구현

김현진·2023년 6월 1일
0

커플 SNS 프로젝트

목록 보기
4/4

회원가입

이전에 작업한 전화번호 인증 구현에 이어서, 회원가입을 구현하였다.


회원가입 로직 구현

이전에 전화번호 인증시, 인증이 완료된다면 Redis 에 해당 전화번호와 인증 상태가 저장이 되므로, 회원가입시에는 해당 전화번호의 인증 상태를 조회하여 인증된 상태인 전화번호만이 인증 되도록 구현하였다.

구현

먼저, 인증을 담당하는 Service 내부에서 인증된 상태인지 확인하는 메서드와 인증 기록을 삭제하는 메서드를 작성하였다.

// AuthService

// 인증 되지 않은 전화번호이면 예외를 던진다.
public void throwIfPhoneNotAuthenticated(String phone) {

	ListOperations<String, String> opsForList = redisTemplate.opsForList();
	String key = getAuthKey(phone);
	String status = opsForList.index(key, 1);

	if (!Boolean.parseBoolean(status)) {
		throw new PhoneNotAuthenticatedException();
	}
}

// 해당 전화번호의 인증 기록을 삭제한다.
public void deleteAuthenticationInfoInRedis(String phone) {

	String key = getAuthKey(phone);

	redisTemplate.delete(key);
}

이후, 회원가입을 담당하는 Service 에서 위에서 작성한 메서드를 호출하였다.

public void signUp(SignUpServiceRequest request) {

	String phone = request.getPhone();
	String nickname = request.getNickname();

	// 전화번호와 닉네임 중복 검사
	memberReadService.throwIfPhoneExists(phone);
	memberReadService.throwIfNicknameExists(nickname);

	// 인증 상태 검사
	authService.throwIfPhoneNotAuthenticated(phone);

	// 회원 저장
	Member member = request.toMember();
	memberRepository.save(member);

	// 인증 기록 삭제
	authService.deleteAuthenticationInfoInRedis(phone);
}

마지막 부분인 인증 기록 삭제는 원래 인증 상태 검사 메서드 내부에 있었지만,
확실하게 회원 저장이 완료 되고 나서 진행시키는 것이 좋을 것 같아 해당 방식으로 작성하였다.
이후에 Redis 의 Transaction 을 적용해서 리팩토링을 진행해도 괜찮을 것 같다...

0개의 댓글