개념¶
사양(Spec)은 개념적 제품 요구 사항과 기술 구현 세부 사항 간의 격차를 해소하여 정렬을 보장하고 개발 반복을 줄입니다. Kiro는 각 사양의 기초를 형성하는 세 가지 핵심 파일을 생성합니다:
- requirements.md - 구조화된 EARS 표기법으로 사용자 스토리 및 수용 기준을 캡처합니다
- design.md - 기술 아키텍처, 시퀀스 다이어그램 및 구현 고려 사항을 문서화합니다
- tasks.md - 개별적이고 추적 가능한 작업이 포함된 상세한 구현 계획을 제공합니다
mermaid-d742ov{font-family:inherit;font-size:14px;fill:#ccc;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-d742ov .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-d742ov .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-d742ov .error-icon{fill:#a44141;}#mermaid-d742ov .error-text{fill:#ddd;stroke:#ddd;}#mermaid-d742ov .edge-thickness-normal{stroke-width:1px;}#mermaid-d742ov .edge-thickness-thick{stroke-width:3.5px;}#mermaid-d742ov .edge-pattern-solid{stroke-dasharray:0;}#mermaid-d742ov .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-d742ov .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-d742ov .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-d742ov .marker{fill:#52525b;stroke:#52525b;}#mermaid-d742ov .marker.cross{stroke:#52525b;}#mermaid-d742ov svg{font-family:inherit;font-size:14px;}#mermaid-d742ov p{margin:0;}#mermaid-d742ov .label{font-family:inherit;color:#fafafa;}#mermaid-d742ov .cluster-label text{fill:#F9FFFE;}#mermaid-d742ov .cluster-label span{color:#F9FFFE;}#mermaid-d742ov .cluster-label span p{background-color:transparent;}#mermaid-d742ov .label text,#mermaid-d742ov span{fill:#fafafa;color:#fafafa;}#mermaid-d742ov .node rect,#mermaid-d742ov .node circle,#mermaid-d742ov .node ellipse,#mermaid-d742ov .node polygon,#mermaid-d742ov .node path{fill:#18181b;stroke:#ccc;stroke-width:1px;}#mermaid-d742ov .rough-node .label text,#mermaid-d742ov .node .label text,#mermaid-d742ov .image-shape .label,#mermaid-d742ov .icon-shape .label{text-anchor:middle;}#mermaid-d742ov .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-d742ov .rough-node .label,#mermaid-d742ov .node .label,#mermaid-d742ov .image-shape .label,#mermaid-d742ov .icon-shape .label{text-align:center;}#mermaid-d742ov .node.clickable{cursor:pointer;}#mermaid-d742ov .root .anchor path{fill:#52525b!important;stroke-width:0;stroke:#52525b;}#mermaid-d742ov .arrowheadPath{fill:lightgrey;}#mermaid-d742ov .edgePath .path{stroke:#52525b;stroke-width:2.0px;}#mermaid-d742ov .flowchart-link{stroke:#52525b;fill:none;}#mermaid-d742ov .edgeLabel{background-color:#09090b;text-align:center;}#mermaid-d742ov .edgeLabel p{background-color:#09090b;}#mermaid-d742ov .edgeLabel rect{opacity:0.5;background-color:#09090b;fill:#09090b;}#mermaid-d742ov .labelBkg{background-color:rgba(9, 9, 11, 0.5);}#mermaid-d742ov .cluster rect{fill:#18181b;stroke:rgba(255, 255, 255, 0.25);stroke-width:1px;}#mermaid-d742ov .cluster text{fill:#F9FFFE;}#mermaid-d742ov .cluster span{color:#F9FFFE;}#mermaid-d742ov div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:inherit;font-size:12px;background:#09090b;border:1px solid rgba(255, 255, 255, 0.25);border-radius:2px;pointer-events:none;z-index:100;}#mermaid-d742ov .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#ccc;}#mermaid-d742ov rect.text{fill:none;stroke-width:0;}#mermaid-d742ov .icon-shape,#mermaid-d742ov .image-shape{background-color:#09090b;text-align:center;}#mermaid-d742ov .icon-shape p,#mermaid-d742ov .image-shape p{background-color:#09090b;padding:2px;}#mermaid-d742ov .icon-shape rect,#mermaid-d742ov .image-shape rect{opacity:0.5;background-color:#09090b;fill:#09090b;}#mermaid-d742ov .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-d742ov .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-d742ov :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}¶
기능 'foo'에 대한 아이디어
채팅에서 사양 세션 열기
사양 창에서 '+' 클릭
.kiro/specs/foo
requirements.md
design.md
tasks.md
워크플로우¶
워크플로우는 단계 간 의사 결정 지점과 함께 논리적 진행을 따르며 다음 단계로 이동하기 전에 각 단계가 제대로 완료되었는지 확인합니다.
- 요구 사항 단계(Requirements Phase) (가장 왼쪽 섹션): 구조화된 EARS 표기법으로 사용자 스토리 및 수용 기준을 정의합니다
- 설계 단계(Design Phase) (두 번째 섹션): 기술 아키텍처, 시퀀스 다이어그램 및 구현 고려 사항을 문서화합니다
- 구현 계획(Implementation Planning) (세 번째 섹션): 명확한 설명과 결과가 있는 개별적이고 추적 가능한 작업으로 작업을 분해합니다
- 실행 단계(Execution Phase) (가장 오른쪽 섹션): 작업이 완료되면 진행 상황을 추적하고 필요에 따라 사양을 업데이트하고 개선할 수 있습니다
mermaid-uzbgbd{font-family:inherit;font-size:14px;fill:#ccc;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-uzbgbd .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-uzbgbd .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-uzbgbd .error-icon{fill:#a44141;}#mermaid-uzbgbd .error-text{fill:#ddd;stroke:#ddd;}#mermaid-uzbgbd .edge-thickness-normal{stroke-width:1px;}#mermaid-uzbgbd .edge-thickness-thick{stroke-width:3.5px;}#mermaid-uzbgbd .edge-pattern-solid{stroke-dasharray:0;}#mermaid-uzbgbd .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-uzbgbd .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-uzbgbd .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-uzbgbd .marker{fill:#52525b;stroke:#52525b;}#mermaid-uzbgbd .marker.cross{stroke:#52525b;}#mermaid-uzbgbd svg{font-family:inherit;font-size:14px;}#mermaid-uzbgbd p{margin:0;}#mermaid-uzbgbd .label{font-family:inherit;color:#fafafa;}#mermaid-uzbgbd .cluster-label text{fill:#F9FFFE;}#mermaid-uzbgbd .cluster-label span{color:#F9FFFE;}#mermaid-uzbgbd .cluster-label span p{background-color:transparent;}#mermaid-uzbgbd .label text,#mermaid-uzbgbd span{fill:#fafafa;color:#fafafa;}#mermaid-uzbgbd .node rect,#mermaid-uzbgbd .node circle,#mermaid-uzbgbd .node ellipse,#mermaid-uzbgbd .node polygon,#mermaid-uzbgbd .node path{fill:#18181b;stroke:#ccc;stroke-width:1px;}#mermaid-uzbgbd .rough-node .label text,#mermaid-uzbgbd .node .label text,#mermaid-uzbgbd .image-shape .label,#mermaid-uzbgbd .icon-shape .label{text-anchor:middle;}#mermaid-uzbgbd .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-uzbgbd .rough-node .label,#mermaid-uzbgbd .node .label,#mermaid-uzbgbd .image-shape .label,#mermaid-uzbgbd .icon-shape .label{text-align:center;}#mermaid-uzbgbd .node.clickable{cursor:pointer;}#mermaid-uzbgbd .root .anchor path{fill:#52525b!important;stroke-width:0;stroke:#52525b;}#mermaid-uzbgbd .arrowheadPath{fill:lightgrey;}#mermaid-uzbgbd .edgePath .path{stroke:#52525b;stroke-width:2.0px;}#mermaid-uzbgbd .flowchart-link{stroke:#52525b;fill:none;}#mermaid-uzbgbd .edgeLabel{background-color:#09090b;text-align:center;}#mermaid-uzbgbd .edgeLabel p{background-color:#09090b;}#mermaid-uzbgbd .edgeLabel rect{opacity:0.5;background-color:#09090b;fill:#09090b;}#mermaid-uzbgbd .labelBkg{background-color:rgba(9, 9, 11, 0.5);}#mermaid-uzbgbd .cluster rect{fill:#18181b;stroke:rgba(255, 255, 255, 0.25);stroke-width:1px;}#mermaid-uzbgbd .cluster text{fill:#F9FFFE;}#mermaid-uzbgbd .cluster span{color:#F9FFFE;}#mermaid-uzbgbd div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:inherit;font-size:12px;background:#09090b;border:1px solid rgba(255, 255, 255, 0.25);border-radius:2px;pointer-events:none;z-index:100;}#mermaid-uzbgbd .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#ccc;}#mermaid-uzbgbd rect.text{fill:none;stroke-width:0;}#mermaid-uzbgbd .icon-shape,#mermaid-uzbgbd .image-shape{background-color:#09090b;text-align:center;}#mermaid-uzbgbd .icon-shape p,#mermaid-uzbgbd .image-shape p{background-color:#09090b;padding:2px;}#mermaid-uzbgbd .icon-shape rect,#mermaid-uzbgbd .image-shape rect{opacity:0.5;background-color:#09090b;fill:#09090b;}#mermaid-uzbgbd .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-uzbgbd .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-uzbgbd :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}¶
아니오
예
아니오
예
사양 시작
requirements.md
만족하시나요?
편집/변경 요청
design.md
만족하시나요?
편집/변경 요청
구현
요구 사항(Requirements)¶
requirements.md 파일은 EARS 표기법의 수용 기준이 포함된 사용자 스토리 형식으로 작성됩니다. PM이 요구 사항을 제공하기를 원하는 방식입니다!
EARS(Easy Approach to Requirements Syntax) 표기법은 명확하고 테스트 가능한 요구 사항을 작성하기 위한 구조화된 형식을 제공합니다. 사양의 requirements.md 파일에서 각 요구 사항은 다음 패턴을 따릅니다:
WHEN [조건/이벤트] THE SYSTEM SHALL [예상 동작]
예를 들어:
WHEN 사용자가 유효하지 않은 데이터로 양식을 제출할 때 THE SYSTEM SHALL 관련 필드 옆에 유효성 검사 오류를 표시합니다
이 구조화된 접근 방식은 여러 가지 이점을 제공합니다:
- 명확성: 요구 사항이 명확하고 이해하기 쉽습니다
- 테스트 가능성: 각 요구 사항을 테스트 케이스로 직접 변환할 수 있습니다
- 추적 가능성: 개별 요구 사항을 구현 전반에 걸쳐 추적할 수 있습니다
- 완전성: 형식이 모든 조건과 동작을 생각하도록 권장합니다
Kiro는 모호한 기능 요청을 이러한 잘 구조화된 요구 사항으로 변환하는 데 도움을 주어 개발 프로세스를 더 효율적으로 만들고 제품 팀과 엔지니어링 팀 간의 오해를 줄입니다.
설계(Design)¶

design.md 파일은 기술 아키텍처, 시퀀스 다이어그램 및 구현 고려 사항을 문서화하는 곳입니다. 구성 요소와 그 상호 작용을 포함하여 시스템이 어떻게 작동할지에 대한 전체 그림을 캡처하기에 좋은 장소입니다.
Kiro의 사양은 설계 문서화에 대한 구조화된 접근 방식을 제공하여 복잡한 시스템을 더 쉽게 이해하고 협업할 수 있도록 합니다. design.md 파일은 구성 요소와 그 상호 작용을 포함하여 시스템이 어떻게 작동할지에 대한 전체 그림을 캡처하기에 좋은 장소입니다.
mermaid-1jf796{font-family:inherit;font-size:14px;fill:#ccc;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-1jf796 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-1jf796 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-1jf796 .error-icon{fill:#a44141;}#mermaid-1jf796 .error-text{fill:#ddd;stroke:#ddd;}#mermaid-1jf796 .edge-thickness-normal{stroke-width:1px;}#mermaid-1jf796 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-1jf796 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-1jf796 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-1jf796 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-1jf796 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-1jf796 .marker{fill:#52525b;stroke:#52525b;}#mermaid-1jf796 .marker.cross{stroke:#52525b;}#mermaid-1jf796 svg{font-family:inherit;font-size:14px;}#mermaid-1jf796 p{margin:0;}#mermaid-1jf796 .label{font-family:inherit;color:#fafafa;}#mermaid-1jf796 .cluster-label text{fill:#F9FFFE;}#mermaid-1jf796 .cluster-label span{color:#F9FFFE;}#mermaid-1jf796 .cluster-label span p{background-color:transparent;}#mermaid-1jf796 .label text,#mermaid-1jf796 span{fill:#fafafa;color:#fafafa;}#mermaid-1jf796 .node rect,#mermaid-1jf796 .node circle,#mermaid-1jf796 .node ellipse,#mermaid-1jf796 .node polygon,#mermaid-1jf796 .node path{fill:#18181b;stroke:#ccc;stroke-width:1px;}#mermaid-1jf796 .rough-node .label text,#mermaid-1jf796 .node .label text,#mermaid-1jf796 .image-shape .label,#mermaid-1jf796 .icon-shape .label{text-anchor:middle;}#mermaid-1jf796 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-1jf796 .rough-node .label,#mermaid-1jf796 .node .label,#mermaid-1jf796 .image-shape .label,#mermaid-1jf796 .icon-shape .label{text-align:center;}#mermaid-1jf796 .node.clickable{cursor:pointer;}#mermaid-1jf796 .root .anchor path{fill:#52525b!important;stroke-width:0;stroke:#52525b;}#mermaid-1jf796 .arrowheadPath{fill:lightgrey;}#mermaid-1jf796 .edgePath .path{stroke:#52525b;stroke-width:2.0px;}#mermaid-1jf796 .flowchart-link{stroke:#52525b;fill:none;}#mermaid-1jf796 .edgeLabel{background-color:#09090b;text-align:center;}#mermaid-1jf796 .edgeLabel p{background-color:#09090b;}#mermaid-1jf796 .edgeLabel rect{opacity:0.5;background-color:#09090b;fill:#09090b;}#mermaid-1jf796 .labelBkg{background-color:rgba(9, 9, 11, 0.5);}#mermaid-1jf796 .cluster rect{fill:#18181b;stroke:rgba(255, 255, 255, 0.25);stroke-width:1px;}#mermaid-1jf796 .cluster text{fill:#F9FFFE;}#mermaid-1jf796 .cluster span{color:#F9FFFE;}#mermaid-1jf796 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:inherit;font-size:12px;background:#09090b;border:1px solid rgba(255, 255, 255, 0.25);border-radius:2px;pointer-events:none;z-index:100;}#mermaid-1jf796 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#ccc;}#mermaid-1jf796 rect.text{fill:none;stroke-width:0;}#mermaid-1jf796 .icon-shape,#mermaid-1jf796 .image-shape{background-color:#09090b;text-align:center;}#mermaid-1jf796 .icon-shape p,#mermaid-1jf796 .image-shape p{background-color:#09090b;padding:2px;}#mermaid-1jf796 .icon-shape rect,#mermaid-1jf796 .image-shape rect{opacity:0.5;background-color:#09090b;fill:#09090b;}#mermaid-1jf796 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-1jf796 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-1jf796 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}¶
design.md
아키텍처
데이터 흐름
인터페이스
데이터 모델
오류 처리
단위 테스트 전략
...
구현 계획(Implementation plan)¶
tasks.md 파일은 개별적이고 추적 가능한 작업 및 하위 작업이 포함된 상세한 구현 계획을 제공하는 곳입니다. 각 작업은 명확한 설명, 예상 결과 및 필요한 리소스 또는 종속성과 함께 명확하게 정의됩니다. Kiro의 사양은 구현 계획에 대한 구조화된 접근 방식을 제공하여 복잡한 시스템을 더 쉽게 이해하고 협업할 수 있도록 합니다.
Kiro는 실시간 상태 업데이트를 표시하는 tasks.md 파일에 대한 작업 실행 인터페이스를 제공합니다. 작업이 진행 중이거나 완료된 것으로 업데이트되어 구현 진행 상황을 효율적으로 추적하고 개발 상태를 최신 상태로 유지할 수 있습니다.
