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-fe: Tanstack Query 데이터 캐싱 정책 변경 #947

Merged
merged 2 commits into from
Nov 17, 2024

Conversation

github-actions[bot]
Copy link
Contributor

@github-actions github-actions bot commented Nov 12, 2024

목적

데모데이때 발생한 에러는 다음과 같습니다.

  • 세션이 만료된 토큰으로 Dashboard에 접근 이후 정상적인 토큰으로 Dashboard에 접근하면 정상적인 렌더링이 발생하지 않는다.

원인은 다음과 같습니다.

  • Tanstack Query에서 Error를 캐싱하고, 데이터 요청 이전 해당 에러 데이터를 사용함에 따라서 에러 페이지로 이동하게 된다.

[임시방법] 해당 문제를 해결하기 위한 방법으로 데모데이 때 발생한 문제를 해결한 방법은 다음과 같습니다.

  • gcTime을 0으로 설정하여 캐시데이터를 사용하지 않는다.

  • 문제: 이전 방법은 Tanstack Query의 캐싱 기능을 사용하지 못한다는 문제가 생깁니다. 이는 Tanstack Query의 강력한 기능을 사용하지 않는 것이라 생각하고, 렌더링에서의 사용성 역시 떨어뜨리는 문제라 판단했습니다.
    따라서 다음과 같은 문제 해결방법을 생각했습니다.

해결

  1. [해당 방법을 선택하여 구현하였습니다] 데이터 흐름에 맞춰 적절히 데이터 Clear해주기.
    에러 페이지에서 tanstack Query에서 사용하고 있는 데이터를 clear해준다.

  2. 로그인, 자동 로그인시 동적 라우팅으로 /dashboard 라우트로 이동하는 코드를 정적 라우팅으로 변경한다.
    해당 방법을 통해 문제를 해결할 수 있었지만, 기존 로그인 페이지에서 이미 가지고 있는 리소스를 재요청하는 문제가 있었습니다.

작업 세부사항

  • 에러 페이지에서 tanstack Query에서 사용하고 있는 데이터를 clear해준다.

참고 사항

  • 불필요한 로직을 조금 수정하였습니다.

아래의 별표줄 밑에 요구사항 ID만 작성해주세요. Prefix 금지!


REFAC_TANSTACK_CACHE

closes #946

@github-actions github-actions bot added frontend 프론트엔드 refactor 기존 코드 수정 labels Nov 12, 2024
Copy link
Contributor Author

1731380118.748409

Copy link
Contributor Author

1731380118.955759

@lurgi lurgi marked this pull request as ready for review November 12, 2024 02:56
Copy link
Contributor Author

1731380173.979059

Copy link
Contributor

@seongjinme seongjinme left a comment

Choose a reason for hiding this comment

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

러기 고생하셨어요. 말씀대로 gcTime을 0으로 두는 건 Tanstack Query의 이점을 버리는 방식이어서, 이 방법 밖에는 없는 건가 하는 생각을 계속 했었어요. 팀 블로그에 올려주신 글을 참고하니 수정해주신 내역에 대한 이해가 잘 되었어요.

일단 로컬 환경에서는 문제 없이 잘 돌아가는 것 같습니다. Approve 드리고, beta와 운영 환경에서도 동일하게 잘 동작하길 기대합니다. 감사합니다 🙏🏼

Copy link
Contributor

@llqqssttyy llqqssttyy left a comment

Choose a reason for hiding this comment

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

러기, 방법을 알아보느라 고생하셨습니다~ 현재 변경사항에 대해서는 이해를 했기 때문에 approve 드립니다.

시도했던 방법 중 정적 라우팅으로 변경하는 방안을 말씀해주셨는데, '정적 라우팅' 자체는 path parameter를 이용하지 않는 고정된 라우팅을 의미하는 단어로 알고 있어요. 그래서 정적 라우팅으로 어떻게 문제를 해결할 수 있는 건지 잘 이해하지 못했습니다. 이 부분은 만나서 이야기 해봐요~

@@ -114,6 +116,7 @@ export default function ErrorPage() {
} else if (error instanceof ApiError) {
status = error.statusCode;
if (status === 401) {
queryClient.clear();
Copy link
Contributor

Choose a reason for hiding this comment

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

gcTime 설정보다 이게 더 범용성 있는 로직이기 때문에 적절한 대처 같아요.👍
어짜피 401 에러가 발생하면 다시 로그인을 해야 하므로 모든 쿼리의 캐시를 지우는 것도 무리 없어 보입니다.

@lurgi lurgi merged commit 6b4e55c into fe/develop Nov 17, 2024
36 of 38 checks passed
@lurgi lurgi deleted the 946-fe-FAC_TANSTACK_CACHE branch November 17, 2024 01:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
frontend 프론트엔드 refactor 기존 코드 수정
Projects
Status: 완료
Development

Successfully merging this pull request may close these issues.

3 participants