AI에게 코드만 전달
↓
현재 파일 기준으로 추측
↓
기존 프로젝트 규칙과 충돌 가능
프로젝트 Context 전달
↓
구조/규칙/과거 결정 이해
↓
기존 코드와 맞는 수정 가능성 증가
Controller에 비즈니스 로직을 다시 넣음
Repository를 거치지 않고 Prisma 직접 호출
기존 PermissionCode 대신 새로운 role 조건 생성
기존 error response를 다른 형태로 변경
transaction 규칙을 무시
Soft Delete 조건 누락
이미 해결했던 장애 패턴을 다시 만듦
README:
프로젝트 소개
Architecture Docs:
시스템 구조
AI Knowledge Base:
AI가 작업할 때 반드시 알아야 할 규칙과 결정
프로젝트 개요
기술 스택
모듈 구조
핵심 도메인
아키텍처 규칙
DB 설계 규칙
권한 정책
에러 응답 계약
보안 규칙
테스트 전략
자주 발생한 실수
과거 주요 결정
docs/ai 구조docs/
ai/
README.md
project-context.md
architecture.md
backend-rules.md
frontend-rules.md
database-rules.md
security-rules.md
testing-rules.md
api-contract.md
permissions.md
common-mistakes.md
decisions/
ADR-001-transaction-boundary.md
ADR-002-export-job.md
ADR-003-permission-model.md
project-context.md:
프로젝트 전체 소개
architecture.md:
Controller/UseCase/Repository/Worker 구조
backend-rules.md:
NestJS 작업 규칙
database-rules.md:
Prisma/PostgreSQL 규칙
security-rules.md:
PII/Secret/운영 데이터 기준
common-mistakes.md:
AI가 과거 반복한 실수
decisions/:
왜 특정 구조를 선택했는지 기록
project-context.md# Project Context
## 프로젝트
온라인 휴대폰 판매몰
## 주요 사용자
- 고객
- 상담 관리자
- 운영 관리자
## 핵심 기능
- 상품/요금제 조회
- 상담 신청
- 관리자 상담 처리
- 상품/지원금 관리
- 유입 분석
- Excel Export
- 알림톡
- 관리자 권한
## Backend
- NestJS
- Prisma
- PostgreSQL
- AWS
## Frontend
- React
- TanStack Query
## 운영 특징
- 1인 개발/운영
- 고객 개인정보 존재
- 관리자 기능 비중이 높음
- 운영 중 변경 이력과 추적성이 중요함
## 핵심 원칙
- 중요한 상태 변경은 transaction 사용
- 외부 API를 transaction 안에서 호출하지 않음
- 개인정보를 로그에 남기지 않음
- 관리자 위험 기능은 Permission 검증 필요
# Backend Architecture Rules
## Controller
- HTTP 요청/응답만 담당
- Prisma 직접 사용 금지
- 비즈니스 규칙 작성 금지
## Use Case
- 하나의 업무 흐름 담당
- Transaction Boundary 관리
- Repository와 Domain Service 조합
## Domain Service / Policy
- 상태 전이
- 중복 판단
- 세부 권한
- 비즈니스 규칙
## Repository
- Prisma DB 접근 담당
- 필요한 경우 TransactionClient 지원
## Adapter
- 외부 API 호출 담당
## Worker
- 오래 걸리는 작업과 재시도 처리
금지:
Controller → Prisma 직접 호출
Use Case → axios 직접 호출
Repository → 관리자 권한 판단
Worker → 고객 전화번호 로그 출력
# Database Rules
## Transaction
다음 작업은 같은 transaction:
- 상담 상태 변경
- 상담 상태 이력
- Audit Log
## Soft Delete
- 삭제 가능 도메인은 deletedAt 사용
- 고객 조회에서는 deletedAt=null 조건 유지
- 관리자 삭제 목록은 별도 Repository 메서드 사용
## 개인정보
- phoneNormalized를 API 응답에 노출하지 않음
- 전화번호 원본을 로그에 출력하지 않음
## Migration
- destructive migration 자동 적용 금지
- NOT NULL 추가 전 기존 데이터 검토
- 운영 migration은 사람이 승인
Soft Delete filter
snapshot column
unique constraint
transaction client 전달
migration backfill
# API Contract
## Error Response
{
"success": false,
"error": {
"code": "...",
"message": "...",
"details": null
},
"requestId": "...",
"timestamp": "...",
"path": "..."
}
## Rules
- 별도 요구가 없으면 기존 field rename 금지
- 기존 field 삭제 금지
- status code 변경 시 명시적 검토 필요
- error.code 변경은 frontend 영향 확인 필요
data
meta.page
meta.limit
meta.total
meta.totalPages
리팩토링:
API Contract 유지
API Contract 변경:
별도 Task로 수행
# Permission Rules
## 기본 원칙
Role 이름보다 PermissionCode 기준으로 판단
## 주요 Permission
CONSULT_READ
CONSULT_DETAIL_READ
CONSULT_UPDATE_STATUS
CONSULT_EXPORT
PRODUCT_READ
PRODUCT_UPDATE
PRODUCT_PRICE_UPDATE
AUDIT_LOG_READ
EXPORT_JOB_DOWNLOAD
ADMIN_PERMISSION_MANAGE
## 규칙
- 프론트 메뉴 숨김은 UX
- 백엔드 PermissionGuard가 최종 검증
- Export 다운로드는 일반 조회 권한과 분리
- 관리자 권한 변경은 Audit Log 기록
Task:
상담 Excel Export 추가
자동 Context:
CONSULT_EXPORT Permission 필요
Audit Log 필요
파일 만료/다운로드 권한 필요
# Security Rules
## AI에게 전달 금지
- 운영 고객 데이터
- DB Dump
- API Key
- JWT
- Authorization Header
- Cookie
- DATABASE_URL
## 로그 금지
- 전화번호 원본
- 상담 메모 전체
- accessToken
- refreshToken
- Secret
## 코드
- Secret 하드코딩 금지
- 환경값은 SSM/Config 사용
- 운영 DB 직접 수정 금지
운영 Secret을 AI Prompt에 넣지 않는다.
실제 고객 데이터를 AI 테스트 데이터로 사용하지 않는다.
운영 DB dump를 분석 입력으로 사용하지 않는다.
common-mistakes.md# Common AI Mistakes
## 1. Repository Transaction 누락
### 발생
Use Case에서 transaction을 열었지만 Repository가 기본 PrismaService 사용
### 규칙
transaction 내부 Repository 호출에는 반드시 tx 전달
---
## 2. API Response Field Rename
### 발생
리팩토링 중 customerName → name으로 변경
### 규칙
명시적 요구가 없는 API contract 변경 금지
---
## 3. 개인정보 로그
### 발생
debug 용도로 customer phone 출력
### 규칙
전화번호 원본 로그 출력 금지
구체적
검증 가능
왜 필요한지 설명됨
코드를 잘 작성할 것 같은 규칙은 아무 의미가 없습니다.# ADR-002: Excel Export는 ExportJob 기반 비동기로 처리
## 상태
Accepted
## 문제
대량 상담 데이터를 HTTP 요청 안에서 Excel로 생성하면 timeout 가능성이 있음
## 결정
API는 ExportJob만 생성하고 실제 Excel 생성은 Worker에서 처리
## 이유
- API 응답 시간 분리
- 실패 상태 저장 가능
- Retry 가능
- 파일 만료 관리 가능
## 고려한 대안
HTTP 요청에서 직접 Excel 생성
## 선택하지 않은 이유
데이터 증가 시 timeout과 메모리 사용 위험
## 영향
ExportJob 테이블과 Worker 운영 필요
Job/Worker 도입
Soft Delete 정책
Permission 모델
Audit Log 정책
Transaction Boundary
Error Response 형식
SSM 기반 Config
Webhook 처리 방식
버튼 색상
파일명 변경
작은 refactor
일반적인 bugfix
전체 문서 20개
↓
모든 작업에 전달
↓
Context 과다
↓
중요 규칙 희석
Task 분석
↓
관련 Domain 판단
↓
관련 Context만 선택
↓
AI Prompt에 주입
project-context
backend-rules
database-rules
permissions
api-contract
관련 ADR
common-mistakes
project-context
frontend-rules
api-contract
design/UI 규칙
backend-rules
security-rules
database-rules
webhook ADR
testing-rules
필요한 최소 context만
Context Pack:
특정 작업 유형에서 AI에게 자동으로 제공할 문서 묶음
name: backend
files:
- docs/ai/project-context.md
- docs/ai/architecture.md
- docs/ai/backend-rules.md
- docs/ai/api-contract.md
name: security
files:
- docs/ai/security-rules.md
- docs/ai/permissions.md
- docs/ai/common-mistakes.md
name: database
files:
- docs/ai/database-rules.md
- docs/ai/security-rules.md
- docs/ai/decisions/ADR-001-transaction-boundary.md
0909의 Task Metadata를 확장하면:
taskId: 142
project: togethermall
type: refactor
domain: consult
risk: HIGH
contextPacks:
- backend
- database
- security
allowedPaths:
- src/modules/consult
- src/modules/audit-log
blockedPaths:
- prisma/migrations
- deployment
Task Metadata
↓
Context Pack 확인
↓
관련 문서 로드
↓
Prompt Builder
↓
Codex Prompt
Priority 1:
보안/금지 규칙
Priority 2:
Task 완료 조건
Priority 3:
API/DB Contract
Priority 4:
아키텍처 원칙
Priority 5:
스타일/선호
Task 요청과 Security Rule 충돌:
Security Rule 우선
Task 요청과 기존 Architecture Rule 충돌:
사용자가 명시적으로 구조 변경을 요청했는지 확인
Style Rule과 기능 요구 충돌:
기능 요구 우선
반드시 지켜야 함
예:
Secret 하드코딩 금지
운영 DB 수정 금지
전화번호 로그 금지
blockedPaths 수정 금지
가능하면 지킴
예:
파일 크기를 작게 유지
기존 naming convention 선호
Use Case 분리 권장
MUST:
Hard Rule
SHOULD:
Soft Rule
MAY:
선택 사항
version: 1
hardRules:
- docs/ai/security-rules.md
- docs/ai/api-contract.md
packs:
backend:
- docs/ai/project-context.md
- docs/ai/architecture.md
- docs/ai/backend-rules.md
database:
- docs/ai/database-rules.md
- docs/ai/decisions/ADR-001-transaction-boundary.md
permission:
- docs/ai/permissions.md
testing:
- docs/ai/testing-rules.md
common:
- docs/ai/common-mistakes.md
context-manifest.yml 같은 파일로 관리할 수 있습니다.Task Spec
+
Hard Rules
+
Selected Context Packs
+
Common Mistakes
+
Relevant Files
=
Final Prompt
1. 작업 목적
2. 완료 조건
3. 절대 금지 사항
4. 작업 범위
5. 프로젝트 구조
6. 관련 과거 결정
7. 테스트 조건
8. 결과 보고 형식
[Task]
상담 상태 변경 transaction을 정리한다.
[Completion]
- status/history/audit 같은 transaction
- 기존 API response 유지
- 기존 409 동작 유지
[MUST]
- 전화번호 원본 로그 금지
- blockedPaths 수정 금지
- 외부 API 호출 추가 금지
[Architecture]
- transaction boundary는 Use Case
- Repository는 전달받은 tx 사용
- Audit Log는 동일 tx 사용
[API Contract]
- 기존 응답 field rename/delete 금지
[Known Mistake]
과거 Repository에서 기본 PrismaService를 사용해 transaction이 깨진 사례가 있음.
반드시 전달된 tx를 사용할 것.
[Test]
- 정상 상태 변경
- rollback
- concurrent update
[Report]
변경 파일, 테스트, 미실행 테스트, 주의사항을 정리할 것.
1. Task Spec
2. Hard Rule
3. 직접 관련 문서
4. 관련 코드
5. Common Mistakes
6. 참고 문서
오래된 Troubleshooting
관련 없는 Domain 문서
전체 README
전체 Git history
Task:
Notification Worker retry 수정
↓
태그 검색:
notification
retry
timeout
↓
관련 Troubleshooting 발견
↓
Context 추가
과거 문제:
Worker가 retry 시 동일 메시지를 중복 발송
현재 작업:
NotificationJob retry 정책 수정
→ 과거 문서를 자동 Context 후보로 제시
Task Domain:
export
검색:
docs/ai/decisions/*export*
결과:
ADR-002-export-job.md
기존 결정:
Excel Export는 HTTP 요청 안에서 직접 생성하지 않고 ExportJob + Worker 구조를 사용한다.
docs/ai/security-rules.md
docs/ai/common-mistakes.md
context-manifest.yml
docs(ai): Repository transaction 규칙 추가
Task #142에서 transaction 내부 Repository가 기본 Prisma를 사용했던 문제 재발 방지
---
status: active
lastReviewed: 2026-09-10
owner: backend
---
ACTIVE
DEPRECATED
DRAFT
ARCHIVED
DEPRECATED 문서는 기본 Context에서 제외
ARCHIVED 문서는 검색만 허용
DRAFT는 자동 주입 금지
문서:
Controller에서 Prisma 사용 금지
실제 코드:
신규 Controller가 Prisma 직접 사용
→ Drift
정기 Architecture Review
AI QA에서 규칙 위반 검사
문서 수정 시 관련 코드 확인
코드 리팩토링 시 문서 갱신
0908 QA와 연결하면:
git diff
↓
Context Rules
↓
규칙 위반 검사
Rule:
Controller에서 Prisma 직접 사용 금지
Diff:
consult.controller.ts에 PrismaService 추가
결과:
ARCHITECTURE_WARNING
Rule:
.env 파일 수정 금지
Diff:
.env.production 변경
결과:
BLOCK
rules:
- id: no-env-change
level: BLOCK
paths:
- ".env*"
- id: migration-human-review
level: WARNING
paths:
- "prisma/migrations/**"
- id: permission-human-review
level: WARNING
paths:
- "src/**/permission/**"
문서형 Rule:
AI가 이해하기 위한 설명
기계형 Rule:
CLI/QA가 검사하기 위한 설정
## AI Context
### Packs
- backend
- database
- security
### Files
- docs/ai/backend-rules.md
- docs/ai/database-rules.md
- docs/ai/security-rules.md
- docs/ai/common-mistakes.md
### ADR
- ADR-001-transaction-boundary.md
0909의 Task Report에 추가:
## Context
- Backend Pack
- Database Pack
- Security Pack
- ADR-001 Transaction Boundary
## Rule Violations
- 없음
문제:
AI가 API field를 rename
Context:
api-contract pack이 포함되지 않았음
재발 방지:
해당 Task type에 api-contract pack 자동 포함
AI 작업
↓
QA 실패
↓
Troubleshooting
↓
원인 분석
↓
규칙 부족?
├─ Yes → Knowledge 업데이트
└─ No → 코드 문제
↓
다음 Task에 자동 반영
~/.llm-work/
rules/
common-security.md
common-git.md
project/
docs/ai/
project-context.md
backend-rules.md
Secret 금지
Git 작업 안전 규칙
AI 작업 결과 검증 기준
도메인 규칙
폴더 구조
DB 정책
API Contract
PermissionCode
Global Hard Rules
↓
Project Hard Rules
↓
Task Spec
↓
Context Packs
↓
Relevant Knowledge
Global:
운영 DB 자동 수정 금지
Task:
운영 DB column 직접 수정
결과:
Task 실행 금지
Task 입력
↓
로컬 LLM
↓
domain=consult
risk=HIGH
packs=backend,database
keywords=status,transaction,audit
규칙 기반 검증
↓
Context Pack 결정
↓
Codex Prompt 생성
risk=CRITICAL:
security pack 항상 포함
domain=database:
database pack 항상 포함
API DTO 변경:
api-contract pack 항상 포함
추가 추천:
LLM
필수 Pack:
Rule Engine
llm-work context 142
출력:
Task #142
Detected:
- domain: consult
- risk: HIGH
Required Context:
✓ project-context
✓ backend
✓ database
✓ security
✓ api-contract
Related ADR:
✓ ADR-001-transaction-boundary
Related Troubleshooting:
✓ consult-status-history-missing.md
Estimated Context:
12,400 tokens
llm-work context 142 --show
llm-work context 142 --compact
llm-work context 142 --exclude troubleshooting
원문 문서
↓
로컬 LLM 요약
↓
Compact Context
Hard Rule:
요약하지 않고 원문 사용
일반 Architecture 설명:
요약 가능
오래된 Troubleshooting:
핵심 교훈만 요약
파일 hash
↓
변경 없음
↓
기존 요약 사용
file path
content hash
summary model/version
hash 변경
↓
요약 다시 생성
project-context.md
backend-rules.md
security-rules.md
api-contract.md
common-mistakes.md
완료 기준:
Codex에게 반복해서 설명하던 핵심 규칙이 문서화됨
backend
database
security
frontend
testing
완료 기준:
Task에 필요한 문서를 묶음 단위로 선택 가능
domain
risk
contextPacks
완료 기준:
Task별 필요한 Context가 자동 선택됨
Task keyword
↓
관련 과거 결정/문제 검색
완료 기준:
과거 실수와 설계 결정을 새 AI 작업에 재사용
Knowledge Rule
↓
일부 규칙 기계 검증
완료 기준:
문서 규칙이 실제 QA 경고/BLOCK으로 연결
기존 llm-work CLI에 프로젝트 AI Context 관리 기능을 추가해줘.
목표:
Task마다 프로젝트 전체 문서를 무작정 전달하지 않고, 작업과 관련된 규칙과 과거 결정을 자동으로 골라 Codex Prompt에 넣고 싶다.
조건:
1. docs/ai 폴더 아래 project-context.md, architecture.md, backend-rules.md, frontend-rules.md, database-rules.md, security-rules.md, testing-rules.md, api-contract.md, permissions.md, common-mistakes.md를 관리할 수 있게 해줘
2. context-manifest.yml에서 Context Pack을 정의하게 해줘
3. backend, frontend, database, security, permission, testing Pack을 지원해줘
4. Task Metadata의 domain, risk, contextPacks를 기준으로 필요한 Pack을 선택하게 해줘
5. CRITICAL risk에는 security Pack을 반드시 포함해줘
6. database domain에는 database Pack을 강제해줘
7. API DTO/Mapper 변경 Task에는 api-contract Pack을 자동 포함해줘
8. docs/ai/decisions의 ADR을 Task keyword/domain 기준으로 검색해서 관련 문서를 후보로 보여줘
9. troubleshooting Markdown에서도 관련 domain/tag/errorCode 기준으로 후보를 찾을 수 있게 해줘
10. AI가 추천하는 Context와 Rule Engine이 강제로 넣는 Context를 구분해줘
11. Hard Rule은 요약하지 않고 원문 그대로 포함하게 해줘
12. 일반 설명 문서는 context가 너무 크면 compact summary를 사용할 수 있게 해줘
13. compact summary는 파일 hash 기반으로 cache하게 해줘
14. DEPRECATED/ARCHIVED 문서는 기본 Context에서 제외해줘
15. llm-work context <task-id> 명령으로 실제 사용될 Context Pack, 파일, ADR, Troubleshooting, 예상 크기를 보여줘
16. llm-work run에서 생성된 최종 Prompt에 선택된 Context를 자동으로 합쳐줘
17. 실제로 어떤 Context가 사용됐는지 Task Report에 기록해줘
18. Secret, 고객 개인정보, 운영 DB 값은 Context로 포함하지 않도록 sanitize 해줘
19. Context 선택 오류가 QA 실패 원인으로 확인되면 common-mistakes 또는 manifest 개선으로 이어질 수 있게 구조를 만들어줘
20. 테스트와 사용 방법을 문서화해줘
모든 문서를 무조건 Prompt에 넣지 않는가?
Task와 관련 있는 Context만 선택하는가?
보안 Pack을 deterministic하게 적용하는가?
Hard Rule이 요약으로 약해지지 않는가?
오래된 문서를 자동 제외하는가?
관련 ADR/Troubleshooting을 재사용하는가?
실제로 사용한 Context가 기록되는가?
Context에 개인정보/Secret이 들어가지 않는가?
1인 개발 환경에서 Codex가 프로젝트 맥락을 더 정확하게 이해하도록 AI용 프로젝트 Knowledge Base와 Context Retrieval 시스템을 만들려고 해.
환경:
1. NestJS + React + Prisma + PostgreSQL 기반 온라인 휴대폰 판매몰을 운영하고 있음
2. Task Spec → Codex → QA → Human Review → Task Report 자동화가 있음
3. Codex가 반복적으로 프로젝트 규칙을 놓치는 것을 줄이고 싶음
4. docs/ai 아래에 Project Context, Architecture, Backend, Frontend, Database, Security, Testing, API Contract, Permission, Common Mistakes 문서를 관리하고 싶음
5. Architecture Decision은 ADR로 따로 기록하고 싶음
6. 과거 Troubleshooting도 새로운 작업의 Context로 재사용하고 싶음
7. 모든 문서를 매번 넣지 않고 Task domain/risk에 따라 필요한 Context Pack만 선택하고 싶음
8. Security와 DB 같은 중요한 규칙은 AI 판단이 아니라 deterministic rule로 강제하고 싶음
9. 오래되거나 deprecated된 문서는 자동 Context에서 제외하고 싶음
10. Context가 너무 크면 일반 문서는 요약하되 Hard Rule은 원문을 유지하고 싶음
11. 실제 어떤 Context를 사용했는지 Task Report에 기록하고 싶음
12. Secret, 운영 DB 정보, 고객 개인정보는 Knowledge/Prompt에 포함되면 안 됨
요청:
- docs/ai 폴더 구조
- Context Pack 설계
- context-manifest schema
- Hard/Soft Rule 구분
- Task Metadata와 Context 연결 방식
- ADR 작성 기준
- Troubleshooting 검색/재사용 방식
- Context 우선순위
- context compact/cache 구조
- stale/deprecated 문서 관리
- QA와 Knowledge Rule 연결 방식
- Prompt Builder 구조
- CLI 명령어
- 구현 우선순위
- 보안 체크리스트
를 실무적으로 정리해줘.
문서를 많이 만드는 것 자체를 목표로 하지 않는가?
작업과 관련된 Context만 선택하도록 하는가?
Hard Rule과 일반 설명을 구분하는가?
보안/DB 규칙을 AI 판단에만 맡기지 않는가?
ADR을 구조적 결정 기록으로 활용하는가?
Troubleshooting을 새로운 작업에 재사용하는가?
오래된 문서 문제를 다루는가?
실제 사용 Context를 추적 가능하게 하는가?
Context와 QA를 연결하는가?
docs/ai 아래에 project-context, architecture, backend-rules, database-rules, security-rules, api-contract, permissions, testing-rules, common-mistakes 등을 관리하면 좋습니다.contextPacks를 추가하면 Task 정의 → Context 선택 → Prompt 생성까지 자동 연결할 수 있습니다.ACTIVE, DEPRECATED, ARCHIVED 같은 상태와 마지막 검토 시점을 두는 것이 좋습니다..env 변경은 BLOCK, migration/Auth/Permission 변경은 강한 WARNING으로 연결할 수 있습니다.