프로젝트
블라인드 채용사이트 (4) - 메일 인증번호 검증 완료 / Redis 활용
개발메모장
2024. 2. 7. 23:05
24/02/07 (수)
Front
1. 메일 인증번호 확인 버튼 생성
2. axios로 api 통신 url 설정
Back
1. Redis 설치
2. gradle Redis 의존성 추가
3. Redis 제어를 위한 RedisUtill 클래스 생성 및 메소드 생성
4. 인증번호 확인 클릭시 Email, 인증번호가 Controller 통해 인증관련 로직 실행
5. 5분 지날 경우 인증번호 Redis에서 삭제 처리
Redis 설치
Redis gradle 의존성 추가
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
Redis를 제어하기 위한 클래스 및 메소드 작성
@Service
@RequiredArgsConstructor
public class RedisUtill {
private final StringRedisTemplate redisTemplate; // Redis에 접근하기 위한 Spring의 Redis 템플릿 클래스
// 지정된 키(key)에 해당하는 데이터를 Redis에서 가져오는 메서드
public String getData(String key){
ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();
return valueOperations.get(key);
}
// 지정된 키(key)에 값을 저장하는 메서드
public void setData(String key, String value){
ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();
valueOperations.set(key, value);
}
// 지정된 키(key)에 값을 저장하고, 지정된 시간(duration) 후에 데이터가 만료되도록 설정하는 메서드
public void setDataExpire(String key, String value, long duration) {
ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();
Duration expireDuration = Duration.ofSeconds(duration);
valueOperations.set(key, value, expireDuration);
}
// 지정된 키(key)에 해당하는 데이터를 Redis에서 삭제하는 메서드
public void deleteData(String key){
redisTemplate.delete(key);
System.out.println(key + " : 삭제 완료");
}
}
인증번호 검증 Service영역 작성
// 인증번호 검증
public boolean emailAuthCheck(EmailCheckDTO emailCheckDTO) {
String email = emailCheckDTO.getEmail();
String authNumber = emailCheckDTO.getAuthNumber();
System.out.println("@@@@@@@ 들어가는 인증키 번호: " + authNumber);
System.out.println("@@@@@@@ Redis 인증키: " + redisUtill.getData(authNumber));
if (redisUtill.getData(authNumber) == null) {
return false;
}
if (redisUtill.getData(authNumber).equals(email)) {
return true;
} else {
return false;
}
}
인증번호 관련 Controller 작성
// 이메일 인증번호 인증하기
// Request: 이메일 주소, 인증번호
@PostMapping("/checkemailauth")
public String emailAuthCheck(@RequestBody @Valid EmailCheckDTO emailCheckDTO) {
Boolean checked = emailService.emailAuthCheck(emailCheckDTO);
if (checked) {
return "ok";
} else {
throw new NullPointerException("뭔가 잘못!");
}
}
동작 방식 설명
1. 메일 입력 후 인증번호 발송
2. 인증번호가 메일로 가면
3. Java에서 RedisUtill 클래스에 setData 메소드가 작동해서 Redis에 key 값으로 인증번호를 넘겨주고 Value에는 이메일 값을 set함
4. Redis 에서 get 인증번호를 입력하면 메일주소가 확인되는걸 볼 수 있음
5. 인증번호가 없으면 false / 있으면 email이랑 한번 더 검증해 true 반환
6. 5분 지나면 Redis에서 제거
.
TODO
1. ResponseEntity 활용해 Controller 처리하기
2. React 쪽에서 메일 인증번호가 올바르지 않은 경우 경고창 띄우기
3. 설날이니깐 쉬면서 하기~