Optimistic Update
사용자가 UI에서 어떤 행동을 했을 때, 서버 응답을 기다리지 않고 즉시 화면에 반영하는 방식
서버 요청이 성공할 것이라고 낙관(optimistic)적으로 가정하고 UI를 미리 업데이트
예시:
SNS에서 좋아요 버튼 클릭 → 서버 요청 완료 전이라도 버튼이 눌린 상태로 표시
채팅 앱에서 메시지 전송 → 서버 확인 전이라도 채팅창에 메시지 표시
UI 우선 업데이트
// 예: React에서 좋아요 버튼
const handleLike = () => {
setLiked(true); // 낙관적 업데이트: UI 먼저
api.likePost(postId).catch(() => setLiked(false)); // 실패 시 롤백
};
롤백 전략
서버 오류 시 원래 상태로 되돌림
낙관적 키(Key) 관리
클라이언트에서 임시 ID 부여 → 서버에서 확정 ID 받으면 교체
| 구분 | 정상 업데이트(Pessimistic) | 낙관적 업데이트(Optimistic) |
|---|---|---|
| UI 반영 시점 | 서버 응답 후 | 서버 응답 전 |
| UX | 느림, 기다림 존재 | 빠름, 즉시 반영 |
| 오류 처리 | 간단 | 롤백 필요 |
| 예시 | 게시글 등록 후 화면 반영 | 게시글 등록 버튼 누르자마자 화면 반영 |
서버 응답이 느린 경우
사용자 경험이 즉각적 피드백이 중요한 경우
충돌 가능성이 낮은 단일 행동 처리 시
낙관적 업데이트는 UX를 눈에 띄게 개선하지만, 서버와 클라이언트 상태 관리가 까다로움
개인적으로는 좋아요, 즐겨찾기, 장바구니 등 즉각적 반응이 필요한 기능에 적합하다고 생각됨
실시간 협업 툴에서는 낙관적 업데이트 + 충돌 해결 전략을 잘 섞어야 안정적