FE TechSpec 문서 작성 템플릿과 패턴. Linear 프로젝트의 기술 명세서를 작성할 때 참조. Use when: TechSpec 작성, 기술 명세서 생성, Given/When/Then 테스트 케이스 정의, Acceptance Criteria 작성, Solution 설계 문서 작성 시 사용.
관련 스킬: entity-object-pattern - 구현 시 반복되는 도메인 로직을 Entity Object로 그룹화하는 패턴
FE TechSpec은 프로젝트의 기술적 구현 방향을 정의하는 문서. PRD(요구사항)와 Figma(디자인)를 기반으로 Solution, Acceptance Criteria, Test Cases를 도출한다.
Summary → Solution → Acceptance Criteria → Non-Functional Requirements → Functional Requirements (Given/When/Then) → Design → Component & Code → Verification
전체 템플릿은 references/template.md 참조.
프로젝트 배경과 맥락. PRD/Figma 링크 포함.
## Summary
{프로젝트 배경 1-3문장}
- **PRD**: {Notion URL}
- **Figma**: {Figma URL}
비즈니스 관점에서 핵심 변경사항을 요약. 기술 용어 없이 "무엇이 어떻게 바뀌는가"에 집중.
## Solution
### 핵심 변경사항
1. **{변경1}**: {설명}
2. **{변경2}**: {설명}
3. **{변경3}**: {설명}
작성 규칙:
기능 동작의 최소 기준. 테스트 가능한 형태로 작성.
## Acceptance Criteria
1. {주어} 상태에서 {동작}하면 {결과}가 발생한다
2. ...
SLA/SLO 기준의 시스템 요구사항.
카테고리:
해당 프로젝트에 관련 없는 카테고리는 생략 가능.
테스트 케이스를 구조화된 테이블로 정의.
핵심 개념:
## Functional Requirements (Test cases / Given, When, Then)
| # | Given | When | Then |
|---|-------|------|------|
| 1 | {초기 상태/조건} | {사용자 행동/이벤트} | {기대 결과} |
| 2 | ... | ... | ... |
작성 팁:
테스트 케이스 기반으로 도메인 설계를 진행.
작성 순서:
get_design_context/get_variable_defs에서 추출, 없으면 테스트 케이스에서 도출데이터 모델 가이드:
constants/에 별도 정의 가능필요한 경우에만 작성.
테스트 케이스 검증 전략.
우선순위:
Integration Test 테이블 형식:
| TC# | 테스트 명 | 검증 내용 |
|---|---|---|
| TC1 | ... | ... |
| 문제 | 원인 | 해결 |
|---|---|---|
| AC가 모호함 | "빠르게", "잘" 같은 추상적 표현 | 측정 가능한 기준 사용 (예: "3초 이내") |
| Given/When/Then 불명확 | 상태/행동/결과 구분 없음 | Given=상태, When=행동, Then=검증 가능한 결과 |
| Test Case 누락 | 정상 케이스만 작성 | 에러/엣지 케이스 반드시 포함 |
| NFR 생략 | 선택사항이라 무시 | 공개 페이지면 SEO/A11y 필수 검토 |
| Solution에 코드 포함 | "기술적 해결책"으로 오해 | 비기술 요약으로 작성 |
| 클라이언트 Entity 과잉 설계 | API 응답을 재정의하려 함 | API 타입 기반 interface로 충분. 별도 Entity는 사유 필요 |
| UI 문구 가정 | Figma 미확인 | variants에서 실제 문구 추출 |
| FR에 Entity/Command 헤더 | 지침 오해 | Design에서만 사용, FR은 테이블만 |
| Verification 누락 | 선택사항으로 오인 | Integration Test 필수 |
| 규칙 중복 구현 | UI/API에서 같은 규칙을 각각 구현 | 구현 시 entity-object-pattern 스킬 참조 |
| Container/Presentational 혼합 | 하나의 컴포넌트가 Usecase 호출 + UI 렌더링 | Container(데이터 흐름)와 Presentational(Props/Callbacks)을 분리 |
| 모든 Props를 Interface Contract에 기록 | 과잉 명세 | 모듈 경계를 형성하는 핵심 인터페이스만 정의. 내부 컴포넌트 Props는 Component 섹션에서 |
| Optimization Checklist 전부 채움 | RADIO 원칙 오해 | TC/NFR에서 도출된 항목만. "해당없음"이 대부분이어도 정상 |