[TIL] Day 86 리다이렉트 & 라우터

현서·2026년 3월 31일

[TIL] Flutter 9기

목록 보기
98/102

리다이렉트 & 라우터


라우터 (Router)란?

URL 또는 경로에 따라 어떤 화면을 보여줄지 결정하는 규칙.
앱에서 "이 경로로 가면 이 화면" 을 매핑해두는 것.

/home     → 홈 화면
/login    → 로그인 화면
/profile  → 프로필 화면

리다이렉트 (Redirect)란?

특정 조건에 따라 원래 요청한 경로 대신 다른 경로로 보내는 것.
라우터 안에서 조건 분기처럼 동작함.

/profile 접근 시도
  → 로그인 상태? → /profile 진입 허용
  → 비로그인?   → /login 으로 리다이렉트

Flutter — go_router 기준

Flutter에서 라우팅은 go_router 패키지를 가장 많이 씀.

기본 라우터 설정

final router = GoRouter(
  initialLocation: '/home',
  routes: [
    GoRoute(
      path: '/home',
      builder: (context, state) => const HomePage(),
    ),
    GoRoute(
      path: '/login',
      builder: (context, state) => const LoginPage(),
    ),
    GoRoute(
      path: '/profile',
      builder: (context, state) => const ProfilePage(),
    ),
  ],
);

리다이렉트 설정

final router = GoRouter(
  initialLocation: '/home',
  redirect: (context, state) {
    final isLoggedIn = FirebaseAuth.instance.currentUser != null;
    final isLoginPage = state.matchedLocation == '/login';

    if (!isLoggedIn && !isLoginPage) return '/login'; // 비로그인 → 로그인 페이지로
    if (isLoggedIn && isLoginPage) return '/home';     // 이미 로그인 → 홈으로
    return null; // 리다이렉트 없음, 그대로 진행
  },
  routes: [ ... ],
);
  • redirect에서 null 반환 → 현재 경로 그대로 진행
  • redirect에서 경로 반환 → 해당 경로로 이동

화면 이동 방법

// 이동 (현재 스택에 쌓기)
context.push('/profile');

// 이동 (현재 화면 교체, 뒤로 가기 불가)
context.go('/home');

// 뒤로 가기
context.pop();
메서드동작뒤로 가기
push스택에 추가가능
go스택 교체불가
pop이전 화면으로-

웹/서버에서의 리다이렉트

서버나 웹에서도 리다이렉트 개념은 동일하게 쓰임.

HTTP 리다이렉트 상태 코드

코드의미용도
301영구 이동URL이 영구적으로 바뀐 경우
302임시 이동로그인 후 원래 페이지로 돌아갈 때
307임시 이동 (메서드 유지)POST 요청을 그대로 다른 곳으로

FastAPI 리다이렉트 예시

from fastapi import FastAPI
from fastapi.responses import RedirectResponse

app = FastAPI()

@app.get("/old-path")
def old_path():
    return RedirectResponse(url="/new-path", status_code=301)

라우터 vs 리다이렉트 정리

라우터리다이렉트
역할경로 → 화면 매핑조건에 따라 경로 변경
시점앱 초기화 시 등록경로 진입 직전 실행
반환값화면 위젯새 경로 or null

느낀 점

라우터는 지도, 리다이렉트는 "이 길은 막혔으니 저쪽으로 가세요" 같은 우회로
로그인 여부에 따른 화면 분기는 리다이렉트로 처리하는 게 깔끔하고,
클라이언트 코드 곳곳에서 분기 처리하는 것보다 라우터 한 곳에서 관리하는 게 훨씬 유지보수가 편하다.

0개의 댓글