template의 핵심 계약은 공통 UI가 아니라 재마운트다
layout은 공유 범위를 만들고, template은 그 안에서 page 전환마다 다시 실행할 작업을 맡는다.
| 비교 축 | layout.tsx | template.tsx | 선택 기준 |
|---|---|---|---|
| 라우트 이동 | 인스턴스 유지 | 새 인스턴스 생성 | 상태를 남길지 버릴지 |
| 대표 용도 | 공통 UI, provider, 서버 데이터 경계 | 전환 효과, 로거, 폼 초기화 | 유지보다 초기화가 중요한가 |
| children | 하위 layout/template/page 삽입 | 하위 page를 새 경계로 감쌈 | 둘 다 children을 렌더해야 함 |
| 상호작용 | 작은 client island 권장 | 필요하면 client component 가능 | 브라우저 API가 필요한 부분만 client |
| 남용 신호 | 너무 넓은 데이터 fetch | 공통 UI만 감싸는 template | 파일을 추가한 이유가 설명되는가 |