Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

perf: Redis 캐시를 통한 매칭 API 성능 개선 #237

Merged
merged 7 commits into from
Dec 2, 2024

Conversation

23tae
Copy link
Member

@23tae 23tae commented Dec 2, 2024

🔍️ 이 PR을 통해 해결하려는 문제가 무엇인가요?

어떤 기능을 구현한건지, 이슈 대응이라면 어떤 이슈인지 PR이 열리게 된 계기와 목적을 Reviewer 들이 쉽게 이해할 수 있도록 적어 주세요
일감 백로그 링크나 다이어그램, 피그마, 캡쳐를 첨부해도 좋아요

  • 매칭 결과 조회 관련 API의 성능을 개선했습니다.
    • 이 API는 자주 조회되지만 데이터 변경 가능성이 적어 캐싱에 적합하다고 판단했습니다.
    • Spring Cache + Redis를 활용하여 반복적인 DB 조회를 최소화하였습니다.

✨ 이 PR에서 핵심적으로 변경된 사항은 무엇일까요?

문제를 해결하면서 주요하게 변경된 사항들을 적어 주세요

  • Spring Cache 설정 추가
    • Redis를 캐시 저장소로 사용하는 CacheManager 구성
    • 각 캐시별 2일의 TTL 설정 (meeting-participation, match-result, partner-info)
    • Jackson ObjectMapper 설정을 통한 Kotlin 데이터 클래스 직렬화/역직렬화 처리
  • API에 캐시 적용
    @Cacheable(value = ["meeting-participation"], key = "#userId")
    @Cacheable(value = ["match-result"], key = "#meetingTeamId")
    @Cacheable(value = ["partner-info"], key = "#matchId + ':' + #userId")

🔖 핵심 변경 사항 외에 추가적으로 변경된 부분이 있나요?

없으면 "없음" 이라고 기재해 주세요

  • 캐시 적용 과정에서 발생한 Jackson 직렬화/역직렬화 이슈 해결
    • Kotlin 지원을 위한 KotlinModule 추가
    • Boolean 필드 'is' prefix 보존을 위한 USE_STD_BEAN_NAMING 설정
    • 타입 정보 포함을 위한 activateDefaultTyping 설정
    • Hibernate 컬렉션(PersistentBag) 변환 처리

🙏 Reviewer 분들이 이런 부분을 신경써서 봐 주시면 좋겠어요

개발 과정에서 다른 분들의 의견은 어떠한지 궁금했거나 크로스 체크가 필요하다고 느껴진 코드가 있다면 남겨주세요

🩺 이 PR에서 테스트 혹은 검증이 필요한 부분이 있을까요?

테스트가 필요한 항목이나 테스트 코드가 추가되었다면 함께 적어주세요

📌 PR 진행 시 이러한 점들을 참고해 주세요

  • Reviewer 분들은 코드 리뷰 시 좋은 코드의 방향을 제시하되, 코드 수정을 강제하지 말아 주세요.
  • Reviewer 분들은 좋은 코드를 발견한 경우, 칭찬과 격려를 아끼지 말아 주세요.
  • Review는 특수한 케이스가 아니면 Reviewer로 지정된 시점 기준으로 3일 이내에 진행해 주세요.
  • Comment 작성 시 Prefix로 P1, P2, P3 를 적어 주시면 Assignee가 보다 명확하게 Comment에 대해 대응할 수 있어요
    • P1 : 꼭 반영해 주세요 (Request Changes) - 이슈가 발생하거나 취약점이 발견되는 케이스 등
    • P2 : 반영을 적극적으로 고려해 주시면 좋을 것 같아요 (Comment)
    • P3 : 이런 방법도 있을 것 같아요~ 등의 사소한 의견입니다 (Chore)


📝 Assignee를 위한 CheckList

  • To-Do Item

23tae added 7 commits December 2, 2024 05:56
- ObjectMapper에 activateDefaultTyping 설정 추가
- 캐시된 객체의 타입 정보가 JSON에 포함되도록 수정
- LinkedHashMap을 원본 타입으로 역직렬화하지 못하는 문제 해결
- Boolean 타입 필드의 'is' prefix가 누락되어 반환되는 문제 해결
- Hibernate의 PersistentBag을 일반 ArrayList로 변환하는 로직 추가
- 캐시 저장 시 Hibernate 의존적인 컬렉션 타입 제거
- 코드 가독성을 위한 함수 분리
@23tae 23tae self-assigned this Dec 2, 2024
@23tae 23tae merged commit 6baaed0 into main Dec 2, 2024
1 check failed
@23tae 23tae deleted the perf/cache-match-api branch December 2, 2024 13:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant