Post

프롬프트 엔지니어링

AI에게 원하는 결과를 얻기 위한 프롬프트 작성법과 컨텍스트 최적화 전략을 정리합니다.

프롬프트 엔지니어링은 AI에게 원하는 결과를 얻기 위해 질문이나 지시를 어떻게 표현할지 고민하는 과정이다. 같은 내용을 요청하더라도 표현 방식에 따라 결과물의 질이 크게 달라진다.


핵심 원칙

단순히 “무엇을 만들어 달라”는 것이 아니라, 원하는 출력 형식과 고려해야 할 제약 조건을 함께 제시하는 것이 좋다. AI는 모호한 요청에도 그럴듯한 답변을 내놓지만, 구체적일수록 실무에 바로 쓸 수 있는 결과물이 나온다.


프롬프트의 구성 요소

1. 컨텍스트 (Context)

AI가 문제를 이해하는 데 필요한 배경 정보를 의미한다.

대화가 길어질수록 컨텍스트가 비대해지므로, 아래 명령어를 적절히 활용하자.

명령어설명사용 시점
/compact현재 세션의 컨텍스트를 간소화대화가 길어져 응답이 느려질 때
/clear세션 초기화 (완전히 새로 시작)완전히 다른 주제로 넘어갈 때
/status현재 세션 상태 확인세션 상태가 궁금할 때

2. 구체적인 요구 사항 (Specific Requirements)

맥락만으로는 부족하다. 구체적으로 충족해야 하는 조건을 명시해야 한다.

예를 들어 “코드를 작성해줘”보다는 “Java 17 기준으로, 예외 처리를 포함한 REST API 엔드포인트를 작성해줘”가 훨씬 좋은 결과를 만든다.

3. 예상 결과물 (Expected Output)

구체적인 출력 형식을 제공해야 실무에 바로 쓸 수 있는 답변을 받을 수 있다.

“설명해줘” 대신 “마크다운 테이블로 비교 정리해줘”, “코드 블록에 주석을 포함해줘” 등 형식을 지정하면 결과물의 활용도가 크게 올라간다.


주요 프롬프트 기법

페르소나 부여 (Role Assignment)

AI에게 특정 역할을 부여하면 그에 맞는 관점과 깊이로 답변한다.

1
2
3
4
5
6
7
# 효과 낮음
"이 코드 리뷰해줘"

# 효과 높음
"너는 10년 경력의 시니어 백엔드 개발자야.
Spring Security 관점에서 이 코드의 보안 취약점을 찾아줘.
발견한 문제는 심각도(높음/중간/낮음)로 분류해서 설명해줘."

Few-shot 프롬프팅

원하는 결과물의 예시를 먼저 보여주는 방식이다. 형식이 중요한 작업(커밋 메시지, 에러 메시지, 문서 등)에 특히 효과적이다.

1
2
3
4
5
6
7
8
9
10
11
12
# 아래 형식으로 커밋 메시지를 작성해줘.

예시1:
feat: 사용자 로그인 기능 추가
- JWT 토큰 발급 구현
- 리프레시 토큰 처리 추가

예시2:
fix: 결제 금액 계산 오류 수정
- 할인 쿠폰 중복 적용 방지

지금 변경한 코드: [코드 붙여넣기]

단계적 사고 유도 (Chain-of-Thought)

복잡한 문제는 AI에게 단계별로 생각하도록 유도하면 정확도가 올라간다.

1
2
3
4
5
6
7
8
# 단순 요청
"이 버그의 원인이 뭐야?"

# 단계적 사고 유도
"이 버그를 분석할 때:
1. 먼저 에러 메시지와 스택 트레이스를 분석해줘
2. 그 다음 코드에서 문제가 될 수 있는 부분을 찾아줘
3. 마지막으로 수정 방법을 제안해줘"

제약 조건 명시

원하지 않는 결과를 제외하려면 명시적으로 금지 조건을 추가한다.

1
2
3
4
"이 기능을 리팩터링해줘.
단, 외부 라이브러리는 추가하지 말고,
기존 테스트가 깨지지 않도록 해줘.
성능보다 가독성을 우선으로 해줘."

컨텍스트 최적화 전략

작업 범위를 명확히 제한하기

단계적 접근법(Narrow Down) 을 활용한다.

큰 그림 → 의심 영역 → 구체적 원인 순으로 좁혀가며 질문하면, 한 번에 모든 것을 요청할 때보다 더 정확한 답변을 얻을 수 있다.

CLAUDE.md로 영구 컨텍스트 관리

Claude Code에서는 프로젝트 루트에 CLAUDE.md 파일을 두면, 매 세션마다 자동으로 읽혀 컨텍스트가 유지된다. 반복적으로 설명해야 하는 프로젝트 배경, 코딩 컨벤션, 주의사항 등을 여기에 정리해두면 효율이 크게 올라간다.

1
2
3
4
5
6
7
8
9
10
11
12
13
# CLAUDE.md 예시

## 프로젝트 개요
Spring Boot 3.x 기반 결제 API 서버

## 코딩 컨벤션
- 변수명은 camelCase
- 서비스 레이어에서만 트랜잭션 처리
- 모든 외부 API 호출은 재시도 로직 포함

## 주의사항
- 고객 개인정보는 로그에 절대 출력하지 않음
- prod 환경 설정은 절대 수정하지 않음

토큰 관리와 세션 최적화

토큰이란 AI가 텍스트를 처리하는 기본 단위다. 영어보다 한글이 토큰을 더 많이 소모한다는 점도 참고하자.

불필요한 대화가 쌓이면 컨텍스트 윈도우를 낭비하게 되므로, 적절한 시점에 /compact나 /clear를 활용하는 것이 좋다.


피해야 할 패턴

나쁜 예이유좋은 예
“코드 짜줘”너무 모호함“Java 17로 Spring Boot REST API 엔드포인트 작성해줘”
“이게 왜 안 돼?”문제 정보 없음에러 메시지 + 관련 코드 + 시도한 것을 함께 전달
“다 고쳐줘”범위 불명확“성능 문제만 수정해줘, 기능 변경은 하지 말고”
긴 대화 중 새 주제컨텍스트 오염/clear 후 새 세션 시작

정리

프롬프트 엔지니어링의 핵심은 AI가 판단해야 할 모호한 부분을 최소화하는 것이다. 역할, 요구사항, 제약조건, 출력 형식을 명확하게 줄수록 원하는 결과물에 가까워진다. 처음에는 번거롭게 느껴지지만, 한 번 잘 짜놓은 프롬프트 템플릿은 반복 작업에서 시간을 크게 절약해준다.

This post is licensed under CC BY 4.0 by the author.