콘텐츠로 이동

01-역할-분담

Claude API와 Claude Code 모두 두 종류의 입력을 받는다.

종류비유빈도누가 쓰는가
시스템 프롬프트(System)“회사 취업규칙”거의 변하지 않음팀 / 프롬프트 작성자
사용자 프롬프트(User)“오늘의 업무 메일”매 호출마다 변함최종 사용자 / 호출 코드
  • 역할(Role / Persona): “당신은 핀테크 백엔드 시니어 리뷰어다”
  • 정책(Policy): 금지사항, 안전 가드, 톤
  • 출력 계약(Output contract): 형식·길이·필수 필드
  • 도메인 상수(Domain constants): 변하지 않는 컨벤션, 용어집
  • 사고 절차(Thinking protocol): “먼저 ~를 확인하고, 그 다음 ~“
  • 이번 입력 데이터: diff, 회의록, 질문
  • 이번만의 변수: 요청자, 마감, 추가 제약
  • 참조 자료: 이번 호출에 한정된 컨텍스트 조각

같은 시스템 프롬프트를 100번 호출해도 비용·관리 단위는 1개다. 사용자 입력만 바뀐다.

회귀 테스트는 “시스템 프롬프트 v1.2 + 입력 50개”를 한 묶음으로 돌린다. 시스템이 사용자 안에 섞여 있으면 무엇이 바뀌었는지 추적이 불가능하다(본 파트 5장).

Anthropic 가이드는 정책·역할을 시스템에 두는 것을 권장한다. 사용자 입력은 신뢰할 수 없는 데이터(예: 외부에서 들어온 이메일)일 수 있고, 시스템과 한 덩어리로 두면 프롬프트 인젝션(prompt injection) 표면이 넓어진다.

Anthropic API의 prompt caching은 변하지 않는 앞부분(prefix)을 캐시한다. 시스템·도구 정의 같은 정적 부분이 길고 안정적일수록 캐시 적중률이 오른다. 사용자 입력은 매번 바뀌므로 캐시에서 제외된다.

  • Anthropic Claude: system 파라미터 + messages: [{role: "user"}, ...]
  • OpenAI GPT-5 prompting guide도 동일한 분리를 권장하며, “developer” / “system” / “user” 메시지의 위계를 명시한다.
  • Claude Code: CLAUDE.md가 사실상의 시스템 프롬프트로 동작한다(상세는 본 챕터 03).

용어는 달라도 핵심은 동일하다. 변하지 않는 규칙은 변하지 않는 자리에 둔다.