현 프로젝트는 로그인, 권한체크, 리프레시 토큰으로 액세스 토큰 재발급시 DB를 조회하게 된다.
DB조회가 가장 많을 것으로 예상되는 파트이다. 그래서 고민 하게 되었다.
DB가 너무 많이 부담된다. 이것을 캐시 히트가 된다면 DB조회가 많이 줄 지 않을까? 라는 생각에서 삽질이 시작되었다.
public JwtToken refreshAccessToken(String refreshToken) {
// if(!validateRefreshToken(refreshToken)){
// throw new CustomException(ResponseCode.RefreshTokenValidException);
// }
Claims claims = parseClaims(refreshToken);
if(claims.getExpiration().before(new Date())) {
throw new CustomException(ResponseCode.REFRESH_TOKEN_IS_EXPIRED);
}
String userId = claims.getSubject();
// Member member = memberRepository.findByUserId(userId)
// .orElseThrow(() -> new CustomException(ResponseCode.NOT_FOUND_USER));
//
// if(member.getStatus() != MemberStatus.APPROVED){
// throw new CustomException(ResponseCode.NOT_FOUND_USER);
// }
MemberLoginResponseDto cachedUserInformation = getCachedUserInformation(userId);
if(cachedUserInformation.getStatus() != MemberStatus.APPROVED){
throw new CustomException(ResponseCode.NOT_FOUND_USER);
}
Authentication authentication = customUserDetailsService.getUserAuthentication(userId);
String accessToken = generateAccessToken(authentication);
return JwtToken.builder()
.grantType("Bearer")
.accessToken(accessToken)
.refreshToken(refreshToken) // 기존 리프레시 토큰 유지
.build();
}
기존 방식의 DB조회 부분을 제거하고 Redis에 캐시를 남겨 쓰는 방법을 써봤다.
기존 로직보다 캐시를 써서 시간이 3배 빨라졌다!
대단한건지는 모르겠지만 이게 엄청 유의미한 것인지는 솔직히 현업이 아니라 잘 모르겠다..
아무튼 Redis로 캐시를 썼기 때문에 응답 속도도 빨라졌다.
'Spring > 프로젝트' 카테고리의 다른 글
연차 신청, 관리 시스템 만들기 #12 EC2 스웨거 http -> https (0) | 2024.09.10 |
---|---|
연차 신청, 관리 시스템 만들기 #11 인프라 구축 (0) | 2024.09.06 |
연차 신청, 관리 시스템 만들기 #9 공공데이터포털 국세청_사업자등록정보 진위확인 및 상태조회 서비스 OpenAPI 이용하기 (Vue (0) | 2024.06.12 |
연차 신청, 관리 시스템 만들기 #8 공공데이터포털 국세청_사업자등록정보 진위확인 및 상태조회 서비스 OpenAPI 이용하기 (2) | 2024.06.11 |
연차 신청, 관리 시스템 만들기 #7 로그아웃 구현 (1) | 2024.05.29 |