WebPiki
tutorial

프롬프트 엔지니어링 실전 팁 — AI를 제대로 써먹는 법

ChatGPT, Claude 등 LLM에게 원하는 결과를 뽑아내는 프롬프트 작성법. 역할 지정, Few-shot, Chain of Thought 등 실무에서 바로 쓸 수 있는 기법 정리.

AI한테 뭔가 물어봤는데 기대한 답이 안 나온 적 있을 거다. "알아서 잘 해줘"라고 했더니 정말 '알아서' 해버린다든지. 프롬프트 엔지니어링이라는 거창한 이름이 붙어있지만, 결국 핵심은 하나다. AI한테 내가 원하는 걸 정확히 전달하는 기술.

근데 "정확히 전달"이란 게 생각보다 기술적이다. 몇 가지 패턴만 알면 같은 AI에서 뽑아내는 결과의 질이 확 달라진다.

역할 설정 — 답변의 깊이를 결정하는 한 줄

"너는 10년차 백엔드 개발자야"라고 시작하면 답변의 수준이 달라진다. AI는 문맥에 따라 응답을 조절하는데, 역할을 명시하면 해당 분야의 전문 용어나 관점을 기반으로 답한다.

너는 시니어 프론트엔드 개발자야.
React 18에서 19로 마이그레이션할 때 주의할 점을 알려줘.

"알려줘"만 쓸 때보다 훨씬 구체적인 답이 나온다. 다만 "너는 천재 과학자야"라고 한다고 천재적인 답을 주진 않는다. 현실적인 전문가 역할이 효과적이다.

이거랑 세트로 쓰면 좋은 게 출력 형식 지정이다. AI는 형식을 안 정해주면 장황하게 쓰는 경향이 있어서, 원하는 형태를 딱 지정하면 결과가 깔끔해진다.

아래 프레임워크를 비교해서 표로 정리해줘.
열: 프레임워크명, 언어, 장점, 단점, 학습 곡선
행: Django, FastAPI, Express, NestJS

역할 + 형식. 이 두 가지만 챙겨도 "다시 해줘"를 외칠 확률이 절반으로 줄어든다.

Few-shot과 Chain of Thought — AI의 학습 능력을 이용하기

사람도 예시를 보면 이해가 빠르듯 AI도 마찬가지다. 원하는 입력-출력 패턴을 2~3개 보여주면 그 패턴을 따라간다. 이걸 Few-shot 프롬프팅이라고 한다.

다음 형식으로 커밋 메시지를 작성해줘:

입력: 로그인 페이지에 비밀번호 찾기 링크 추가
출력: feat(auth): add forgot password link to login page

입력: 장바구니에서 수량 0일 때 크래시 수정
출력: fix(cart): prevent crash when item quantity is zero

입력: 회원가입 API에 이메일 중복 체크 추가
출력:

예시가 많을수록 정확도가 올라가지만, 보통 2~3개면 충분하다. 코딩 컨벤션이나 문서 스타일처럼 "정해진 형식"이 있는 작업에서 특히 효과적이다.

한편, 복잡한 문제에는 Chain of Thought가 잘 먹힌다. "단계별로 생각해서 풀어봐"를 추가하는 것만으로 정확도가 올라간다.

이 코드에 버그가 있는지 분석해줘.
단계별로 실행 흐름을 따라가면서 문제가 될 수 있는 부분을 찾아줘.

AI가 중간 과정을 생략하고 답만 내놓으면 틀릴 확률이 높은데, 사고 과정을 풀어쓰게 하면 논리적 오류가 줄어든다. 수학 문제, 코드 디버깅, 복잡한 분석에서 특히 차이가 크다.

Few-shot이 "이렇게 해"라면, CoT는 "천천히 생각해"에 가깝다. 둘 다 한 줄 추가하는 수준인데 결과 차이는 상당하다.

제약과 구분 — 불필요한 출력을 잘라내는 기술

AI는 제한이 없으면 장문으로 답하거나 범위를 벗어나기 쉽다. 제약 조건을 거는 게 좀 딱딱하게 느껴질 수 있지만, 결과 품질에는 직접적으로 영향을 준다.

Python 3.12 기준으로 답해줘.
외부 라이브러리 사용하지 마.
코드만 출력하고 설명은 빼.
200자 이내로 요약해.

이런 제약을 여러 개 동시에 거는 것도 가능하다. 오히려 조건이 구체적일수록 AI가 더 정확한 결과를 내놓는다. "알아서 해줘"가 가장 애매한 지시고, "이 조건 안에서 해줘"가 가장 명확한 지시다.

프롬프트에 코드나 텍스트 데이터를 넣을 때는 구분자도 중요하다. 지시문과 데이터를 분리하지 않으면 AI가 데이터를 지시문으로 해석할 수 있다.

