useProfileData에서 queryFn의 에러 처리
안녕하세요 선생님!
대단한 질문은 아니고 의견을 여쭙고자 질문 남깁니다.
useProfileData 훅에서 queryFn에 profile 조회 실패 시 createProfile을 하는 로직을 짜주셨는데요
혹시 onError 콜백함수에 로직을 정의하지 않고 쿼리함수에 정의하신 이유가 따로 있을까요?
개인적으론 가독성상 onError에 넣는게 조금 더 명확하지않나 싶어서 의견을 여쭤보고 싶네요!
답변 1
1
안녕하세요 최성준님 이정환입니다.
결론부터 말씀드리면 해당 요청을 “실패한 쿼리”로 만들고 싶지 않았기 때문입니다.
onError는 말 그대로 쿼리가 실패한 이후에 호출되는 콜백입니다. 따라서 해당 콜백 함수가 호출되면 Tanstack Query 입장에서는 이미 해당 쿼리를 error 상태로 판단하고 retry(재 시도)를 하게 되거나 화면에 오류 메세지를 표기하는 등의 동작이 발생하게 됩니다.
하지만 “프로필이 없어서 조회가 실패했다” 같은 경우에는 진짜 에러 상황이 아니라, “아직 프로필이 생성되지 않은 정상적인 초기 상태”에 가깝습니다. 그래서 queryFn 안에서 먼저 프로필 조회를 시도하고 프로필이 존재하지 않는 경우에만 createProfile을 호출해서 정상적인 데이터로 복구한 뒤 최종적으로 값을 return하도록 설계했습니다.
이렇게 하면 결과적으로는 쿼리 결과가 성공한 것으로 간주됩니다. 그에 따라 불필요한 retry도 없고, UI 상 에러 메세지도 표기할 필요가 없어집니다.
말씀해주신 것처럼 가독성만 놓고 보면 onError가 더 명확해 보일 수는 있지만, 이 경우에는 에러를 에러로 취급하지 않는 것이 핵심 의도였기 때문에 queryFn 내부에서 처리하는 쪽을 선택했습니다.
회원가입 구현 (구현 후 최종 화면 출력 X)
0
40
2
(6.11) 회원가입시 프로필 정보 자동 생성하기 Q. 호출 순서 문의
0
36
1
명시적 타입 선언(콜론 타입 선언)과 as 타입 단언 차이
0
37
2
useMutation 적용 후 새로운 글 등록시 content가 안보여요
0
48
2
6.8 zustand 세션 질문입니다.
0
92
2
next.js 강의에서도 리액트 라이브러리들을 다뤄주시나요?
0
79
2
shadcn에서 radix ui와 base ui 차이는 뭔가요?
1
319
2
updateTodo 함수 생성시 화살표 함수 사용 안하는 이유
0
75
2
4.11 바로 투두 삭제가 안됨 질문
0
85
3
매개변수 updatedTodo 관련 질문
0
66
3
인증 정보가 만료되었을 때 라우트 가드 처리가 궁금합니다!
0
78
2
supabase를 사용하지 않을 경우 세션 데이터의 변경을 감지하고 스토어에 보관하는 방법이 궁금합니다!
0
69
2
4.6 id를 string으로 변경시 오류
0
64
2
리액트 타입스크립트 관련 질문있습니다.
0
62
1
소셜 로그인 구현하기 관련하여 질문이 있습니다!
0
98
2
ui 파일 질문드립니다.
0
76
1
tanstack query devtools에서 질문있습니다!
0
66
2
댓글 삭제 시 isPending 질문
0
64
2
두번째 예외상황에 대해 질문있습니다!
0
65
1
리액트 쿼리 질문입니다
1
72
2
개발자도구에서 components 가 안보입니다.
0
94
3
state 관리에 대한 정리
0
79
3
[(2.4) Shadcn/ui를 소개합니다] 강의 Shadcn 세팅 관련 질문 있습니다.
0
176
3
like 테이블에서 왜 create_at이 필요한지 궁금합니다.
0
78
1





