From 5bef39e5c90b76be9c1a3ce36a6085c2f7e55673 Mon Sep 17 00:00:00 2001 From: Whitedoggy Date: Mon, 13 Oct 2025 10:41:34 +0900 Subject: [PATCH] =?UTF-8?q?refactor/OPS-398:=20=EC=9D=B8=EC=A6=9D/?= =?UTF-8?q?=EC=9D=B8=EA=B0=80=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/controller/ApiV1AuthController.java | 2 +- .../auth/handler/OAuth2SuccessHandler.java | 2 +- .../repository/RefreshTokenRepository.java | 2 ++ .../{ => oauth2}/CustomOAuth2UserService.java | 2 +- .../{ => oauth2}/GoogleUserInfoService.java | 2 +- .../{ => oauth2}/KakaoUserInfoService.java | 2 +- .../{ => oauth2}/OAuth2UserInfoService.java | 2 +- .../refresh/RefreshTokenCleanupService.java | 24 +++++++++++++++++++ .../{ => refresh}/RefreshTokenService.java | 5 ++-- .../controller/ApiV1MemberController.java | 2 +- .../global/security/SecurityConfig.java | 2 +- 11 files changed, 37 insertions(+), 10 deletions(-) rename src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/{ => oauth2}/CustomOAuth2UserService.java (97%) rename src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/{ => oauth2}/GoogleUserInfoService.java (96%) rename src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/{ => oauth2}/KakaoUserInfoService.java (97%) rename src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/{ => oauth2}/OAuth2UserInfoService.java (85%) create mode 100644 src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/refresh/RefreshTokenCleanupService.java rename src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/{ => refresh}/RefreshTokenService.java (92%) diff --git a/src/main/java/org/tuna/zoopzoop/backend/domain/auth/controller/ApiV1AuthController.java b/src/main/java/org/tuna/zoopzoop/backend/domain/auth/controller/ApiV1AuthController.java index 68ff3ef0..2fae5d32 100644 --- a/src/main/java/org/tuna/zoopzoop/backend/domain/auth/controller/ApiV1AuthController.java +++ b/src/main/java/org/tuna/zoopzoop/backend/domain/auth/controller/ApiV1AuthController.java @@ -13,7 +13,7 @@ import org.tuna.zoopzoop.backend.domain.auth.dto.AuthResultData; import org.tuna.zoopzoop.backend.domain.auth.entity.AuthResult; import org.tuna.zoopzoop.backend.domain.auth.entity.RefreshToken; -import org.tuna.zoopzoop.backend.domain.auth.service.RefreshTokenService; +import org.tuna.zoopzoop.backend.domain.auth.service.refresh.RefreshTokenService; import org.tuna.zoopzoop.backend.domain.member.entity.Member; import org.tuna.zoopzoop.backend.global.rsData.RsData; import org.tuna.zoopzoop.backend.global.security.jwt.JwtUtil; diff --git a/src/main/java/org/tuna/zoopzoop/backend/domain/auth/handler/OAuth2SuccessHandler.java b/src/main/java/org/tuna/zoopzoop/backend/domain/auth/handler/OAuth2SuccessHandler.java index 665a44fe..28e66ee7 100644 --- a/src/main/java/org/tuna/zoopzoop/backend/domain/auth/handler/OAuth2SuccessHandler.java +++ b/src/main/java/org/tuna/zoopzoop/backend/domain/auth/handler/OAuth2SuccessHandler.java @@ -15,7 +15,7 @@ import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler; import org.springframework.stereotype.Component; import org.tuna.zoopzoop.backend.domain.auth.entity.AuthResult; -import org.tuna.zoopzoop.backend.domain.auth.service.RefreshTokenService; +import org.tuna.zoopzoop.backend.domain.auth.service.refresh.RefreshTokenService; import org.tuna.zoopzoop.backend.domain.member.entity.Member; import org.tuna.zoopzoop.backend.domain.member.repository.MemberRepository; import org.tuna.zoopzoop.backend.domain.member.service.MemberService; diff --git a/src/main/java/org/tuna/zoopzoop/backend/domain/auth/repository/RefreshTokenRepository.java b/src/main/java/org/tuna/zoopzoop/backend/domain/auth/repository/RefreshTokenRepository.java index e948eeb7..2d328fff 100644 --- a/src/main/java/org/tuna/zoopzoop/backend/domain/auth/repository/RefreshTokenRepository.java +++ b/src/main/java/org/tuna/zoopzoop/backend/domain/auth/repository/RefreshTokenRepository.java @@ -5,6 +5,7 @@ import org.tuna.zoopzoop.backend.domain.auth.entity.RefreshToken; import org.tuna.zoopzoop.backend.domain.member.entity.Member; +import java.time.LocalDateTime; import java.util.List; import java.util.Optional; @@ -13,4 +14,5 @@ public interface RefreshTokenRepository extends JpaRepository findBySessionId(String sessionId); Optional findByMember(Member member); List findAllByMember(Member member); + List findAllByExpiredAtBefore(LocalDateTime dateTime); } diff --git a/src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/CustomOAuth2UserService.java b/src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/oauth2/CustomOAuth2UserService.java similarity index 97% rename from src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/CustomOAuth2UserService.java rename to src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/oauth2/CustomOAuth2UserService.java index 56573948..1c3219b1 100644 --- a/src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/CustomOAuth2UserService.java +++ b/src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/oauth2/CustomOAuth2UserService.java @@ -1,4 +1,4 @@ -package org.tuna.zoopzoop.backend.domain.auth.service; +package org.tuna.zoopzoop.backend.domain.auth.service.oauth2; import lombok.RequiredArgsConstructor; import org.springframework.security.oauth2.client.userinfo.DefaultOAuth2UserService; diff --git a/src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/GoogleUserInfoService.java b/src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/oauth2/GoogleUserInfoService.java similarity index 96% rename from src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/GoogleUserInfoService.java rename to src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/oauth2/GoogleUserInfoService.java index 286992d5..77832d64 100644 --- a/src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/GoogleUserInfoService.java +++ b/src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/oauth2/GoogleUserInfoService.java @@ -1,4 +1,4 @@ -package org.tuna.zoopzoop.backend.domain.auth.service; +package org.tuna.zoopzoop.backend.domain.auth.service.oauth2; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; diff --git a/src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/KakaoUserInfoService.java b/src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/oauth2/KakaoUserInfoService.java similarity index 97% rename from src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/KakaoUserInfoService.java rename to src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/oauth2/KakaoUserInfoService.java index 682dbb17..52f0c784 100644 --- a/src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/KakaoUserInfoService.java +++ b/src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/oauth2/KakaoUserInfoService.java @@ -1,4 +1,4 @@ -package org.tuna.zoopzoop.backend.domain.auth.service; +package org.tuna.zoopzoop.backend.domain.auth.service.oauth2; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; diff --git a/src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/OAuth2UserInfoService.java b/src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/oauth2/OAuth2UserInfoService.java similarity index 85% rename from src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/OAuth2UserInfoService.java rename to src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/oauth2/OAuth2UserInfoService.java index 3ad044d5..358f0b50 100644 --- a/src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/OAuth2UserInfoService.java +++ b/src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/oauth2/OAuth2UserInfoService.java @@ -1,4 +1,4 @@ -package org.tuna.zoopzoop.backend.domain.auth.service; +package org.tuna.zoopzoop.backend.domain.auth.service.oauth2; import org.tuna.zoopzoop.backend.domain.member.entity.Member; diff --git a/src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/refresh/RefreshTokenCleanupService.java b/src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/refresh/RefreshTokenCleanupService.java new file mode 100644 index 00000000..a2bf3f22 --- /dev/null +++ b/src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/refresh/RefreshTokenCleanupService.java @@ -0,0 +1,24 @@ +package org.tuna.zoopzoop.backend.domain.auth.service.refresh; + +import lombok.RequiredArgsConstructor; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Service; +import org.tuna.zoopzoop.backend.domain.auth.entity.RefreshToken; +import org.tuna.zoopzoop.backend.domain.auth.repository.RefreshTokenRepository; + +import java.time.LocalDateTime; +import java.util.List; + +@Service +@RequiredArgsConstructor +public class RefreshTokenCleanupService { + private final RefreshTokenRepository refreshTokenRepository; + + @Scheduled(fixedRate = 60 * 60 * 1000) // 1시간마다 실행 + public void deleteExpiredTokens() { + List expiredTokens = refreshTokenRepository.findAllByExpiredAtBefore(LocalDateTime.now()); + if (!expiredTokens.isEmpty()) { + refreshTokenRepository.deleteAll(expiredTokens); + } + } +} \ No newline at end of file diff --git a/src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/RefreshTokenService.java b/src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/refresh/RefreshTokenService.java similarity index 92% rename from src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/RefreshTokenService.java rename to src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/refresh/RefreshTokenService.java index 5a1c4a0c..b34dceb0 100644 --- a/src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/RefreshTokenService.java +++ b/src/main/java/org/tuna/zoopzoop/backend/domain/auth/service/refresh/RefreshTokenService.java @@ -1,4 +1,4 @@ -package org.tuna.zoopzoop.backend.domain.auth.service; +package org.tuna.zoopzoop.backend.domain.auth.service.refresh; import lombok.RequiredArgsConstructor; import org.springframework.security.authentication.BadCredentialsException; @@ -49,8 +49,9 @@ public RefreshToken getBySessionId(String sessionId) { } public void deleteBySessionId(String sessionId) { - refreshTokenRepository.findBySessionId(sessionId) + RefreshToken token = refreshTokenRepository.findBySessionId(sessionId) .orElseThrow(() -> new BadCredentialsException("잘못된 요청입니다.")); + refreshTokenRepository.delete(token); } public void deleteByMember(Member member) { diff --git a/src/main/java/org/tuna/zoopzoop/backend/domain/member/controller/ApiV1MemberController.java b/src/main/java/org/tuna/zoopzoop/backend/domain/member/controller/ApiV1MemberController.java index e25f9869..b5a03287 100644 --- a/src/main/java/org/tuna/zoopzoop/backend/domain/member/controller/ApiV1MemberController.java +++ b/src/main/java/org/tuna/zoopzoop/backend/domain/member/controller/ApiV1MemberController.java @@ -9,7 +9,7 @@ import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; -import org.tuna.zoopzoop.backend.domain.auth.service.RefreshTokenService; +import org.tuna.zoopzoop.backend.domain.auth.service.refresh.RefreshTokenService; import org.tuna.zoopzoop.backend.domain.member.dto.req.ReqBodyForEditMember; import org.tuna.zoopzoop.backend.domain.member.dto.req.ReqBodyForEditMemberName; import org.tuna.zoopzoop.backend.domain.member.dto.res.*; diff --git a/src/main/java/org/tuna/zoopzoop/backend/global/security/SecurityConfig.java b/src/main/java/org/tuna/zoopzoop/backend/global/security/SecurityConfig.java index b3b7df00..72885399 100644 --- a/src/main/java/org/tuna/zoopzoop/backend/global/security/SecurityConfig.java +++ b/src/main/java/org/tuna/zoopzoop/backend/global/security/SecurityConfig.java @@ -11,7 +11,7 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.tuna.zoopzoop.backend.domain.auth.global.CustomOAuth2AuthorizationRequestResolver; import org.tuna.zoopzoop.backend.domain.auth.handler.OAuth2SuccessHandler; -import org.tuna.zoopzoop.backend.domain.auth.service.CustomOAuth2UserService; +import org.tuna.zoopzoop.backend.domain.auth.service.oauth2.CustomOAuth2UserService; import org.tuna.zoopzoop.backend.global.security.jwt.CustomAuthenticationEntryPoint; import org.tuna.zoopzoop.backend.global.security.jwt.JwtAuthenticationFilter;