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

[Feature/413] "모임 활동 조회" API 캐시 적용 #414

Merged
merged 11 commits into from
Nov 24, 2024
Merged

Conversation

hosung-222
Copy link
Member

@hosung-222 hosung-222 commented Nov 23, 2024

Type of change

  • Feature : 새로운 기능 추가
  • Bug fix : 버그 수정
  • Refactor : 코드 리팩토링 작업
  • Document : 문서작업
  • Test : 테스트 코드 작성 및 테스트 작업
  • Style : 코드 스타일 및 포맷팅 작업
  • CI/CD : CI/CD 작업 수정
  • Chore : 패키지 매니저, 라이브러리 업데이트 등의 작업

PR Desciption

변경 사항 설명

다수의 사용자에 의해 같은 화면이 자주 조회되는 '모임 활동 조회' API에 Redis를 활용한 Look-Aside 캐시 전략을 적용했습니다.

  • "모임 활동 조회에" API 캐시 적용

    • 활동 수정시 캐시 무효화 적용
    • 활동 삭제시 캐시 무효화 적용
  • List 역직렬화를 위해 Wrapper Class 생성하여 사용하도록 로직 변경

Requirements for Reviewer

리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요
ex) 메서드 XXX의 이름을 더 잘 짓고 싶은데 혹시 좋은 명칭이 있을까요?

  • 추가로 캐시가 적용될 API에 대해 의견 부탁드립니다.

PR Log

PR 작업하면서 고민했던 내용, 해결한 내용, 고민 중인 내용 등

새롭게 배운 것

  • Java 8의 날짜/시간 타입인 LocalDateTime을 캐시할 때 문제가 발생하여 jackson-datatype-jsr310 모듈을 사용하여 해결하였습니다.
  • List를 그대로 캐싱하는경우 @Class 정보가 함께 붙어 캐시정보를 가져오는 과정에서 에러가 발생합니다. (Wrapper Class로 변경 필요)
  • 캐싱 대상에 대해 기본생성자가 존재하지 않으면 에러가 발생합니다.

고민 중인 사항

첨부 자료

  • 개선 전
image
  • 개선 후
image
  • 결과

1. 평균 응답 시간 (Average)

  • 캐싱 전: 33ms
  • 캐싱 후: 8ms
  • 캐싱 적용으로 평균 응답 시간이 약 75.76% 감소했습니다.

2. 최소 응답 시간 (Min)

  • 캐싱 전: 17ms
  • 캐싱 후: 4ms
  • 캐싱을 적용함으로써 최소 응답 시간이 76.47% 감소했습니다.

3. 최대 응답 시간 (Max)

  • 캐싱 전: 516ms
  • 캐싱 후: 34ms
  • 최대 응답 시간이 93.41% 감소하며 안정성이 크게 향상되었습니다.

관련 이슈

hosunglee222 and others added 10 commits November 15, 2024 00:49
@EnableConfig를 사용하여 캐싱 활성화

- 관련 : #413
Schedule ID 를 key로 캐시 적용

- 관련 : #413
캐시 데이터 제공시 검증 로직 포함되도록 변경

- 관련 : #413
Java 8의 날짜/시간 타입인 java.time.LocalDateTime 지원을 위해 Jackson을 위한 직렬화 기능을 위한 의존성 추가

- 관련 : #413
GenericJackson2JsonRedisSerializer 사용시 List를 Serialize/Deserialize하는 과정에서 에러 해결을 위해 Wrapper 클래스 생성

- 관련 : #413
생성한 wrapper 클래스로 로직 변경

- 관련 : #413
update 시 scheduleId 파라미터 추가

- 관련 : #413
활동 업데이트시 스케줄에 활동에 대한 캐시 무효화 작업 수행

- 관련 : #413
활동 삭제시 캐시 무효화를 위해 필요한 값 추가

- 관련 : #413
활동 삭제시 캐시 무효화 진행

- 관련 : #413
@hosung-222 hosung-222 added ✨ feature 기능 구현 관련 ♻️ refactor 리펙터링 관련 labels Nov 23, 2024
@hosung-222 hosung-222 requested a review from joowojr November 23, 2024 12:42
@hosung-222 hosung-222 self-assigned this Nov 23, 2024
@hosung-222 hosung-222 linked an issue Nov 23, 2024 that may be closed by this pull request
10 tasks
@github-actions github-actions bot added the 🔧 chore 기타 내용 label Nov 23, 2024
새로운 활동이 추가되어도 캐시에 반영되지 않는다면 데이터 불일치가 발생하므로 캐시 무효화 진행

- 관련 : #413
Copy link
Contributor

@joowojr joowojr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고하셨습니다!
레디스 캐싱을 통해 성능이 많이 향상 된 것 같아 보이네요.
일정 쪽에는 친구 생일 조회에서 캐싱을 도입할 수 있을 것 같습니다.

@hosung-222 hosung-222 merged commit b81172c into dev Nov 24, 2024
1 check passed
@hosung-222 hosung-222 deleted the feature/413 branch November 24, 2024 11:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
♻️ refactor 리펙터링 관련 ✨ feature 기능 구현 관련 🔧 chore 기타 내용
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Feature] 모임 기록 캐싱 적용
3 participants