---
id: pattern-navigation
title: "Navigation Pattern"
category: "Pattern_Mobile"
status: "draft"
verification_status: "conceptual"
canonical_id: ""
aliases: ["navigation", "내비게이션 패턴", "routing", "deep link", "navigation stack"]
duplicate_of: ""
source_trust_level: "A"
confidence_score: 0.83
created_at: 2026-06-13
updated_at: 2026-06-13
review_reason: ""
merge_history: []
tags: ["pattern", "mobile", "navigation", "routing", "platform-independent"]
raw_sources: ["일반 모바일/프런트엔드 공학 지식"]
applied_in: []
github_commit: ""
---

# [[Navigation Pattern]]

## 🎯 한 줄 통찰 (One-line insight)
내비게이션은 "화면 간 이동과 스택/상태를 관리" 하는 패턴으로, *경로를 선언적·직렬화 가능*하게 두고 딥링크/뒤로가기/상태 복원을 1급으로 다뤄야 한다.

## 🧠 핵심 개념 (Core concepts)
1. **선언적 라우트:** URL/route 로 화면을 표현(직렬화 가능).
2. **스택/탭/드로어:** 내비 구조 유형.
3. **딥링크:** 외부에서 특정 화면 직접 진입.
4. **파라미터 전달:** 라우트 인자 + 타입 안전.
5. **상태 복원:** 프로세스 죽어도 내비 상태 복구.

## 📖 세부 내용 (Details · 패턴 명세)
- **Problem (언제 쓰나):** 다화면 앱의 이동/히스토리/딥링크 관리.
- **사용 조건:** 라우트 정의; 화면 식별자; 인자 직렬화.
- **장점:** 일관된 이동, 딥링크, 뒤로가기, 테스트성.
- **단점:** 설정 복잡, 깊은 스택 메모리, 타입 안전 관리.
- **대안:** 단일 화면(소규모), 조건부 렌더(상태 기반), 코디네이터 패턴.
- **실패 사례:** 객체를 라우트 인자로 직접(직렬화 불가/딥링크 깨짐); 스택 누수(화면 안 떼어냄); 뒤로가기 상태 불일치; 딥링크 시 부모 스택 없어 길 잃음.

## 💻 코드 패턴 (Code patterns)
```text
routes = { '/home': Home, '/item/:id': ItemDetail }   # 선언적 + 직렬화 가능 인자
navigate('/item/42')           # id 만 전달(객체 X)
deepLink('myapp://item/42') -> rebuild stack [Home, ItemDetail]
restore(savedNavState)         # 프로세스 복원
```

## ⚖️ 모순 및 업데이트 (Contradictions & updates)
"상태로 화면 전환" vs "라우터" — 작은 앱은 상태 조건부가 단순하나, 딥링크/히스토리가 필요하면 선언적 라우터가 필수.

## 🛠️ 적용 사례 (Applied in summary)
일반 모바일/SPA. (AstraAI 는 패널 기반이라 직접 사례 없음 — 화면 식별/복원 원리는 동일.)

## 🔗 지식 그래프 (Knowledge Graph)
- **상위/루트:** [[패턴 카탈로그 인덱스]]
- **관련 개념:** [[State Management Pattern]], [[React State Pattern]], [[모바일 개발 가이드]]
- **참조 맥락:** 작은 모델이 다화면 앱의 이동을 설계할 때 참조.

## 📚 출처 (Sources)
- [S1] 일반 내비게이션/라우팅 지식

## 📝 변경 이력 (Change history)
- 2026-06-13: 프로젝트 독립 패턴 카드 작성.
