프로젝트

블라인드 채용사이트 (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. 설날이니깐 쉬면서 하기~