아래 코드를 리뷰해줘. 보안 취약점이 있는지 확인해.

---
[코드 블록]
---

트리플 대시(---), 트리플 백틱, XML 태그 등 뭘 쓰든 상관없다. 핵심은 "여기까지가 지시, 여기부터가 데이터"를 명확하게 나누는 거다. 특히 긴 텍스트를 분석시킬 때는 이 습관의 유무가 결과 품질을 가른다.

첫 프롬프트에 올인하라

프롬프트를 대충 던지고 → 결과가 애매해서 → "아니 그게 아니라..." → 다시 수정하는 루프. 이걸 3~4번 반복하면 결국 처음부터 잘 쓰는 것보다 시간이 더 든다.

비교해보면 차이가 명확하다:

// 나쁜 예
React 컴포넌트 하나 만들어줘

// 좋은 예
React + TypeScript로 이메일 입력 폼 컴포넌트를 만들어줘.
- Tailwind CSS로 스타일링
- 이메일 형식 검증 (정규식)
- 에러 메시지 표시
- onSubmit 콜백 prop
- 접근성 (aria-label, 키보드 내비게이션) 반영

맥락, 조건, 형식을 한번에 넣는 게 처음엔 귀찮지만, 전체 작업 시간은 오히려 줄어든다. 프롬프트 작성에 30초를 더 쓰면 수정에 5분을 아끼는 셈이다.

반대로 한 프롬프트에 너무 많은 걸 넣는 것도 문제다. "API 설계하고, DB 스키마 짜고, 테스트 코드까지 작성해줘"라고 하면 전부 대충 나온다. 복잡한 작업은 단계별로 쪼개서 요청하는 게 품질이 훨씬 좋다.

1단계: "회원 관리 API의 엔드포인트를 설계해줘" 2단계: "위 설계를 기반으로 DB 스키마를 만들어줘" 3단계: "이 API에 대한 통합 테스트를 작성해줘"

한 프롬프트의 밀도는 높이되, 범위는 좁히는 게 요령이다.

자기 검증 — AI한테 스스로 틀린 걸 찾게 하기

AI가 내놓은 답이 맞는지 본인한테 다시 확인시키는 것도 유효한 기법이다.

위에서 작성한 코드에 edge case가 있는지 직접 검토해봐.
빈 배열, null 입력, 매우 큰 숫자 등을 고려해서.

100% 신뢰할 수는 없지만, 한 번 더 거르는 효과가 있다. 특히 코드 생성 후에 "이 코드의 시간 복잡도를 분석하고, 더 효율적인 방법이 있으면 제안해줘"라고 이어서 물으면 초안보다 나은 결과를 얻을 수 있다.

자기 검증은 단독으로 쓰기보다 작업 흐름의 마지막 단계로 넣는 게 좋다. 코드 생성 → 코드 리뷰 → 테스트 케이스 작성. 이렇게 한 대화 안에서 여러 역할을 시키면 단일 프롬프트보다 결과물의 품질이 올라간다.

모델마다 성격이 다르다는 것

ChatGPT, Claude, Gemini는 같은 프롬프트를 넣어도 결과가 꽤 다르다. 각 모델의 성격을 아는 게 도움이 된다.

코드 생성에서는 Claude가 긴 코드를 일관성 있게 뽑아주는 편이고, ChatGPT는 코드 설명과 대화형 학습이 자연스럽다. 복잡한 추론에서는 ChatGPT의 o3 시리즈가 강세를 보이고, 긴 문서를 통째로 분석하는 건 Claude의 컨텍스트 윈도우가 유리하다.

시스템 프롬프트 활용법이나 토큰 제한도 모델마다 다르다. 자기가 주로 쓰는 모델의 공식 문서를 한번은 훑어보는 걸 권한다. 프롬프트 가이드를 따로 제공하는 모델도 있다.

결국 커뮤니케이션 능력이다

기법을 여러 가지 정리하긴 했는데, 결국 AI를 잘 쓰는 건 "명확하게 소통하는 능력"이다. 사람한테 업무 요청할 때도 두루뭉술하게 말하면 원하는 결과가 안 나오듯, AI도 마찬가지다.

다만 사람과의 커뮤니케이션과 다른 점이 하나 있다면, AI는 눈치를 안 본다는 거다. "이 정도면 알아듣겠지"가 통하지 않는다. 맥락을 생략하면 그냥 생략된 대로 답한다. 귀찮더라도 배경, 조건, 기대하는 결과를 명시적으로 쓰는 습관이 프롬프트 실력의 전부라고 해도 과언이 아니다.

#프롬프트엔지니어링#ChatGPT#Claude#AI#LLM

관련 글