AI Engineering & Agentic Coding
프롬프트, 컨텍스트, 하네스 엔지니어링과 Claude Code 기반 에이전틱 코딩을 정리합니다. 실무 프로젝트와 개인 MVP에서 직접 활용했던 패턴과 의사결정을 그대로 옮겼습니다.
프롬프트 엔지니어링
프롬프트 엔지니어링은 LLM에게 작업을 지시하는 인터페이스 설계입니다. 함수 시그니처처럼 입력 · 제약 · 출력 형식을 명확히 정의해야 일관된 결과를 얻을 수 있습니다.
1.1 기본 원리와 4단 구조
고품질 프롬프트의 핵심은 역할 → 맥락 → 지시 → 출력 형식 4단을 일관되게 지키는 것입니다. XML 태그로 감싸면 LLM이 각 요소를 명확히 구분합니다.
<role>
당신은 10년 경력의 시니어 Java/Spring 백엔드 개발자입니다.
대규모 제조 MES 시스템 설계 경험이 풍부합니다.
</role>
<context>
레거시 MES(MSSQL + .NET Framework)를
Spring Boot 3 + JPA 기반으로 마이그레이션 중입니다.
저장 프로시저 800개 중 핵심 200개를 먼저 전환합니다.
</context>
<instruction>
아래 SP를 Spring Boot 서비스 레이어 코드로 변환해 주세요.
- 트랜잭션 경계를 명확히 분리할 것
- QueryDSL 동적 쿼리를 활용할 것
- 기존 SP의 비즈니스 로직을 주석으로 매핑할 것
</instruction>
<output_format>
1. 변환된 Service 클래스 (Java 17)
2. Repository 인터페이스
3. 변환 시 주의사항 요약 (3줄 이내)
</output_format>1.2 Zero-shot · Few-shot · Chain-of-Thought
| 기법 | 원리 | 적용 시점 |
|---|---|---|
| Zero-shot | 예시 없이 명확한 지시만으로 작업 수행 | 단순 변환 · 포맷팅 · 번역 |
| Few-shot | 2~5개 입출력 예시로 패턴 학습 유도 | 코드 스타일 통일, 로그 파싱 |
| CoT | "단계별로 생각하기"로 추론 체인 유도 | 복잡한 디버깅, 아키텍처 의사결정 |
| CoT + Few-shot | 추론 과정이 포함된 예시 제공 | 코드 리뷰 자동화, 보안 분석 |
1.3 실무 프롬프트 패턴
페르소나 + 제약은 코드 리뷰처럼 특정 관점만 필요할 때 강력합니다. 출력 구조 고정은 자동화 파이프라인에서 LLM 출력을 프로그래밍적으로 파싱해야 할 때 사용합니다.
아래 코드를 리뷰하고, 반드시 아래 JSON 스키마로만 응답하세요.
JSON 외의 텍스트는 절대 포함하지 마세요.
<output_schema>
{
"review": [
{
"file": "string",
"line": "number",
"severity": "critical | warning | info",
"category": "security | performance | convention | bug",
"message": "string",
"suggestion": "string"
}
],
"summary": {
"total_issues": "number",
"critical_count": "number",
"approve": "boolean"
}
}
</output_schema>컨텍스트 엔지니어링
모든 LLM에는 컨텍스트 윈도우 한계가 있습니다. 프롬프트 엔지니어링이 무엇을 말할지의 기술이라면, 컨텍스트 엔지니어링은 무엇을 포함시킬지를 결정하는 기술입니다.
2.1 컨텍스트 윈도우 관리
- 01시스템 프롬프트
- 02도메인 지식(RAG)
- 03대화 이력(요약)
- 04유저 입력
- 05출력 버퍼
- 우선순위 기반 배분 — 현재 작업에 직접 필요한 정보 최우선, 배경 지식은 요약으로 압축.
- 동적 컨텍스트 로딩 — 모든 정보를 한꺼번에 넣지 않고 필요할 때 RAG로 검색해 주입.
- 대화 이력 압축 — 오래된 대화는 요약본으로 교체하고 최근 2~3턴만 원문 유지.
interface ContextBudget {
systemPrompt: number; // 고정 - 약 2,000 토큰
domainKnowledge: number; // 동적 - RAG 검색 결과
chatHistory: number; // 슬라이딩 윈도우
userInput: number; // 현재 입력
outputBuffer: number; // 응답 생성용 예약
}
function allocateContext(
maxTokens: number,
userInput: string,
ragResults: string[],
chatHistory: Message[]
): ContextBudget {
const SYSTEM_RESERVE = 2000;
const OUTPUT_RESERVE = 4096;
const inputTokens = countTokens(userInput);
const available = maxTokens - SYSTEM_RESERVE - OUTPUT_RESERVE - inputTokens;
const ragBudget = Math.floor(available * 0.7);
const historyBudget = available - ragBudget;
return {
systemPrompt: SYSTEM_RESERVE,
domainKnowledge: ragBudget,
chatHistory: historyBudget,
userInput: inputTokens,
outputBuffer: OUTPUT_RESERVE
};
}2.2 RAG 아키텍처
RAG는 LLM의 지식 한계를 극복하는 핵심 패턴입니다. 사전 학습에 포함되지 않은 사내 기술 문서, API 스펙, 도메인 규격을 실시간으로 검색하여 프롬프트에 주입합니다.
- 01사용자 질의
- 02임베딩 변환
- 03벡터 DB 검색
- 04Top-K 추출
- 05프롬프트 주입
2.3 도메인 지식 주입
| 접근법 | 방법 | 적합한 상황 |
|---|---|---|
| 시스템 프롬프트 주입 | 핵심 용어 · 규칙을 시스템 프롬프트에 하드코딩 | 변경 빈도 낮은 기본 규칙 |
| RAG 동적 주입 | 질의에 맞는 문서를 실시간 검색해 삽입 | 방대한 SOP · 매뉴얼 · 이력 조회 |
| Fine-tuning | 도메인 데이터로 모델 가중치 자체 조정 | 반복적이고 패턴이 명확한 작업 |
하네스 엔지니어링
하네스 엔지니어링은 LLM을 프로덕션에 투입하기 위한 품질 보증 계층입니다. 사람이 매번 결과를 확인할 수 없으므로 자동 평가, 가드레일, 시스템 프롬프트 보호 메커니즘이 필요합니다.
3.1 LLM 평가(Eval)
측정할 수 없으면 개선할 수 없습니다. 프롬프트 변경, 모델 교체, RAG 파라미터 조정이 실제 품질에 미치는 영향을 정량적으로 측정하는 체계가 Eval입니다.
- 01테스트 데이터셋
- 02파이프라인 실행
- 03LLM-as-Judge 평가
- 04점수 산출 · 리포트
3.2 가드레일 설계
가드레일은 입력과 출력 양방향에서 동작합니다. 입력 가드레일은 프롬프트 인젝션과 토픽 이탈을 차단하고, 출력 가드레일은 hallucination과 민감 정보 노출을 잡습니다.
// 입력 가드레일
function inputGuardrail(userInput: string): GuardrailResult {
const injectionPatterns = [
/ignore\s+(previous|above|all)\s+instructions/i,
/system\s*prompt/i,
/시스템\s*프롬프트를?\s*(무시|변경|알려)/,
];
if (injectionPatterns.some(p => p.test(userInput))) {
return { allowed: false, reason: "PROMPT_INJECTION_DETECTED" };
}
return { allowed: true };
}
// 출력 가드레일
function outputGuardrail(response: string): GuardrailResult {
const lotRefs = response.match(/LOT-\d{4}-\d{4}/g) || [];
for (const lot of lotRefs) {
if (!existsInDB(lot)) {
return { allowed: false, reason: `HALLUCINATED_LOT: ${lot}` };
}
}
return { allowed: true };
}3.3 시스템 프롬프트 보호
Claude Code 활용법 (Agentic Coding)
Claude Code는 터미널에서 직접 Claude와 협업하는 에이전틱 코딩 도구입니다. 파일 읽기 · 쓰기, 셸 명령 실행, Git 연동까지 가능하여 "프로젝트를 이해하고 스스로 코딩하는 AI 팀원"으로 활용할 수 있습니다.
4.1 Agentic 워크플로우
- 01CLAUDE.md 작성
- 02작업 지시
- 03Agent 자율 실행
- 04결과 검토 · 커밋
# 프로젝트 루트에서 실행
$ claude
# 비대화형 모드로 특정 작업 실행
$ claude -p "TB_QM_INSP_HDR CRUD API를 Spring Boot로 생성해 줘"
# CI/CD 연동
$ git diff HEAD~1 | claude -p "변경사항을 리뷰하고 버그 가능성을 분석해 줘"4.2 Plan → Code → Verify 루프
복잡한 작업은 먼저 계획을 세우고 확인 후 실행 패턴을 적용하세요. Agent가 한 번에 모든 파일을 수정하면 되돌리기 어렵습니다. 계획 단계에서는 코드 변경을 금지하고, 승인 후 단계별로 실행 · 검증합니다.
4.3 CLAUDE.md 전략
CLAUDE.md는 프로젝트 루트에 두는 컨텍스트 파일로, Claude Code가 자동으로 읽습니다. 잘 작성된 CLAUDE.md는 프롬프트 반복을 극적으로 줄여줍니다.
# CLAUDE.md — MES Quality Management System
## 프로젝트 개요
프론트: React 18 + TypeScript + Ant Design
백엔드: Spring Boot 3.2 + JPA + QueryDSL
DB: MSSQL 2019
인증: Keycloak SSO
## 아키텍처 규칙
- Controller → Service → Repository 3-레이어 엄수
- 모든 API는 /api/v1/ 접두사
- 트랜잭션은 Service 레이어에서만 선언
- DTO ↔ Entity 변환은 MapStruct 사용
## 절대 하지 말 것
- Entity에 @Data 사용 금지 (equals/hashCode 문제)
- 컨트롤러에서 직접 Repository 호출 금지
- any 타입 사용 금지 (TypeScript)
- console.log 커밋 금지R&D 팀 적용 방안
개인 도구가 아닌 팀 인프라로 AI Agent를 정착시키려면, 코드 리뷰 · 아키텍처 설계 · PoC 등 핵심 워크플로우에 자연스럽게 통합해야 합니다.
5.1 코드 리뷰 자동화
PR 생성 시 자동으로 Claude Code가 코드를 리뷰하도록 CI 파이프라인에 통합합니다. 사람 리뷰어의 시간을 절약하고 컨벤션 위반 · 보안 취약점 · 성능 이슈를 사전에 잡아냅니다.
5.2 풀스택 PoC 가속
| 기술 스택 | AI Agent 활용 포인트 | 시간 절약 |
|---|---|---|
| React / TypeScript | 컴포넌트 스캐폴딩, 상태 관리 보일러플레이트 | ~60% |
| Spring Boot / Java | Entity-Repository-Service-Controller 풀 레이어 생성 | ~50% |
| C# / .NET | EF Core 모델, Minimal API, Swagger 자동화 | ~50% |
| MSSQL / Oracle | 스키마 DDL, 마이그레이션, 인덱스 제안 | ~40% |
| 테스트 코드 | JUnit/Jest 자동 생성, E2E 시나리오 작성 | ~70% |
5.3 12주 도입 로드맵
개인 생산성
의무가 아닌 호기심으로 시작합니다. 팀원 각자가 Claude Code · Cursor를 설치하고 일상 업무에서 직접 체험합니다.
팀 표준화
CLAUDE.md를 공유하고 프롬프트 라이브러리를 정리합니다. 잘 통하는 패턴을 팀 자산으로 축적합니다.
워크플로우 통합
PR 자동 리뷰, 문서 자동화, PoC 가속 등을 CI/CD와 결합해 일상 업무 동선에 자연스럽게 끼워 넣습니다.
내재화 · 확산
도입 효과를 KPI로 측정하고 사내 다른 팀으로 확산합니다. 리스크 · 거버넌스도 함께 정리합니다.
.claude/ 인프라 가이드
.claude/ 디렉토리는 Agents · Commands · Skills 세 가지 구성요소로 이루어집니다. Skill이 코딩 규칙을 자동 적용하고, 복잡한 문제는 Agent가 분석하며, Command로 결과를 문서화합니다.
6.1 구성요소
| 구성요소 | 역할 | 저장 위치 |
|---|---|---|
| Agents | 특정 역할을 가진 서브 에이전트 (planner, code-reviewer 등) | .claude/agents/*.md |
| Commands | 슬래시 명령(/dev-docs, /dev-docs-update 등) | .claude/commands/*.md |
| Skills | 키워드 · 파일 패턴에 자동 활성화되는 컨텍스트 | .claude/skills/[name]/SKILL.md |
6.2 실전 시나리오
신규 피처 풀사이클은 /dev-docs → plan-reviewer → 구현(Skill 자동 개입) → code-architecture-reviewer → documentation-architect → /dev-docs-update 순으로 흐릅니다. 개발자가 하는 일은 요구사항 기술 · 결과 확인 · 의사결정뿐이고, 나머지는 .claude/ 인프라가 처리합니다.
6.3 합본 추출 순서
154개 마크다운 합본 파일을 전부 적용하면 오히려 충돌과 성능 저하가 발생합니다. 다음 순서로 필요한 것만 점진 적용하세요.
| 단계 | 대상 | 소요 |
|---|---|---|
| 1 | Agents — planner, plan-reviewer | 5분 |
| 2 | Commands — dev-docs, dev-docs-update | 5분 |
| 3 | Agents — code-architecture-reviewer | 3분 |
| 4 | Skills — 우리 팀 기술 스택 매칭 | 30~60분 |
| 5 | Vercel React Best Practices (57 Rules) | 20분 |