---
name: Chapter Decisions
description: 프론트엔드 챕터 토론장에서 합의한 결정(keep-going/closed) 11건과 이 템플릿의 적용 상태·게이트 매핑. decisions는 원칙(P-xxx)보다 우선한다.
type: coding-standard
category: decisions
---

> 출처: 팀 공통 결정 문서 `decisions/` (2026-07-27 발췌). **결정 개정은 원본이 먼저다** — 새 결정이 원본에 추가되면 이 표를 따라 갱신한다. 원칙(P-xxx)은 권고, **결정은 챕터 합의라 더 세다**: keep-going 결정 위반은 리뷰 BLOCKER, "강제하지 않음"(closed) 결정에 대해선 리뷰에서 강제 지적을 하지 않는다.

# 챕터 합의 결정 11건 — 템플릿 적용 상태

| 결정                                    | 기준                                                                                                                                                    | 이 템플릿에서                                                                                                                                                                                                                                                                                      |
| --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 중첩 삼항 (keep-going)                  | 한 표현식 안 2단계+ 겹치면 밖으로 분리. lint 기본룰 채택                                                                                                | **oxlint `no-nested-ternary`가 기계 강제** (.oxlintrc.json). 해소 선례: lookup record·얼리 리턴                                                                                                                                                                                                    |
| 배열 타입 표기 (채택)                   | 새 배열 타입은 `T[]`                                                                                                                                    | **oxlint `typescript/array-type`이 기계 강제**                                                                                                                                                                                                                                                     |
| barrel file (강제하지 않음)             | 사용 강제 없음. re-export index에 구현 코드 금지                                                                                                        | 01-architecture P-002 주석 반영 완료 — 슬라이스 경계 index 하나(FSD)만 유지, 중첩·내부 barrel 지양, 얇은 재-export만                                                                                                                                                                               |
| useSuspenseQuery 적용 범위 (keep-going) | **같은 데이터에 의존하는 컴포넌트를 하나의 Suspense 경계로** — 페이지 전체가 의존하면 페이지 경계, 일부만이면 컴포넌트 경계. 독립·선택 데이터는 경계 밖 | P-041 게이트(code-smell #3·post-edit hook)는 "쿼리 파일에 경계 동반"을 파일 단위로 잡는다 — **경계 위치는 이 결정(데이터 의존 단위)이 기준**이다. 상위 파일이 같은 데이터 그룹의 경계를 이미 소유하면 `code-smell-ok` 사유 주석으로 예외 처리                                                      |
| 에러 처리 범위 (채택)                   | 해당 데이터에 의존하는 페이지·컴포넌트 단위에서 처리                                                                                                    | error-types rule·P-041과 동일 취지 — 이미 반영                                                                                                                                                                                                                                                     |
| type vs interface (채택)                | `type` 우선, 상속 필요 시 `interface`                                                                                                                   | prose 컨벤션 (oxlint 미지원 확인 2026-07-27 실측) — 새 코드는 `type`으로                                                                                                                                                                                                                           |
| 함수 선언 방식 (채택)                   | 새 컴포넌트·모듈 함수는 화살표 함수 우선, 선언형 함수 필요 시 예외                                                                                      | prose 컨벤션 — 템플릿 골든샘플 전부 화살표 함수                                                                                                                                                                                                                                                    |
| boolean prop 이름 (채택)                | boolean임이 안 드러나는 prop엔 `is`/`has`/`should` 접두사                                                                                               | prose 컨벤션 — P-017 네이밍과 함께 적용                                                                                                                                                                                                                                                            |
| 배열 반복 방식 (강제하지 않음)          | 배열 메서드 우선 고려하되 `for`/`for...of` 허용                                                                                                         | 강제 게이트 없음 ✓ — 리뷰에서 반복 방식만으로 지적하지 않는다                                                                                                                                                                                                                                      |
| Props drilling 깊이 (강제하지 않음)     | 깊이만으로 Context 강제 금지 — 중간 컴포넌트가 값을 쓰는지 본다                                                                                         | component-modeling rule과 정합(폭·composition 기준, 깊이 규칙 없음) ✓                                                                                                                                                                                                                              |
| TypeScript enum (강제하지 않음)         | enum·literal union·`as const` 중 한 방식만 강제하지 않음. enum 썼다는 이유만으로 리뷰 지적 금지                                                         | **주의 — 스택 제약**: 이 템플릿은 `tsconfig erasableSyntaxOnly: true`(Vite type-strip 전제)라 **enum이 컴파일 자체가 안 된다**. 리뷰 의견이 아니라 빌드 제약이므로 결정 위반이 아니다. 이 템플릿에서는 literal union 또는 `as const` 객체를 쓴다 (component-modeling의 discriminated union과도 결) |

## 원본에만 있고 이 템플릿에 비적용인 것

- **13-design-system-usage (P-050~056)**: `@remember-web/primitive` 컴포넌트(사내 DS) 사용 관례. 이 템플릿은 **shadcn/ui + lucide** 스택이라 컴포넌트·아이콘이 달라 직접 이식 불가. 취지(버튼 아이콘은 역할 신호일 때만·타이포 위계 분리·Spinner vs Skeleton 구분)는 `ui-quality`·`project-theme`의 기존 가이드와 겹친다. **프로덕션 이식(공유 파이프라인 일괄 적용) 시점에 재검토** — 디자인 관례는 앱 레이어에만 (design-isolation 원칙).
- **deploy-web-service 플러그인**: 사내 alpha/bravo(tf-nest-drama) 배포 진단 도구. 이 템플릿의 배포는 비개발자용 Vercel(`deploy` 스킬)이라 대상이 다르다. `-web` 서비스로 프로덕션 이식할 때 유효.
