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

refactor: 봉사 모집글 목록 조회 캐시를 개선한다. #461

Merged
merged 5 commits into from
Apr 19, 2024

Conversation

hseong3243
Copy link
Collaborator

⛏ 작업 사항

  • 보호 동물 목록 조회 개선 사항을 참고하여 봉사 모집글 목록 조회 캐싱을 수정했습니다.
    • 업데이트 로직 수정
      • 기존에 복잡했던 캐싱된 봉사 모집글 업데이트 로직을 제거하고 서비스 로직에서 캐싱된 봉사 모집글 제거 -> 업데이트된 봉사 모집글 캐시에 저장과 같이 직관적인 구성으로 변경하였습니다.
    • 동시성 이슈 수정
      • 봉사 모집글 저장 시 캐시에서 조회 -> 최대 캐시 크기보다 크면 제거로 로직이 이루어진 탓에 동시성 이슈가 발생하고 있었습니다. 해당 로직을 일정 범위만큼 제거(removeRange(KEY, 0, -MAX_CACHE_SIZE-1))로 원자적인 연산이 이루어지도록 변경하였습니다.
    • 메서드 이름 및 로직을 보호 동물 캐시 리포지토리와 유사하게 변경
      • 전체적인 메서드 이름을 보호 동물 캐시 리포지토리와 유사하게 변경하였습니다.
      • 로직 동작 방식 또한 유사하게 변경하였습니다.
    • 캐시 미스 시 동작을 수정
      • 기존에는 캐시 미스 시 동작을 서비스 로직에서 결정하고 있었으나 해당 동작을 모두 캐시 리포지토리 안으로 이동시켰습니다.
      • 조건이 존재하지 않는 조회의 경우 항상 캐시 리포지토리를 경유합니다.
        • 입력된 사이즈가 최대 캐시 크기 이하인 경우에는 캐시 히트입니다.
        • 입력된 사이즈가 최대 캐시 크기를 초과하는 경우에는 캐시 미스입니다.

📝 작업 요약

  • 봉사 모집글 목록 조회 캐시 로직을 개선했습니다.

💡 관련 이슈

@hseong3243 hseong3243 self-assigned this Mar 13, 2024
@hseong3243 hseong3243 linked an issue Mar 13, 2024 that may be closed by this pull request
@github-actions github-actions bot added the 🔨 Refactor 코드 리팩토링 및 구조 개선 label Mar 13, 2024
Copy link

github-actions bot commented Mar 13, 2024

Test Results

284 files   - 6  284 suites   - 6   23s ⏱️ -4s
657 tests  - 2  657 ✅  - 2  0 💤 ±0  0 ❌ ±0 
666 runs   - 2  666 ✅  - 2  0 💤 ±0  0 ❌ ±0 

Results for commit 9083f54. ± Comparison against base commit 28e4936.

This pull request removes 16 and adds 14 tests. Note that renamed tests count towards both.
com.clova.anifriends.domain.recruitment.repository.RecruitmentRedisRepositoryTest$FindAllTest ‑ 성공: 캐싱된 목록은 최대 20개까지만 조회 가능
com.clova.anifriends.domain.recruitment.repository.RecruitmentRedisRepositoryTest$FindAllTest ‑ 성공: 캐싱된 목록이 없을 시 빈 리스트 반환
com.clova.anifriends.domain.recruitment.repository.RecruitmentRedisRepositoryTest$FindAllTest ‑ 성공: 캐싱된 목록이 요청 개수 이하인 경우 hasNext는 false
com.clova.anifriends.domain.recruitment.repository.RecruitmentRedisRepositoryTest$FindAllTest ‑ 성공: 캐싱된 목록이 있을 시 캐싱된 리스트 반환
com.clova.anifriends.domain.recruitment.repository.RecruitmentRedisRepositoryTest$GetRecruitmentsCountTest ‑ 성공: redis에 없으면 -1을 반환한다.
com.clova.anifriends.domain.recruitment.repository.RecruitmentRedisRepositoryTest$PushNewRecruitment ‑ 성공: 새로운 Recruitment 100개 생성, 30개 캐싱
com.clova.anifriends.domain.recruitment.repository.RecruitmentRedisRepositoryTest$PushNewRecruitment ‑ 성공: 새로운 Recruitment 캐싱
com.clova.anifriends.domain.recruitment.repository.RecruitmentRedisRepositoryTest$UpdateCachedRecruitmentsTest ‑ 성공: 캐시된 Recruitment 업데이트 됨
com.clova.anifriends.domain.recruitment.repository.RecruitmentRedisRepositoryTest$UpdateCachedRecruitmentsTest ‑ 성공: 캐시된 Recruitment 없는 경우 무시됨
com.clova.anifriends.domain.recruitment.service.RecruitmentServiceTest$FindRecruitmentsV2Test$WithoutCondition ‑ 성공: 캐시된 봉사 모집글 목록 사이즈가 요청 사이즈를 초과하는 경우 캐시된 목록을 이용
…
com.clova.anifriends.domain.recruitment.repository.RecruitmentRedisRepositoryTest$DeleteCachedRecruitmentTest ‑ 성공: 카운트 값이 1 감소한다.
com.clova.anifriends.domain.recruitment.repository.RecruitmentRedisRepositoryTest$FindAllTest ‑ 성공: 봉사 모집글이 없으면 빈 리스트를 반환한다.
com.clova.anifriends.domain.recruitment.repository.RecruitmentRedisRepositoryTest$FindAllTest ‑ 성공: 봉사 모집글이 있으면 사이즈 조회하여 반환한다.
com.clova.anifriends.domain.recruitment.repository.RecruitmentRedisRepositoryTest$FindAllTest ‑ 성공: 캐싱할 최대 크기보다 크면 DB에서 조회한다.
com.clova.anifriends.domain.recruitment.repository.RecruitmentRedisRepositoryTest$GetRecruitmentsCountTest ‑ 성공: 요소의 총 개수를 반환한다.
com.clova.anifriends.domain.recruitment.repository.RecruitmentRedisRepositoryTest$SaveRecruitmentTest ‑ 성공: 동시에 새로운 봉사 모집글이 추가되는 경우 손실되지 않는다.
com.clova.anifriends.domain.recruitment.repository.RecruitmentRedisRepositoryTest$SaveRecruitmentTest ‑ 성공: 새로운 Recruitment 100개 생성, 30개 캐싱
com.clova.anifriends.domain.recruitment.repository.RecruitmentRedisRepositoryTest$SaveRecruitmentTest ‑ 성공: 새로운 Recruitment 캐싱
com.clova.anifriends.domain.recruitment.repository.RecruitmentRedisRepositoryTest$SaveRecruitmentTest ‑ 성공: 카운트 값이 1 증가한다.
com.clova.anifriends.domain.recruitment.service.RecruitmentServiceTest$CloseRecruitmentTest ‑ 성공: 캐시 되어있던 봉사 모집글이 아니면 캐시 추가를 호출하지 않는다.
…

♻️ This comment has been updated with latest results.

long 파라미터에 인자로 int를 전달하지 않도록 수정함
캐시에서 삭제된 데이터가 없으면 캐시에 데이터를 추가하지 않도록 변경함
Copy link

sonarcloud bot commented Mar 15, 2024

@hseong3243 hseong3243 merged commit 621538e into dev Apr 19, 2024
4 checks passed
@hseong3243 hseong3243 deleted the refactor/#460 branch April 19, 2024 14:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🔨 Refactor 코드 리팩토링 및 구조 개선
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

refactor: 봉사 모집글 목록 조회 캐시를 개선한다.
2 participants