Next.js
React 상태 관리를 변경할 때 배포 전 확인할 것
상태 관리 로직을 변경한 후 배포하기 전에 로컬과 운영 환경의 동작을 충분히 확인하면 배포 후 문제를 크게 줄일 수 있다.
React 상태 관리 로직을 변경했다면, 로컬에서 괜찮았던 설정도 배포 환경에서는 다르게 보일 수 있다. 상태가 초기화되지 않거나, 업데이트가 반영되지 않거나, 예상과 다른 값이 보관되는 경우들이 있다.
상태의 초기값을 확인한다
상태의 초기값이 로컬과 운영에서 다를 수 있다. 특히 서버에서 받은 데이터를 초기값으로 사용하는 경우 주의해야 한다.
- 초기값이 null인가, 빈 배열인가, 기본값인가
- 로컬에서는 정상적으로 설정되지만 운영에서는 누락되는 건 아닌가
- 상태 초기화 함수가 조건부로 실행되고 있지는 않은가
useEffect의 의존성 배열을 검토한다
의존성 배열이 누락되거나 잘못되면 상태 업데이트가 예상대로 작동하지 않는다.
useEffect(() => {
// 이 코드는 언제 실행되는가?
updateState();
}, []); // 의존성 배열이 정확한가?
특히 다음을 확인한다.
- 의존성 배열이 완벽한가
- 필요한 값을 빠뜨리지 않았는가
- 불필요한 의존성은 없는가
이벤트 핸들러에서 상태가 제대로 업데이트되는지 확인한다
clickHandler, onChange 등의 이벤트에서 상태 업데이트 함수가 올바르게 호출되는지 확인한다. 브라우저 개발자 도구에서 다음을 체크한다.
const [count, setCount] = useState(0);
const handleClick = () => {
setCount(count + 1);
// 또는
setCount(prev => prev + 1); // 이 방식이 더 안전한가?
};
상태를 공유하는 컴포넌트들 간의 흐름을 추적한다
Props를 통해 상태를 여러 컴포넌트에서 공유한다면, 상태가 올바르게 전달되는지 확인한다.
React Developer Tools의 Profiler를 사용해서 렌더링 횟수와 상태 변화를 추적한다.
로컬과 운영에서 상태 값을 비교한다
로컬과 운영에서 같은 작업을 한 후 상태가 어떻게 다르게 보관되는지 확인한다.
console.log('현재 상태:', state);
콘솔에 상태를 출력해서 비교하면, 어느 부분에서 차이가 나는지 명확해진다.
상태 업데이트가 비동기라는 점을 명심한다
setState는 즉시 실행되지 않고 비동기로 처리된다. 특히 다음 코드는 문제가 될 수 있다.
setCount(count + 1);
console.log(count); // 새로운 값이 아니라 이전 값을 출력한다
상태 변화 후에 어떤 작업을 해야 한다면 useEffect나 콜백 함수를 사용해야 한다.
빌드 후 상태 관리 로직이 번들에 올바르게 포함되는지 확인한다
npm run build
빌드 중에 에러나 경고가 없는지 확인한다. 특히 상태 관리 라이브러리(Redux, Zustand 등)와 관련된 경고가 있다면 반드시 확인해야 한다.
모바일 환경에서도 상태 관리가 제대로 작동하는지 확인한다
모바일에서는 메모리가 제한되어 있으므로, 상태 크기가 크면 성능 문제가 발생할 수 있다.
# 모바일 시뮬레이터에서 테스트
# 또는 실제 모바일 기기에서 테스트
상태 변화 과정을 간단히 기록한다
이번에 변경한 상태 관리 로직의 흐름을 한 줄로 정리한다. 다음에 비슷한 문제가 나올 때 더 빠르게 대응할 수 있다.