From e6937a5002552ce26db465504aa825d543d3e17a Mon Sep 17 00:00:00 2001 From: Yeonri Date: Fri, 20 Feb 2026 23:52:51 +0900 Subject: [PATCH 1/4] =?UTF-8?q?fix:=20/applications=20=EC=A4=91=EB=B3=B5?= =?UTF-8?q?=20=ED=99=9C=EC=84=B1=20=EC=A7=80=EC=9B=90=EC=84=9C=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=EC=8B=9C=20500=20=EC=98=A4=EB=A5=98=20=EB=B0=A9?= =?UTF-8?q?=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 활성 지원서 조회를 최신 1건 기준 메서드로 변경 - 지원서 제출 로직과 테스트 코드를 변경된 조회 메서드명에 맞춰 동기화 --- .../application/repository/ApplicationRepository.java | 11 ++--------- .../service/ApplicationSubmissionService.java | 3 ++- .../service/ApplicationSubmissionServiceTest.java | 4 +++- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/example/solidconnection/application/repository/ApplicationRepository.java b/src/main/java/com/example/solidconnection/application/repository/ApplicationRepository.java index 10bf6c04e..0df078b49 100644 --- a/src/main/java/com/example/solidconnection/application/repository/ApplicationRepository.java +++ b/src/main/java/com/example/solidconnection/application/repository/ApplicationRepository.java @@ -27,17 +27,10 @@ public interface ApplicationRepository extends JpaRepository """) List findAllByUnivApplyInfoIds(@Param("univApplyInfoIds") List univApplyInfoIds, @Param("status") VerifyStatus status, @Param("termId") long termId); - @Query(""" - SELECT a - FROM Application a - WHERE a.siteUserId = :siteUserId - AND a.termId = :termId - AND a.isDelete = false - """) - Optional findBySiteUserIdAndTermId(@Param("siteUserId") long siteUserId, @Param("termId") long termId); + Optional findTopBySiteUserIdAndTermIdAndIsDeleteFalseOrderByIdDesc(long siteUserId, long termId); default Application getApplicationBySiteUserIdAndTermId(long siteUserId, long termId) { - return findBySiteUserIdAndTermId(siteUserId, termId) + return findTopBySiteUserIdAndTermIdAndIsDeleteFalseOrderByIdDesc(siteUserId, termId) .orElseThrow(() -> new CustomException(APPLICATION_NOT_FOUND)); } diff --git a/src/main/java/com/example/solidconnection/application/service/ApplicationSubmissionService.java b/src/main/java/com/example/solidconnection/application/service/ApplicationSubmissionService.java index 9d7fcbe1f..e8c1144b4 100644 --- a/src/main/java/com/example/solidconnection/application/service/ApplicationSubmissionService.java +++ b/src/main/java/com/example/solidconnection/application/service/ApplicationSubmissionService.java @@ -62,7 +62,8 @@ public ApplicationSubmissionResponse apply(long siteUserId, ApplyRequest applyRe Long secondChoiceUnivApplyInfoId = univApplyInfoChoiceRequest.secondChoiceUnivApplyInfoId(); Long thirdChoiceUnivApplyInfoId = univApplyInfoChoiceRequest.thirdChoiceUnivApplyInfoId(); - Optional existingApplication = applicationRepository.findBySiteUserIdAndTermId(siteUser.getId(), term.getId()); + Optional existingApplication = + applicationRepository.findTopBySiteUserIdAndTermIdAndIsDeleteFalseOrderByIdDesc(siteUser.getId(), term.getId()); int updateCount = existingApplication .map(application -> { validateUpdateLimitNotExceed(application); diff --git a/src/test/java/com/example/solidconnection/application/service/ApplicationSubmissionServiceTest.java b/src/test/java/com/example/solidconnection/application/service/ApplicationSubmissionServiceTest.java index 91877d9d9..4b3442536 100644 --- a/src/test/java/com/example/solidconnection/application/service/ApplicationSubmissionServiceTest.java +++ b/src/test/java/com/example/solidconnection/application/service/ApplicationSubmissionServiceTest.java @@ -89,7 +89,9 @@ void setUp() { ApplicationSubmissionResponse response = applicationSubmissionService.apply(user.getId(), request); // then - Application savedApplication = applicationRepository.findBySiteUserIdAndTermId(user.getId(), term.getId()).orElseThrow(); + Application savedApplication = applicationRepository + .findTopBySiteUserIdAndTermIdAndIsDeleteFalseOrderByIdDesc(user.getId(), term.getId()) + .orElseThrow(); assertAll( () -> assertThat(response.totalApplyCount()) .isEqualTo(APPLICATION_UPDATE_COUNT_LIMIT), From 104010964de9345d0f002abdb2a06dd85a80d932 Mon Sep 17 00:00:00 2001 From: Yeonri Date: Fri, 20 Feb 2026 23:58:31 +0900 Subject: [PATCH 2/4] =?UTF-8?q?fix:=20=ED=99=9C=EC=84=B1=20=EC=A7=80?= =?UTF-8?q?=EC=9B=90=EC=84=9C=20=EC=A4=91=EB=B3=B5=20=EB=AC=B8=EC=A0=9C?= =?UTF-8?q?=EC=9D=98=20=EA=B7=BC=EB=B3=B8=20=ED=95=B4=EA=B2=B0=20TODO=20?= =?UTF-8?q?=EB=AA=85=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 최신 1건 선택 로직이 임시 회피임을 주석으로 명확화 - DB 유일성 제약 도입 후 우회 조회 제거 필요사항을 기록 --- .../application/repository/ApplicationRepository.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/example/solidconnection/application/repository/ApplicationRepository.java b/src/main/java/com/example/solidconnection/application/repository/ApplicationRepository.java index 0df078b49..f9dda3096 100644 --- a/src/main/java/com/example/solidconnection/application/repository/ApplicationRepository.java +++ b/src/main/java/com/example/solidconnection/application/repository/ApplicationRepository.java @@ -27,6 +27,9 @@ public interface ApplicationRepository extends JpaRepository """) List findAllByUnivApplyInfoIds(@Param("univApplyInfoIds") List univApplyInfoIds, @Param("status") VerifyStatus status, @Param("termId") long termId); + // TODO: 근본 해결 필요 + // 지원서 유일성은 DB 제약으로 강제하고 + // 이 조회는 임시 회피 로직을 제거하는 방향으로 수정 필요. Optional findTopBySiteUserIdAndTermIdAndIsDeleteFalseOrderByIdDesc(long siteUserId, long termId); default Application getApplicationBySiteUserIdAndTermId(long siteUserId, long termId) { From 3ce5b0f5ed8939ab53b3638c0e4c7c408fd3dc90 Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Sat, 21 Feb 2026 00:20:31 +0900 Subject: [PATCH 3/4] =?UTF-8?q?hotfix:=20=EB=8C=80=ED=95=99=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=EC=BA=90=EC=8B=B1=20=EC=9E=84=EC=8B=9C=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../university/service/UnivApplyInfoQueryService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoQueryService.java b/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoQueryService.java index 5c11911ad..8e7943ae0 100644 --- a/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoQueryService.java +++ b/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoQueryService.java @@ -30,7 +30,8 @@ public class UnivApplyInfoQueryService { * - 대학교(University) 정보와 대학 지원 정보(UniversityInfoForApply) 정보를 조합하여 반환한다. * */ @Transactional(readOnly = true) - @ThunderingHerdCaching(key = "univApplyInfo:{0}", cacheManager = "customCacheManager", ttlSec = 86400) + // todo: 현재 레디스 관련 에러 발생중으로 임시 주석처리, 추후 원인 분석 후 적용 필요 + // @ThunderingHerdCaching(key = "univApplyInfo:{0}", cacheManager = "customCacheManager", ttlSec = 86400) public UnivApplyInfoDetailResponse getUnivApplyInfoDetail(Long univApplyInfoId) { UnivApplyInfo univApplyInfo = univApplyInfoRepository.getUnivApplyInfoById(univApplyInfoId); From 938924a2f99c33b602ab610f514277991a12f315 Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Sat, 21 Feb 2026 00:26:44 +0900 Subject: [PATCH 4/4] =?UTF-8?q?hotfix:=20=EB=8C=80=ED=95=99=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=EC=BA=90=EC=8B=B1=20=EC=9E=84=EC=8B=9C=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../university/service/UnivApplyInfoQueryService.java | 6 +++--- .../university/service/UnivApplyInfoQueryServiceTest.java | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoQueryService.java b/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoQueryService.java index 8e7943ae0..149b87e9f 100644 --- a/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoQueryService.java +++ b/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoQueryService.java @@ -30,8 +30,7 @@ public class UnivApplyInfoQueryService { * - 대학교(University) 정보와 대학 지원 정보(UniversityInfoForApply) 정보를 조합하여 반환한다. * */ @Transactional(readOnly = true) - // todo: 현재 레디스 관련 에러 발생중으로 임시 주석처리, 추후 원인 분석 후 적용 필요 - // @ThunderingHerdCaching(key = "univApplyInfo:{0}", cacheManager = "customCacheManager", ttlSec = 86400) + @ThunderingHerdCaching(key = "univApplyInfo:{0}", cacheManager = "customCacheManager", ttlSec = 86400) public UnivApplyInfoDetailResponse getUnivApplyInfoDetail(Long univApplyInfoId) { UnivApplyInfo univApplyInfo = univApplyInfoRepository.getUnivApplyInfoById(univApplyInfoId); @@ -43,7 +42,8 @@ public UnivApplyInfoDetailResponse getUnivApplyInfoDetail(Long univApplyInfoId) } @Transactional(readOnly = true) - @ThunderingHerdCaching(key = "univApplyInfoTextSearch:{0}", cacheManager = "customCacheManager", ttlSec = 86400) + // todo: 현재 레디스 관련 에러 발생중으로 임시 주석처리, 추후 원인 분석 후 적용 필요 + // @ThunderingHerdCaching(key = "univApplyInfoTextSearch:{0}", cacheManager = "customCacheManager", ttlSec = 86400) public UnivApplyInfoPreviewResponses searchUnivApplyInfoByText(String text) { Term term = termRepository.findByIsCurrentTrue() .orElseThrow(() -> new CustomException(CURRENT_TERM_NOT_FOUND)); diff --git a/src/test/java/com/example/solidconnection/university/service/UnivApplyInfoQueryServiceTest.java b/src/test/java/com/example/solidconnection/university/service/UnivApplyInfoQueryServiceTest.java index 83d960ca9..b04d2d609 100644 --- a/src/test/java/com/example/solidconnection/university/service/UnivApplyInfoQueryServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/UnivApplyInfoQueryServiceTest.java @@ -192,7 +192,8 @@ class 각각의_검색_대상에_대해_검색한다 { ); } - @Test + // todo: 현재 레디스 관련 에러 발생중으로 임시 주석처리, 추후 원인 분석 후 적용 필요 + // @Test void 캐시가_적용된다() { // given String text = "Guam";