Skip to content

Commit 4d4facf

Browse files
committed
fix: 캐싱 수정 2
- 1. 로그인 시, 유저 데이터가 기본적으로 Redis에 캐싱 - 2. 로그아웃 시, 캐싱 데이터 삭제 - 3. 토큰 갱신 시, 캐싱 데이터 TTL 30분으로 다시 초기화
1 parent f101c13 commit 4d4facf

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

src/main/java/org/dfbf/soundlink/domain/user/config/RedisConfig.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public CacheManager contentCacheManager(RedisConnectionFactory cf) {
4444
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
4545
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
4646
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer())) // Value Serializer 변경
47-
.entryTtl(Duration.ofMinutes(60L)); // 캐시 수명 10분
47+
.entryTtl(Duration.ofMinutes(30L)); // 캐시 수명 30분
4848

4949
return RedisCacheManager.RedisCacheManagerBuilder.fromConnectionFactory(cf).cacheDefaults(redisCacheConfiguration).build();
5050
}

src/main/java/org/dfbf/soundlink/domain/user/service/UserService.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import java.util.HashMap;
3535
import java.util.Map;
3636
import java.util.Optional;
37+
import java.util.concurrent.TimeUnit;
3738

3839
@Slf4j
3940
@Service
@@ -51,7 +52,7 @@ public class UserService {
5152
private final JwtProvider jwtProvider;
5253
private final TokenProperties tokenProperties;
5354

54-
private RedisTemplate<String, String> redisTemplate;
55+
private final RedisTemplate<String, String> redisTemplate;
5556
private final TokenService tokenService;
5657

5758
private static final String domain = "";
@@ -241,6 +242,9 @@ public ResponseResult login(LoginReqDto loginReqDto, HttpServletResponse respons
241242
User user = userRepository.findByLoginId(loginReqDto.loginId())
242243
.orElseThrow(NoUserDataException::new);
243244

245+
// 로그인하면 Redis에 유저데이터 캐싱
246+
userRepository.findByUserIdWithCache(user.getUserId());
247+
244248
String accessToken = jwtProvider.createAccessToken(user.getUserId());
245249
String refreshToken = jwtProvider.createRefreshToken(user.getUserId());
246250

@@ -259,6 +263,12 @@ public ResponseResult login(LoginReqDto loginReqDto, HttpServletResponse respons
259263
}
260264
}
261265

266+
// Redis에서 유저 캐시 삭제
267+
private void evictUserCache(Long userId) {
268+
String key = "user::" + userId;
269+
redisTemplate.delete(key); // 직접 삭제
270+
}
271+
262272
// 로그아웃
263273
public ResponseResult logout(HttpServletResponse response, HttpServletRequest request) {
264274
try {
@@ -277,10 +287,12 @@ public ResponseResult logout(HttpServletResponse response, HttpServletRequest re
277287
Long userId = jwtProvider.getUserId(accessToken); // 액세스 토큰을 넘겨서 userId 추출
278288

279289
tokenService.deleteRefreshToken(userId);
290+
this.evictUserCache(userId);
280291

281292
return new ResponseResult(ErrorCode.SUCCESS,"로그아웃 되었습니다.");
282293

283294
} catch (Exception e) {
295+
log.info("[ERROR] " + e.getMessage());
284296
return new ResponseResult(ErrorCode. INTERNAL_SERVER_ERROR,"로그아웃 중 오류가 발생했습니다.");
285297
}
286298
}
@@ -347,6 +359,10 @@ public ResponseResult reissueToken(HttpServletRequest request, HttpServletRespon
347359
Map<String, String> responseBody = new HashMap<>();
348360
responseBody.put("accessToken", newAccessToken);
349361

362+
// Redis에서 user::userID TTL을 30분으로 다시 갱신
363+
redisTemplate.expire("user::" + userId, 30 * 60, TimeUnit.SECONDS);
364+
365+
350366

351367
return new ResponseResult(ErrorCode.SUCCESS, responseBody);
352368
} else {

0 commit comments

Comments
 (0)