❓

[Spring] Spring Boot 2.3.2.RELEASE 버전 Redis 이슈

발생한 이슈

프로젝트에 여러대의 WAS를 운영해도 문제 없도록 세션을 공유하기 위한 메모리 캐시 서버로 Redis를 두려고 Spring Data Redis를 적용했습니다.

다음과 같은 코드에서 이슈가 발생했는데요.

사용자로부터 인증 코드를 받고 Redis에 저장되어 있던 인증 코드와 비교하는 로직이 있는 코드입니다.

java
public void verifyAuthenticationCode (){
    // ...

    String id = NCPAuthCode.generateId(phoneNumber, LocalDateTime.now());
    NCPAuthCode ncpAuthCode = ncpAuthCodeRepository.findById(id)
            .orElseThrow(SMSCodeExpiredException::new);
    System.out.println(ncpAuthCode);

    if (ncpAuthCode.isNotEqualCode(code)) throw new SMSNotMatchingCodeException();

    // ...
}

여기서, Redis에 존재하는 인증 코드를 넘겨주었을 땐 아래와 같이 값이 정상적으로 잘 출력되었습니다.

NCPAuthCode(id=4823941:2020-11-20, authCode=123456)

하지만, 존재하지 않는 인증 코드를 넘겨주었을 땐 SMSCodeExpiredException이 발생하는 것이 아닌 계속 아래와 같은 결과가 출력되었습니다.

NCPAuthCode(id=null, authCode=null)

orElseThrow()는 Optional 래퍼 클래스 메서드로 값이 존재하지 않으면 Exception을 발생시키는데 위와 같이 객체 인스턴스는 존재하지만 빈 값을 가지고 있는 객체가 반환되었습니다.

코드상 문제가 있는지 확인했지만 이상이 없었고 저와 비슷한 상황을 가진 개발자가 있나 구글링을 한 끝에 원인을 발견했습니다.

원인

원인은 정말 단순하게 Spring Boot의 버전 문제였습니다.. 🙀

저는 현재 2.3.2.RELEASE 버전을 사용하고 있었는데, 해당 버전에서만 위와 같은 이슈가 발생했다고 합니다.

아무것도 건들이지 않고 버전만 2.3.3.RELEASE 버전으로 업그레이드하니 위와 같은 문제가 발생하지 않았습니다.

버전 이슈는 아무리 경험해도 파악하기 어려운 것 같습니다 😿

참고