inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

한 입 크기로 잘라먹는 React.js 실전 프로젝트 - SNS 편

(4.7) 캐시 데이터 다루기 1 - 데이터 무효화 하기

'쿼리키 관리의 필요성' 도입부 설명에 대한 보충설명 필요

85

wonza4372

작성한 질문수 2

0

안녕하세요, 선생님. 강의 너무 잘 듣고 있습니다! 강의 수강 중 이해가 되지 않는 부분이 있어 질문남깁니다.

제가 어느 부분을 놓치고 있는지 보충 설명 해주시면 감사하겠습니다:)

react typescript react-query supabase zustand

답변 2

1

이정환 Winterlood

안녕하세요 wonza4372님 이정환입니다.

강의에서 안내드린 대로 'todos' 키를 갖는 캐시를 무효화(invalidate) 하면 해당 문자열을 포함하는 모든 쿼리키가 무효화 됩니다.

예를 들어, ['todos', id]나 ['todos', 'test'] 같이 ['todos']를 앞에 갖는 쿼리도 함께 무효화되어 리페칭이 일어날 수 있습니다.

이 내용은 Tanstack Query 공식문서에서도 다음과 같이 나와 있습니다.

image.png

https://tanstack.com/query/latest/docs/framework/react/guides/query-invalidation

위 그림에 포함된 코드블럭의 3번째 라인에 작성된 주석을 살펴보시면,
Invalidate every query with a key that starts with todos 라고 되어 있는데요

이를 한국말로 번역하면 'todos'로 시작하는 키를 가진 모든 쿼리를 무효화합니다 와 같습니다.

 

PS. ChatGPT에게 질의하셔서 받은 답변은 환각 현상으로 인해 언제나 잘못된 답변이 돌아올 수 있다는 점 유의 부탁드립니다. 따라서 정확한 내용은 항상 공식문서를 확인하시는게 좋습니다 😀

 

0

wonza4372

정성스런 답변 감사드립니다!
블로그 글을 보다가 순간적으로 서로 '같은' 쿼리, '다른' 쿼리를 비교해놓은 내용을 보고 이것과 헷갈린 것 같습니다.

늘 그랬듯 공식문서에 답이 있네요ㅎ,,
또한 ['todos', 'isDone']을 생성해서 테스트해보니 바로 답이 나왔습니다. 다음에는 공식문서 참고하고 조금 더 실험해보고 질문드리도록 하겠습니다😅

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. wonza4372님.

강의를 수강하시면서 쿼리 키 관리의 필요성에 대해 질문 주셔서 감사합니다. 이 부분은 데이터 캐싱과 관련된 중요한 개념입니다.

쿼리키와 리페칭

쿼리 무효화(invalidation)란 특정 쿼리 키로 캐싱된 데이터를 최신 상태로 유지하기 위해 특정 쿼리 키나 관련된 데이터를 재요청하는 메커니즘입니다.

이해 포인트:

  1. 쿼리키[‘todos’]와 [‘todos’, id]의 관계:

    • ['todos']는 모든 todo 리스트를 가져오는 쿼리를 식별하는 데 사용됩니다.
    • ['todos', id]는 특정 id를 가진 개별 todo 아이템을 식별하는 쿼리 키입니다.
    • 만약 ['todos']에 대한 무효화를 하게 될 경우, 일반적으로 이와 연관된 모든 쿼리들이 최신화됩니다.
  2. 불필요한 리페칭 발생:

    • ['todos']로 인해 무효화가 발생하면, 내부적으로는 React Query가 관련된 하위 쿼리들에 대한 리페칭을 트리거할 수 있습니다. 즉, ['todos', id] 또한 이 범주에 포함될 수 있습니다.
    • 이는 모든 하위 항목들이 해당 리스트에 속해 있으므로, 만약 리스트가 변경되면 해당 항목들도 최신 상태로 유지되어야 한다는 기본 가정 때문입니다.

잘못된 예상의 원인:

구글링이나 기본 자료에서 ['todos']['todos', id]가 독립적으로 동작할 것이라고 예상하셨다면, 이론상 가능할 수 있지만, React Query의 디자인에서 상위 데이터의 변경은 하위 데이터에도 영향을 미칠 수 있습니다.

참고할 수 있는 게시물:

질문자님의 이해를 돕기 위해 기존 답변을 참고하여 유사한 답변 링크를 추천드립니다. 베타 기능이므로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

회원가입 구현 (구현 후 최종 화면 출력 X)

0

65

2

(6.11) 회원가입시 프로필 정보 자동 생성하기 Q. 호출 순서 문의

0

56

1

명시적 타입 선언(콜론 타입 선언)과 as 타입 단언 차이

0

58

2

useMutation 적용 후 새로운 글 등록시 content가 안보여요

0

70

2

6.8 zustand 세션 질문입니다.

0

110

2

next.js 강의에서도 리액트 라이브러리들을 다뤄주시나요?

0

93

2

shadcn에서 radix ui와 base ui 차이는 뭔가요?

1

406

2

updateTodo 함수 생성시 화살표 함수 사용 안하는 이유

0

84

2

4.11 바로 투두 삭제가 안됨 질문

0

102

3

매개변수 updatedTodo 관련 질문

0

79

3

인증 정보가 만료되었을 때 라우트 가드 처리가 궁금합니다!

0

91

2

supabase를 사용하지 않을 경우 세션 데이터의 변경을 감지하고 스토어에 보관하는 방법이 궁금합니다!

0

85

2

4.6 id를 string으로 변경시 오류

0

74

2

리액트 타입스크립트 관련 질문있습니다.

0

71

1

소셜 로그인 구현하기 관련하여 질문이 있습니다!

0

108

2

ui 파일 질문드립니다.

0

90

1

tanstack query devtools에서 질문있습니다!

0

75

2

댓글 삭제 시 isPending 질문

0

72

2

두번째 예외상황에 대해 질문있습니다!

0

70

1

리액트 쿼리 질문입니다

1

85

2

개발자도구에서 components 가 안보입니다.

0

109

3

state 관리에 대한 정리

0

88

3

[(2.4) Shadcn/ui를 소개합니다] 강의 Shadcn 세팅 관련 질문 있습니다.

0

213

3

like 테이블에서 왜 create_at이 필요한지 궁금합니다.

0

87

1