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

[FE] react-query 캐싱 적용으로 인해 발생한 버그 해결 #716

Merged
merged 3 commits into from
Oct 10, 2024

Conversation

soi-ha
Copy link
Contributor

@soi-ha soi-ha commented Oct 7, 2024

issue

수정 목적

저번 버전에서 gc,stale time을 추가하면서 새로운 행사를 생성해도 이전 행사의 데이터가 캐싱되는 현상이 발생했습니다. 물론 1분이 지나고 새로고침을 하면 사라지긴 합니다. 하지만, 즉각 행사를 생성하는 경우가 발생할 수 있기 때문에 수정을 진행했습니다.

수정 사항

Problem 1

새로운 지출내역을 생성해도 이전 지출내역의 참여자가 자동으로 추가되지 않는 문제가 발생했습니다.

  • 해결

    Bill과 Member 에서 patch, post, delete를 요청하는 query hook에 queryClient.invalidateQueries({queryKey: [QUERY_KEYS.currentMembers]});를 추가해줬습니다.

    성공적으로 요청이 진행되면 currentMembers를 refetching합니다.

Problem 2

만들었던 행사가 존재하고 곧 바로 새로운 행사를 생성하면 이전 행사의 데이터가 들어오는 문제가 발생했습니다.

  • 해결

    새로운 행사를 생성해도 이전의 데이터가 캐싱되어 발생한 문제였기에, 요청이 성공적으로 진행되면 event가 refetching 되도록 했습니다.

    onSuccess: () => {
      queryClient.invalidateQueries({queryKey: [QUERY_KEYS.event]});
    },

+) 쿠키가 토다리 피드백에 남겨줬던 내용을 해당 PR에서 반영했어요!

위에 작성한 Problem2의 내용을 쿠키가 준 피드백 방향으로 수정했습니다~!
removeQueries()와 resetQueries() 중에 어떤 것이 더 적절할까? 테스트를 해봤어요.
removeQueries()는 행사를 생성할 때 queryKey 또한 모두 초기화하고 resetQueries()는 queryKey는 그대로 존재하고 값만 제거하더라구요. 따라서 removeQueries()가 더 적절할 것 같아서 해당 메소드를 사용했습니다!

onSuccess: () => {
      queryClient.removeQueries();
    },

@soi-ha soi-ha added 🖥️ FE Frontend 🚨 bug bug labels Oct 7, 2024
@soi-ha soi-ha added this to the v2.1.0 milestone Oct 7, 2024
@soi-ha soi-ha self-assigned this Oct 7, 2024
Copy link

github-actions bot commented Oct 7, 2024

Copy link
Contributor

@jinhokim98 jinhokim98 left a comment

Choose a reason for hiding this comment

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

소하 고생했어요!
확실히 캐시 시간이 설정되었다 보니 그동안 신경 쓰지 않아도 됐던 문제들이 발생하는 것 같아요. 그래도 덕분에 버그를 빨리 잡아서 다행입니다!

변경 사항을 보면서 우려되는 점이랑 제안이 하나 있는데 확인해보시면 좋을 것 같아 Request Change 했어요

