[트러블슈팅] 로그아웃 후 뒤로가기 방지 및 리다이렉트 무한 로딩 해결

Melcoding·2026년 5월 12일

1. 문제 발생

  • 프로젝트 목록, 세부 페이지에서 로그아웃 후 브라우저 뒤로가기를 클릭하는 경우 프로젝트 화면 진입 및 무한 로딩 화면 발생

2. 원인

  • 뒤로가기에 대해 생각하지 못하고 진입을 막지 않음

3. 해결방안

  • 라우트 가드로 layout을 활용하여 로그인 사용자만 진입하는 페이지의 라우트만 묶어서 member-only-layout 컴포넌트를 적용하여 user 정보 여부를 확인하여 없는 경우 홈화면으로 이외에는 해당 페이지 진입하도록 설정
import { useAuth } from "@/hooks/useAuth";
import { Navigate, Outlet } from "react-router";
import GlobalLoader from "../GlobalLoader";


export default function MemberOnlyLayout() {
	const { user, loading } = useAuth();
	
	if (loading) return <GlobalLoader />;
	
	if (!user) return <Navigate to={"/"} replace={true} />;
	
	return <Outlet />;
}

4. 해결방안 도입 후 추가 문제 발생

  • 레이아웃을 적용하면서 리팩토링으로 라우트를 컴포넌트로 분리하고 글로벌 로딩화면을 만들어 적용한 후 배포했는데 아래와 같이 2가지 문제가 발생

1) 리다이렉트 로그인이 안됨

  • 개발 당시의 문제처럼 로그인 한 후 돌아왔을 때 로그인 안된 상태로 돌아옴
  • 유저 정보를 받아오지 못하고 null 상태인 것으로 추측됨

2) 리다이렉트 로그인 후 홈화면으로 넘어올 때 글로벌 로딩화면의 UI가 이상해짐

  • 글로벌 로더의 높이 설정이 다른 컴포넌트와 충돌하여 발생한 것으로 추측됨

5. 추가 문제 해결

아래와 같이 단계적으로 문제를 해결하기 위해 시도함

1) 정상동작을 위해 롤백

  • 로그인이 안되면 사이트를 사용할 수 없기때문에 머지 이전으로 롤백

2) 리다이렉트 로그인 문제점 파악

원인 추측

  • 바뀐 부분을 생각했을 때, useAuth를 App.tsx에서도 요청하고 새로 만든 MemberOnlyLayout 컴포넌트에서도 요청해서 2개 충돌일 것이라 추측

디버깅 시도

결과

  • 리다이렉트 로그인은 실제 배포 환경에서만 작동해서 디버깅을 하려면 배포해서 디버깅을 해야하므로 그렇다면 로그인 부분을 리팩토링을 통해 코드를 정리하고 해결한 후 배포하여 테스트 해보는 것으로 판단했음
  • 그렇다면 현재 문제 발생한 부분을 해결하기 위해서 어떤 방안이 있을까 생각함

3) App.tsx에 join 진입시 사용자 로그인 여부 판단과 동일하게 project 관련 path도 예외처리 진행

  • 임시 조치로 해당 페이지에 진입하지 못하도록 예외처리하여 배포
  • /projects 진입 여부 모두 테스트한 후 배포(dev, preview, test 사이트)
  • 배포 후 리다이렉트 로그인 환경에서도 동작하는지 확인 완료
const isProjectPath = location.pathname.startsWith("/projects");

if (!user && isProjectPath) {

return <Navigate to="/" replace />;

6. 결과 및 느낀점

  • user 정보 여부에 따른 예외처리로 projects 페이지 진입을 막아 뒤로가기 이슈 해결
  • 이번 트러블슈팅을 통해 '중요 로직 수정 시 리팩토링 범위를 어디까지 가져갈 것인가'에 대해 깊이 고민하게 되었음. 로그인 등 민감한 영역을 수정함과 동시에 리팩토링을 진행하다 보니 예상치 못한 부작용이 발생했을 때 원인 파악이 어려웠음. 앞으로는 현재 코드에서 최소한으로 수정 작업하여 문제를 해결한 이후에 리팩토링으로 근본적으로 작업을 해야겠다고 생각함
  • 현재 리다이렉트의 불안정성에 대해 인지하고 배포한 경우에만 테스트할 수 있는 치명적인 약점을 어떻게 풀어낼지에 대해서도 고민하고 내가 다음 서비스를 만든다면 Firebase Auth 대신 다른 것을 도입해야겠다고 생각함

7. 다음 작업할 것

  • 로그인 코드 리팩토링
profile
https://github.com/meldyssey

0개의 댓글