← 전체 글로 돌아가기

웹 개발

낙관적 업데이트가 막힐 때 배포 전 체크

UI에서 낙관적 업데이트를 구현했을 때 서버와 상태가 불일치하는 문제를 배포 전에 검증하는 방법.

낙관적 업데이트는 강력하지만, 서버 응답이 바뀌면 UI 상태와 실제 데이터가 어긋난다. 배포 전에 미리 점검하면 운영 중 버그를 줄일 수 있다.

낙관적 업데이트 흐름 정리

먼저 어떤 액션이 낙관적으로 동작하는지 목록으로 만든다. 예를 들어:

  • 게시물 좋아요 (클릭 즉시 버튼 상태 변경)
  • 댓글 작성 (전송 버튼 누르면 즉시 목록에 추가)
  • 프로필 수정 (저장 클릭 시 즉시 화면 반영)

각 액션마다 정상 시나리오와 실패 시나리오를 생각해본다.

네트워크 지연 시뮬레이션

개발자 도구의 Network 탭에서 "Throttling"을 설정해서 느린 네트워크를 시뮬레이션한다. 그리고:

  • 액션 실행
  • 즉시 화면이 바뀌는지 확인
  • 서버 응답까지 기다렸을 때 화면이 다시 바뀌는지 확인
  • 응답 후 최종 상태가 맞는지 검증

이때 콘솔에서 오류가 나지 않는지도 같이 본다.

오류 복구 테스트

서버에서 요청을 거부하는 경우를 테스트해야 한다. API를 임시로 수정해서:

  • 404 반환
  • 403 권한 없음 반환
  • 500 서버 에러 반환

각 경우에 UI가 적절히 복구되는가 확인한다. 낙관적으로 바뀐 상태가 원래대로 되돌아가야 한다.

# 테스트를 위해 API 응답을 임시로 수정
# POST /api/like -> 403 Forbidden

상태 불일치 감지

만약 사용자가 액션을 실행했는데 서버에서는 실패했다면, 수동으로 다시 시도할 수 있는 UI가 있어야 한다. 또는 일정 시간 후 자동으로 동기화한다.

소셜 앱들이 "업로드 재시도" 버튼을 제공하는 이유가 이것이다. 구현했는지 확인한다.

연쇄 액션 테스트

사용자가 빠르게 여러 액션을 연달아 실행하는 경우를 생각해본다.

  • 좋아요 누르고 즉시 취소
  • 댓글 두 개를 빠르게 작성
  • 프로필과 설정을 동시에 수정

이런 경우에 상태가 꼬이지 않는지 테스트한다.

배포 전 최종 확인

배포하기 전에 하나씩 다시 확인한다:

  • 모든 낙관적 업데이트가 정상적으로 반영되는가?
  • 실패했을 때 복구되는가?
  • 오류 메시지가 명확한가?
  • 사용자가 재시도할 수 있는가?

하나라도 의심스럽다면 운영 환경에 나가기 전에 수정한다.