화면 하나를 열 때 같은 요청이 수십 번 나가서 서버가 429를 돌려주고, 그 응답 때문에 로그아웃되던 문제입니다.
증상
- 특정 화면에 들어가면 가끔 로그인 화면으로 튕긴다
- 서버 로그에 429가 몰려 있다
원인
같은 데이터를 여러 컴포넌트가 따로 불렀고, 화면이 다시 그려질 때마다 요청이 또 나갔다. 응답 가로채기에서는 401뿐 아니라 429까지 “로그인 만료”로 처리하고 있었다.
해결
- 같은 데이터는 훅 하나에서만 부른다
- 429는 로그아웃 사유에서 뺀다
if (error.response?.status === 401) {
logout();
}
// 429 는 잠시 뒤 다시 시도
배운 것
장애 원인이 서버가 아니라 화면 쪽 호출 습관에 있을 수 있다.
같은 시기에 권한 판단도 한 곳으로 모았다. → 역할 이름을 버리고 권한으로 판단하기
입력 오류를 보여 주는 방법도 같이 바꿨다. → 입력 오류는 고칠 칸 바로 아래에 (일부 공개 예시)