인프런 커뮤니티 질문&답변
useProfileData에서 queryFn의 에러 처리
작성
·
28
·
수정됨
0
안녕하세요 선생님!
대단한 질문은 아니고 의견을 여쭙고자 질문 남깁니다.
useProfileData 훅에서 queryFn에 profile 조회 실패 시 createProfile을 하는 로직을 짜주셨는데요
혹시 onError 콜백함수에 로직을 정의하지 않고 쿼리함수에 정의하신 이유가 따로 있을까요?
개인적으론 가독성상 onError에 넣는게 조금 더 명확하지않나 싶어서 의견을 여쭤보고 싶네요!
답변 1
1
안녕하세요 최성준님 이정환입니다.
결론부터 말씀드리면 해당 요청을 “실패한 쿼리”로 만들고 싶지 않았기 때문입니다.
onError는 말 그대로 쿼리가 실패한 이후에 호출되는 콜백입니다. 따라서 해당 콜백 함수가 호출되면 Tanstack Query 입장에서는 이미 해당 쿼리를 error 상태로 판단하고 retry(재 시도)를 하게 되거나 화면에 오류 메세지를 표기하는 등의 동작이 발생하게 됩니다.
하지만 “프로필이 없어서 조회가 실패했다” 같은 경우에는 진짜 에러 상황이 아니라, “아직 프로필이 생성되지 않은 정상적인 초기 상태”에 가깝습니다. 그래서 queryFn 안에서 먼저 프로필 조회를 시도하고 프로필이 존재하지 않는 경우에만 createProfile을 호출해서 정상적인 데이터로 복구한 뒤 최종적으로 값을 return하도록 설계했습니다.
이렇게 하면 결과적으로는 쿼리 결과가 성공한 것으로 간주됩니다. 그에 따라 불필요한 retry도 없고, UI 상 에러 메세지도 표기할 필요가 없어집니다.
말씀해주신 것처럼 가독성만 놓고 보면 onError가 더 명확해 보일 수는 있지만, 이 경우에는 에러를 에러로 취급하지 않는 것이 핵심 의도였기 때문에 queryFn 내부에서 처리하는 쪽을 선택했습니다.