const {mutate, mutateAsync, ...rest} = useMutation({
mutationFn: ({eventName, password}: RequestPostEvent) => requestPostEvent({eventName, password}),
onSuccess: () => {
queryClient.invalidateQueries({queryKey: [QUERY_KEYS.event]});
Copy link
Contributor

Choose a reason for hiding this comment

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

event 캐시 무효화가 되고 난 뒤에 QUERY_KEYS.steps, QUERY_KEYS.reports 것들도 같이 무효화가 됐을까요?

제 생각엔 navigate가 home으로 갔을 때 캐시를 전부 remove시켜도 좋을 것 같아요.
사용자가 홈으로 갔을 때 캐시를 전부 지운다면 여기서 event를 생성할 때 무효화 시키지 않아도 될 것 같아요

Copy link
Contributor Author

@soi-ha soi-ha Oct 10, 2024

Choose a reason for hiding this comment

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

쿠키가 토다리 PR에 남겨준 것을 확인했어요! 그래서 토다리 PR에 남겨준 방식으로 수정했습니댱 ~

Copy link

Copy link
Contributor

@Todari Todari left a comment

Choose a reason for hiding this comment

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

맛있어요~

@Todari Todari merged commit 0f22c76 into fe-dev Oct 10, 2024
2 checks passed
@Todari Todari deleted the feature/#711 branch October 10, 2024 07:11
@Todari Todari mentioned this pull request Oct 10, 2024
Todari pushed a commit that referenced this pull request Oct 10, 2024
* fix: onSuccess에 currentMembers queryKey refetching 추가하기

* fix: 행사를 생성할 때 마다, queryKey event refetching 추가하기

* fix: 새로운 행사 생성시 기존(이전 행사)의 query 모두 제거
Todari pushed a commit that referenced this pull request Oct 10, 2024
* fix: onSuccess에 currentMembers queryKey refetching 추가하기

* fix: 행사를 생성할 때 마다, queryKey event refetching 추가하기

* fix: 새로운 행사 생성시 기존(이전 행사)의 query 모두 제거
Todari added a commit that referenced this pull request Oct 10, 2024
* fix: 정산 초대하기에 누락된 margin 적용 (#682)

* refactor: 이벤트 페이지 api 호출 개선 (#686)

* refactor: event loader를 이용해서 이벤트에 필요한 정보 병렬적으로 데이터 불러옴

* refactor: 총 금액 업데이트 계산을 로더에서 제거

* feat: 토스 송금 기능 개선 (#688)

* test: prop 변경으로 스토리북 변경

* refactor: 클립보드 복사 후 토스 열기에서 토스 url스킴을 자세히 이용해 송금정보 자동 입력되도록 변경

* fix: 계좌번호 수정되지 않던 버그 해결 (#691)

* feat: staleTime, gcTime 설정 (#607)

* feat: 검색엔진 최적화를 위한 meta 태그 작성 (#696)

* chore: meta 태그 설정

* fix: 잘못 설정된 og:locale 태그 수정

* feat: TopNav 버튼 강조 및 계좌번호 접근 관련 (#697)

* feat: event login 페이지 제거

* feat: auth gate를 통해 관리자인지 체크할 수 있도록 변경

* feat: 관리자가 아니고 계좌번호가 입력되지 않았을 때, 정산자에게 문의를 하라는 토스트

* style: eventOutline -> event로 이름 변경

* refactor: 초대버튼의 역할을 외부로 분리해서 주입해주는 것으로 변경

* feat: 정산 초대 및 송금기능 타겟 환경에 따른 flow 개선 (#701)

* feat: 공유버튼 모바일과 데탑 분리

* feat: 송금버튼 새로운 반영사항 적용

* feat: 계좌번호 없을 때 금액 복사 기능 추가

* test: prop 변경으로 인한 스토리북 변경

* feat: 계좌번호 없을 때 금액 복사되는 onCopy 추가

* feat: 다나까 -> 요 체로 변경

* feat: 송금기능 페이지 이동으로 인해 memberId 추가

* feat: 송금 페이지 라우트

* feat: 송금하기 버튼을 눌렀을 때 navigate state로 정보 전달

* feat: 송금 방법(복사, 카카오페이, 토스) 제공

* feat: 아래 => 토스열기 명시적으로 변경

* feat: Banner 컴포넌트 생성

* feat: 세션스토리지 util 추가

* feat: 계좌번호 입력 유도 기능 구현

* feat: Flex div prop도 받도록 설정

* feat: 돌아가는 Chevron 컴포넌트 생성

* feat: 바깥 클릭 시 실행되는 컴포넌트 생성

* feat: Select 컴포넌트 제작

* feat: 요구사항 변경으로 인한 송금 플로우 변경

* feat: Select 컴포넌트 제작

* design: 텍스트 색깔 변경

* style: export 정리

* feat: 이벤트 별로 배너 상태 다르게 적용되도록 event token 인자 추가

* refactor: admin page 기능들 훅으로 분리

* feat: Footer 구현하기 (#709)

* fix: 토스 형식에 맞지 않는 은행이름 수정 (#713)

* feat: 멤버 추가할 때 버튼을 사용할 수 있도록 함 (#715)

* design: Button 컴포넌트에 Input의 height와 똑같은 크기의 semiLarge 사이즈 추가

* refactor: Flex컴포넌트의 스타일 추가 프롭을 otherStyle -> cssProp으로 이름 수정

* feat: emotion 에서 사용하는 css타입으로 Flex 컴포넌트의 스타일을 주입할 수 있도록 수정

* chore: Flex 컴포넌트의 프롭명이 달라짐에 따른 수정

* design: Input 컴포넌트가 width100%를 차지하도록 함

* feat: 멤버 추가 버튼을 클릭했을 때 멤버를 추가하도록 함수 구현

* feat: 멤버 스텝에 멤버 '추가'버튼을 추가하고 클릭되었을 때 실행할 로직 연결

* chore: props 이름 변경으로 인한 수정

* �fix: react-query 캐싱 적용으로 인해 발생한 버그 해결 (#716)

* fix: onSuccess에 currentMembers queryKey refetching 추가하기

* fix: 행사를 생성할 때 마다, queryKey event refetching 추가하기

* fix: 새로운 행사 생성시 기존(이전 행사)의 query 모두 제거

* fix: toast.error, toast.none이어도 모두 toast.confirm으로 출력되는 문제 (#720)

* chore: 사용하지 않고있는 변수 제거

* fix: 토스트 타입에 따라 다른 아이콘이 뜨도록 타입을 제대로 명시해서 넘겨줌

* feat: 사진 업로드 기능 (#723)

* fix: 기존에 잘못된 url 주소 변경

* feat: carousel 구현

* fix: api 요청 방법 변경

* fix: image post api 수정

* feat: image 불러오기 위한 기능 구현

* fix: 스크롤바가 보이지 않도록 변경

* design: Carousel 디자인 변경

* fix: 사진 추가 버튼 커스텀

* feat: images 불러오는 api 추가

* feat: Carousel component 구현 완료

* feat: 사진 추가 페이지 구현

* feat: 요청으로 불러오는 Images 타입 선언

* feat: 홈에서 이미지를 확인할 수 있는 기능 추가

* fix: 행사 생성 시 다른 query들 초기화하도록 변경

* fix: style이 제대로 적용되지 않던 문제 해결

* style: lint 적용

* fix: mock url 변경

* feat: imageDelete api 추가

* fix: service type 수정

* refactor: AddImagesPage 구조 변경 및 delete api 추가

* fix: 불필요한 z-index 제거₩

* fix: merge 충돌 해결

* feat: 초대하기를 링크 공유와 카카오톡을 선택할 수 있도록 변경 (#719)

* feat: 공유버튼 모바일과 데탑 분리

* feat: 송금버튼 새로운 반영사항 적용

* feat: 계좌번호 없을 때 금액 복사 기능 추가

* test: prop 변경으로 인한 스토리북 변경

* feat: 계좌번호 없을 때 금액 복사되는 onCopy 추가

* feat: 다나까 -> 요 체로 변경

* feat: 송금기능 페이지 이동으로 인해 memberId 추가

* feat: 송금 페이지 라우트

* feat: 송금하기 버튼을 눌렀을 때 navigate state로 정보 전달

* feat: 송금 방법(복사, 카카오페이, 토스) 제공

* feat: 아래 => 토스열기 명시적으로 변경

* feat: Banner 컴포넌트 생성

* feat: 세션스토리지 util 추가

* feat: 계좌번호 입력 유도 기능 구현

* feat: Flex div prop도 받도록 설정

* feat: 돌아가는 Chevron 컴포넌트 생성

* feat: 바깥 클릭 시 실행되는 컴포넌트 생성

* feat: Select 컴포넌트 제작

* feat: 요구사항 변경으로 인한 송금 플로우 변경

* feat: Select 컴포넌트 제작

* design: 텍스트 색깔 변경

* style: export 정리

* refactor: ClickOutsideDetector 사용

* feat: dropdown base 미트볼, 버튼 두 개 지원

* style: dropdown list z-index 추가

* feat: 드랍다운 버튼을 클릭할 때 드랍다운 리스트가 닫히는 기능 구현

* feat: 모바일에서 링크 초대와 카카오톡 초대 분리

* feat: 공유 메시지 변경

* feat: amplitude tracking 코드 작성 (#733)

* feat: amplitude 트래킹 코드 구현

Co-authored-by: JinHo Kim <[email protected]>

* chore: 불필요한 console.log제거

* feat: 이벤트 생성, 시작버튼 클릭, 지출내역 체류시간 track 함수 제작

* feat: track 코드에 진입 브라우저 프로퍼티 추가

* feat: 정산 시작하기 track 코드 추가

* feat: 이벤트 로더에서 총액 계산

* feat: 이벤트 초대 클릭 track 코드 추가

* feat: 지출내역 시작, 종료 tracking 코드 추가

* feat: 송금하기 tracking 코드 추가

* chore: 필요하지 않은 의존성 제거

* style: lint 맞춰줌

* fix: 개발 편의로 인한 sentry 주석 해제

---------

Co-authored-by: 이태훈 <[email protected]>
Co-authored-by: JinHo Kim <[email protected]>

* fix: 사진 추가한 후 다시 접속 시 반영이 되지 않는 버그 (#727)

* fix: post를 기다린 후 navigate시켜서 캐시 데이터가 remove 됨을 보장받도록 변경

* feat: 잘못 설정된 canSubmit, setIsPrevImageDeleted 변경

* feat: body 타입이 FormData인 경우 header를 삽입하지 않도록 함

* feat: images POST 요청을 requestPostWithoutResponse 함수를 이용하도록 함

* fix: get 메소드가 오류날 때, 무한 렌더링이 일어나는 문제 수정

---------

Co-authored-by: 이태훈 <[email protected]>
Co-authored-by: pakxe <[email protected]>

* fix: 송금에서 데스크탑 환경은 복사하기밖에 보이지 않도록 수정 (#735)

* feat: 데탑 기본 값을 복사하기로 변경

* fix: select box 클릭시 목록이 없어졌다가 생기는 오류 수정

* �fix: 이미지 추가 및 조회 기능에서 발생하는 버그 (#737)

* fix: 이미지 추가 페이지에서 발생하던 오류 수정

* design: 사진 추가하기 버튼 색상 변경

* fix: 사진이 없을 때, 홈에서 사진 조회를 할 수 없도록 변경

* fix: eventName에 따라 og태그가 변경되도록 수정 (#739)

* fix: meta tag 수정

* feat: 행사 이름에 따라 meta tag가 변경되도록 수정

* fix: EventPageLayout이 사용되지 않는 경우, 기존 meta 태그가 보이도록 변경

* fix: unmount시 기존의 태그로 변경되도록 적용

* style: lint 적용

---------

Co-authored-by: Soyeon Choe <[email protected]>
Co-authored-by: JinHo Kim <[email protected]>
Co-authored-by: Pakxe <[email protected]>
Co-authored-by: JinHo Kim <[email protected]>
Co-authored-by: pakxe <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
Status: ✅ Done
Development

Successfully merging this pull request may close these issues.

4 participants