낙관적 업데이트는 서버의 응답을 기다리지 않고, 사용자 인터페이스(UI)를 먼저 업데이트하는 기술이다. 이를 통해 사용자는 즉각적인 피드백을 받을 수 있어 애플리케이션이 더 빠르고 반응성이 높게 느껴진다. 이 기술은 서버 요청이 성공할 것이라는 가정 아래 동작하며, 실패 시 롤백(rollback)을 통해 상태를 복구한다.
낙관적 업데이트는 다음과 같은 상황에서 유용하게 사용된다:
반면, 결제 시스템이나 금융 거래처럼 데이터 무결성이 중요한 경우에는 비관적 업데이트(Pessimistic Update) 방식을 사용하는 것이 더 적합하다.
const { mutate } = useMutation(updateData, {
onMutate: async (newData) => {
// 이전 상태 저장
const previousData = queryClient.getQueryData(['dataKey']);
// 낙관적 업데이트
queryClient.setQueryData(['dataKey'], (old) => ({
...old,
...newData,
}));
return { previousData };
},
onError: (err, newData, context) => {
// 롤백
queryClient.setQueryData(['dataKey'], context.previousData);
},
onSettled: () => {
// 최종 데이터 동기화
queryClient.invalidateQueries(['dataKey']);
},
});
낙관적 업데이트는 사용자 경험을 크게 개선할 수 있는 강력한 도구이다. 하지만 모든 상황에 적합하지는 않으므로, 적용 여부를 신중히 판단하고 적절한 오류 처리 로직을 설계해야 한다.