이슈가 이어져도 섞이지 않는 스펙 문서.
한 줄 결론
AI가 다음 작업에서 다시 읽을 스펙 문서는 고치는 시점에 따라 파일을 나눈다. 지금 동작, 판단 이유, 이슈별 작업 기록을 각각 따로 둔다.
쉽게 보기
AI-DLC(AI-Driven Development Life Cycle)는 코드를 짜기 전에 요구사항, 수용조건, 설계, 작업 목록을 문서로 먼저 쓰고, AI가 그 문서를 읽으며 구현하는 방식이다. AWS가 처음 공개한 버전은 저장소 루트의 폴더 하나에 작업 하나의 문서만 두었고, 새 작업을 시작하면 그 폴더를 덮어썼다. 이 글은 그 문서를 기능마다 폴더로 나눠 남기는 방식을 전제로 한다.
log-load/
requirements.md 배경과 범위
stories.md 사용자 스토리와 수용조건. AC-1, AC-2처럼 번호를 붙인다
design.md 설계
plan.md 작업 목록. 커밋 하나에 대응하는 작업에 B1, B2처럼 번호를 매긴다
decisions.md 판단과 이유. D-1, D-2처럼 번호를 매긴다
이슈를 시작할 때 사람과 AI가 함께 이 문서를 쓰고, 구현 단계에서는 AI가 plan.md의 작업을 하나씩 진행하며 커밋한다. 이슈 하나를 스펙부터 구현까지 끝내기에는 잘 맞는다.
문제는 같은 기능에 새 이슈가 들어올 때 생긴다. 로그 수집 기능을 만든 뒤 전송 순서를 고치는 이슈가 이어졌다고 하자. 두 번째 이슈의 작업을 같은 log-load/ 문서에 이어 쓰면 아래 세 가지가 문제가 된다.
| 문제가 되는 것 | 무슨 일이 생기나 |
|---|---|
| 지금 동작 | 첫 이슈의 수용조건에 두 번째 이슈에서 바뀐 동작이 섞인다. 어느 쪽이 지금 동작인지 문서만 봐서는 모른다. |
| 작업 번호 | 첫 이슈가 B1~B5를 썼으니 두 번째 이슈의 첫 작업은 B6이 된다. 그런데 커밋 메시지에는 이슈 기준으로 B1이라고 적는다. |
| 폴더 이름 | 폴더 이름이 첫 이슈 범위(예: log-load)라 다음 이슈와 맞지 않는다. 같은 기능의 문서 폴더가 둘 생기기도 한다. |
사람은 문서가 조금 섞여도 맥락으로 읽어 낸다. 하지만 AI는 다음 작업에서 이 문서를 지금 동작의 근거로 그대로 읽는다. 문서가 섞여 있으면 AI는 틀린 전제로 구현한다.
그래서 문서를 고치는 시점에 따라 셋으로 나눈다.
log/
README.md 지금 동작. 동작이 바뀔 때마다 고친다
decisions.md 판단과 이유. 판단이 생길 때 추가하고 지우지 않는다
tickets/
ISSUE-1-load.md 이슈별 작업 기록. 이슈가 끝나면 고치지 않는다
ISSUE-2-load-after-view.md
| 상황 | 이어 쓰는 구조 | 나눈 구조 |
|---|---|---|
| 이슈가 하나 더 들어오면 | 기존 문서에 이어 쓴다 | tickets에 파일 하나를 추가한다 |
| 지금 동작을 알려면 | 두 이슈의 내용이 섞인 문서를 읽는다 | README 하나를 읽는다 |
| 새 수용조건 번호 | AC-9 (앞 이슈에 이어서) | ISSUE-2 AC-1 |
다음 작업자와 AI는 README 하나만 읽으면 지금 동작을 안다.
새 용어
- AI-DLC: AWS가 제안한 AI 중심 개발 흐름. 사람이 의도를 정하고, AI가 요구사항, 설계, 작업 단위를 문서로 만든 뒤 구현한다. 단계마다 사람이 확인한다.
- 수용조건(AC, Acceptance Criteria): 이 동작이면 끝났다고 보는 기준. 테스트 이름에 번호를 붙여 동작과 테스트를 잇기도 한다.
- bolt(B): AI-DLC의 작업 단위. 여기서는 커밋 하나에 대응하는 작업으로 쓴다.
- 담당 경로: 기능 README frontmatter에 적는, 그 기능이 맡는 코드 경로 목록.
더 깊이
검토한 다른 안.
| 안 | 쓰지 않은 이유 |
|---|---|
| 화면 주소별 폴더 | 기능 하나가 여러 화면에 걸친다. 화면이 없는 작업은 둘 곳이 없다. |
| 기능 아래 이슈별 폴더 | 이슈끼리 섞이지는 않지만, 지금 동작을 알려면 이슈 폴더를 전부 읽어야 한다. AI가 작업마다 읽는 문서라 분량이 늘면 안 된다. |
언제 무엇을 고치나.
| 시점 | README | decisions | tickets |
|---|---|---|---|
| 이슈 시작 | 읽기만 한다 | 읽고, 판단이 생기면 추가한다 | 새로 만든다 |
| 작업마다 | 동작을 바꾼 커밋에서 고친다 | 판단이 생기면 추가한다 | 작업 목록을 체크한다 |
| 이슈가 끝난 뒤 | - | - | 고치지 않는다 |
| 스펙만 먼저 머지하는 큰 이슈 | 구현 MR에서 고친다 | 판단이 생기면 추가한다 | 먼저 머지한다 |
스펙을 먼저 머지할 때 README를 같이 고치면 아직 구현하지 않은 동작이 지금 동작 문서에 들어간다. 그래서 README만 구현 MR로 미룬다.
번호 규칙. 새 수용조건과 판단은 ISSUE-2 AC-1, ISSUE-2 D-1처럼 이슈 번호를 붙인다. 두 사람이 같은 기능을 동시에 작업해도 번호가 겹치지 않는다. 작업 번호는 이슈마다 B1부터 시작해 커밋 메시지와 맞춘다. 테스트 이름이 이미 쓰고 있는 기존 AC-n은 그대로 둔다.
폴더 찾기. README frontmatter에 담당 경로를 적는다.
---
code:
- src/share/utils/log
- src/share/components/LogReporter.tsx
---
| 상황 | 어디에 쓰나 |
|---|---|
| 바꿀 파일이 한 기능의 담당 경로에 속함 | 그 기능 폴더 |
| 여러 기능에 걸침 | 바꿀 파일이 가장 많은 기능 폴더에 기록 파일 하나. 나머지 기능은 README만 고친다 |
| 어느 담당 경로에도 없음 | 사람이 새 기능 폴더 이름을 정한다 |
| 한 기능이 너무 커짐 | 같은 층위의 기능 폴더로 나눈다 |
두 기능이 같은 경로를 맡지 않는지는 문서 빌드에서 검사할 계획이다. 사람이 판단하는 때는 새 기능 폴더 이름을 정할 때와 커진 기능을 나눌 때뿐이다.
README가 낡지 않게 하기. 이 구조는 “동작을 바꾼 커밋에서 README도 고친다”는 규칙에 기댄다. 규칙이 지켜지려면 코드를 고치는 쪽이 README가 있다는 걸 알아야 한다. 그런데 지금은 문서가 코드를 가리킬 뿐이고, 코드 파일 쪽에서는 자기 문서가 있는지 알 수 없다.
코드에 문서 링크 주석을 넣지는 않는다. 담당 경로와 같은 정보를 두 곳에서 관리하게 되고 주석은 쉽게 낡는다. 대신 파일 경로로 담당 README를 찾는 스크립트를 하나 만들고, 아래 장치들이 모두 이 스크립트를 쓴다. 스크립트와 장치는 아직 설계만 했다.
| 시점 | 장치 |
|---|---|
| AI가 파일을 고치기 직전 | 그 파일의 README와 decisions를 먼저 읽으라고 알리는 훅. 막지 않고, 세션마다 기능별로 한 번만 알린다 |
| AI가 커밋하기 직전 | 담당 파일은 바뀌었는데 README가 스테이징되지 않았으면 다시 알리는 훅 |
| MR을 올릴 때 | 담당 코드를 바꿨는데 README가 그대로면 경고. 사람이나 훅이 없는 다른 AI 도구가 고친 코드는 여기서 걸러진다 |
| 작업을 시작할 때 | README를 마지막으로 고친 커밋 이후 담당 경로의 변경을 찾아, 어긋나면 문서부터 맞춘다 |
경고는 MR을 막지 않는다. 동작이 바뀌지 않는 정리 MR에도 경고가 뜨므로, 막으면 작업자가 무시하거나 우회하게 된다.
AWS AI-DLC와 비교.
| AWS 첫 버전 | AWS 지금 버전 | 이 구조 | |
|---|---|---|---|
| 작업 기록 | 폴더 하나 (새 작업이 덮어씀) | 작업마다 새 폴더 | 이슈마다 기록 파일 |
| 현재 상태 | - | 저장소 단위로 따로 둠 | 기능 단위 README |
| 현재 상태를 고치는 때 | - | 논의 중 (RFC #1055) | 동작을 바꾼 커밋에서 |
AWS도 작업 기록과 현재 상태를 나누는 방향으로 바뀌었다. 다만 현재 상태를 언제 고칠지는 아직 정하지 못했다.
아직 모르는 것.
- README를 꾸준히 고치게 될지는 운영해 봐야 안다. 이슈 몇 건을 진행한 뒤 다시 점검한다.
- 담당 경로 검사, 경로로 README 찾기, 훅, MR 경고는 설계만 했다.
- Claude Code의 편집 직전(PreToolUse) 훅이 안내를 덧붙이는 출력(
additionalContext)을 지원하는지 확인하지 않았다. - README의 수용조건 번호와 테스트 이름을 대조하는 검사를 둔다면, 테스트 이름에 번호가 없는 기존 수용조건을 어떻게 다룰지 정하지 않았다.
출처
- Raja SP, AI-Driven Development Life Cycle: Reimagining Software Engineering, AWS DevOps Blog, 2025-07-31
- awslabs/aidlc-workflows (2026-10 main 기준):
docs/guide/03-spaces-and-intents.md,docs/guide/14-artifacts-reference.md - RFC #1055 Refresh the CodeKB at the end of every code-producing intent