✅ 관련 PR: #77
✅ 관련 Issue: #67
✅ 적용 범위: 학업 요약(summary), 학기 정보(semester), 졸업 요건(graduation-progress)
기존에는 다음과 같은 API가 호출될 때마다 RDS에 직접 쿼리를 수행했습니다.
하지만 이 데이터는 포털 재연동 전까지 변경되지 않으며, 같은 사용자의 동일 요청이 반복적으로 발생하기 때문에 Redis를 통한 캐싱으로 다음과 같은 개선 효과를 기대할 수 있습니다:
Redis Key 설계
도메인 | Redis Key Format |
---|---|
학업 요약 | student:{studentId}:summary |
학기별 정보 | student:{studentId}:semesters |
졸업 요건 진행 현황 | student:{studentId}:graduation |
RedisCacheStore 유틸 메서드
// 저장
redisCacheStore.setAcademicSummary(studentId, response);
redisCacheStore.setSemesterList(studentId, response);
redisCacheStore.setGraduationProgress(studentId, response);
// 조회
redisCacheStore.getAcademicSummary(studentId, ResponseClass.class);
redisCacheStore.getSemesterList(studentId, ElementClass.class);
redisCacheStore.getGraduationProgress(studentId, ResponseClass.class);
// 삭제
redisCacheStore.deleteAllByStudentId(studentId);
캐시 적용 예시: Summary API
public AcademicSummaryResponse getAcademicSummary(UUID studentId) {
AcademicSummaryResponse cached = redisCacheStore.getAcademicSummary(studentId, AcademicSummaryResponse.class);
if (cached != null) return cached;
// DB 조회 후 캐싱
...
redisCacheStore.setAcademicSummary(studentId, response);
return response;
}
캐시 무효화 처리: 포털 재연동
@PostMapping("/refresh")
public ResponseEntity<?> refreshAndSync(...) {
...
redisCacheStore.deleteAllByStudentId(studentId); // 캐시 무효화
...
}
서버 교체 작업 후 리포트 추가 예정!
Redis 캐싱 전략은 학사 정보의 특성과 구조에 잘 맞는 선택이었으며,
읽기 성능 개선 + 중복 처리 방지 + DB 부하 분산 측면에서
특히 수강신청/성적조회 피크 구간에 효과적일 것이라고 생각합니다.