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

backend/DANG-1260: 홈 화면 statistics api 캐시 불일치 문제 수정 #893

Merged
merged 2 commits into from
Sep 9, 2024

Conversation

opehn
Copy link
Collaborator

@opehn opehn commented Sep 8, 2024

작업 내용 (Content)

  1. 누락된 이벤트 추가
  • 기존에는 산책일지 생성 시에만 캐시를 업데이트 하게 되어있어서 산책일지 삭제, 강아지 생성/수정/삭제시에 DB와 캐시사이 불일치 문제가 발생했습니다
  • 누락된 이벤트를 추가했습니다
  1. 이벤트 수신시 캐시를 업데이트하는 방식에서 캐시를 무효화 하는 방식으로 수정
  • 배경 : 산책일지 삭제시, 강아지 두 마리 이상을 산책시킨 산책일지를 삭제했을 때 빈번하게 캐시가 업데이트 되지 않은 상태로 남아있는 버그 발생
  • 원인 : 트랜잭션이 끝나기 전에 이벤트 수신
  • 이벤트 수신 로그만 COMMIT 이전에 찍히고 실제 데이터를 가져오는 쿼리는 COMMIT 이후에 찍히고 있었지만, 미묘한 타이밍 문제로 트랜잭션의 변경사항이 반영되기 전 데이터를 가져오는 것으로 보임
  • 강아지가 두마리 이상일 때 더 많은 데이터를 조작하기에 자주 데이터 불일치가 발생하는 것으로 추정됨
  • 이를 해결하기 위해 이벤트 수신시 캐시를 삭제하고, 다시 홈 화면에 접속했을 때 데이터를 가져오도록 데이터의 fetch 타이밍을 뒤로 미루는 방식을 사용하도록 변경
  • setImmediate를 사용하는 방법보다 이 방법이 좀 더 직관적이고 버그 가능성이 낮은 것 같아 선택했습니다

링크 (Links)

기타 사항 (Etc)

Merge 전 필요 작업 (Checklist before merge)

  • PR 올리기 전 rebase 동기화를 하셨나요?
  • 마지막 줄에 공백 처리를 하셨나요?
  • 커밋 단위를 의미 단위로 나눴나요?
    • 예시
      • 코드 가독성을 위해 메서드를 추출하라
      • if-else 문을 if 문으로 분리하라
      • 불필요한 메서드를 인라인화하라
  • 커밋 본문을 작성하셨나요?
    • 예시
      • 함수는 한 가지 일을 해야 한다는 원칙에 따라 메서드를 추출합니다.
      • if-else는 컴파일 시 처리가 되어 재컴파일 없이 수정 할 수 없습니다.
        이에 따라 코드가 실행되는 순간에 실행이 결정되는 if 문으로 수정합니다.
  • 리뷰 요청 전 Self-Review로 의문점을 해결 하셨나요?
  • PR 리뷰 가능한 크기를 유지하셨나요?
  • CI 파이프라인이 통과가 되었나요?

- 위의 경우에 업데이트를 하지 않아 변경사항이 홈 화면에 반영되지 않는 문제가 있었다
- const 폴더를 생성하고 CACHE 관련 const를 cache-const.ts 파일에 이동시켰다. 다른 const들도 이 폴
더에 모으려고 함
- 이벤트 수신시 캐시를 업데이트하는 방식에서 캐시를 무효화 하는 방식으로 수정했다.
- 배경 : 산책일지 삭제시, 강아지 두 마리 이상을 산책시킨 산책일지를 삭제했을 때 빈번하게 캐시가
업데이트 되지 않은 상태로 남아있는 버그가 발생했다.
- 원인 : 트랜잭션이 끝나기 전에 이벤트 수신 로그가 찍히는 것을 확인했다.
- 실제 쿼리는 COMMIT 이후에 로그에 찍히고 있었지만, 미묘한 타이밍 문제로 트랜잭션의 변경사항이 반영되기 전 데이터를 가져오는 것으로 보인다.
- 강아지가 두마리 이상일 때 더 많은 데이터를 조작하기에 자주 데이터 불일치가 발생하는 것으로 추정된다.
- 이를 해결하기 위해 이벤트 수신시 캐시를 삭제하고, 다시 홈 화면에 접속했을 때 데이터를 가져오도
록 데이터의 fetch 타이밍을 뒤로 미루는 방식을 사용했다.
- setImmediate를 사용하는 방법보다 이 방법이 좀 더 직관적이고 버그 가능성이 낮은 것 같아 선택했다.
Copy link

vercel bot commented Sep 8, 2024

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
dangdang-walk ✅ Ready (Inspect) Visit Preview 💬 Add feedback Sep 8, 2024 3:56pm

@opehn opehn merged commit 2c8cc9e into main Sep 9, 2024
7 checks passed
@opehn opehn deleted the backend/DANG-1260 branch September 9, 2024 03:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant