7장. 프롬프트 엔지니어링 심화
7장. 프롬프트 엔지니어링 심화
프롬프트를 잘 쓰는 사람은 문장을 예쁘게 쓰는 사람이 아니다. 모델이 어떤 단어를 먼저 읽고, 무엇을 더 크게 듣고, 어느 시점까지 붙잡고, 어떤 형식으로 조건을 받는지 이해한 사람이다. 그래서 실무에서 프롬프트는 감성적인 주문이 아니라 입력 규격이다. 이 장에서는 그 규격을 다루는 방법을 배운다.

7.1 가중치, 임베딩, 타임스텝핑
프롬프트 엔지니어링의 첫 번째 원칙은 단순하다. 중요한 말은 앞에 두고, 정말 중요한 말만 크게 말한다. ComfyUI는 프롬프트 일부를 (token:weight) 문법으로 강조하거나 약화할 수 있고, 괄호만 쓰면 약한 강조로 처리한다. 중첩 괄호는 곱셈처럼 누적되며, 괄호를 문자 그대로 쓰고 싶다면 이스케이프가 필요하다.12
portrait of a woman, red dress, rainy street
portrait of a woman, (red dress:1.25), rainy street
portrait of a woman, ((red dress):1.1), rainy street첫 번째 줄은 평범한 설명이다. 두 번째 줄은 빨간 드레스의 중요도를 높인다. 세 번째 줄은 강조를 한 번 더 건다. 여기서 초보자가 자주 빠지는 함정은 모든 단어를 다 크게 말하는 것이다. 모두가 중요하면 아무도 중요하지 않다. 실전에서는 주제, 구도, 핵심 소품처럼 결과를 좌우하는 1~3개 요소만 가중치를 주는 편이 안정적이다.
가중치는 만능 리모컨이 아니다. (masterpiece:1.8) 같은 과격한 강조를 여러 개 겹치면 이미지가 좋아지기보다 의미 충돌이 늘어난다. 특히 인물, 의상, 배경, 조명을 동시에 세게 밀면 모델은 마치 네 명의 감독에게 동시에 지시받는 스태프처럼 우왕좌왕한다. 프로덕션에서는 긴 미사여구보다 짧고 충돌 없는 명세가 더 강하다.
임베딩은 텍스트 쪽에서 개념을 압축해 넣는 작은 모듈이라고 이해하면 쉽다. ComfyUI는 embedding:name 형태로 텍스트 인버전 임베딩을 참조할 수 있다.12
portrait photo, soft rim light, embedding:my_style임베딩은 특정 질감, 화풍, 보정 경향, 또는 학습된 개념을 짧은 키워드처럼 불러오는 장치다. LoRA가 모델 쪽 성향을 덧입히는 외투라면, 임베딩은 텍스트 해석을 미세 조정하는 안경에 가깝다. 둘 다 쓸 수 있지만 역할은 다르다. 실무에서는 LoRA와 임베딩을 한 번에 많이 쌓기보다, 먼저 기본 프롬프트로 의도를 고정한 뒤 필요한 보정만 추가하는 편이 재현성이 좋다.
이제 한 단계 더 가보자. 같은 프롬프트를 디노이징의 처음부터 끝까지 똑같이 적용할 필요는 없다. 디퓨전 모델은 초반에 큰 형태와 구도를 잡고, 후반으로 갈수록 질감과 디테일을 다듬는다. ComfyUI의 컨디셔닝 관련 노드를 이용하면 특정 프롬프트를 디노이징의 일부 구간에만 적용할 수 있다. 대표적으로 Conditioning Set Timestep Range로 적용 구간을 나누고, Conditioning Combine이나 Conditioning Average로 다시 합치는 방식이 있다.3
이 기법을 타임스텝핑이라고 부르면 이해가 쉽다. 말하자면 같은 배우에게 리허설 때는 동선을, 촬영 막판에는 표정과 숨소리를 따로 지시하는 것이다.
| 목적 | 초반 구간에 둘 내용 | 후반 구간에 둘 내용 |
|---|---|---|
| 구도 안정화 | 인물 수, 카메라 앵글, 배치, 배경 구조 | 피부 질감, 의상 재질, 머리카락 결 |
| 스타일 분리 | 실루엣, 공간감, 원근 | 색감, 필름 그레인, 표면 디테일 |
| 수정 작업 | 큰 형태, 포즈, 프레이밍 | 로고 제거, 소품 정리, 세부 보정 |
예를 들어 인물 사진에서 얼굴은 잘 나오는데 배경이 자꾸 과장된다면, 초반 구간에는 street at night, wet pavement, neon signs 같은 공간 지시를 두고, 후반 구간에는 natural skin texture, detailed eyes, subtle makeup 같은 디테일 지시를 두는 식이다. 반대로 스타일 LoRA가 너무 강해서 구도까지 흔들린다면, 스타일 관련 컨디셔닝을 후반부에만 제한하는 방법도 쓸 수 있다.
핵심은 이것이다. 프롬프트는 한 덩어리 문장이 아니라, 필요하면 시간축으로 분해할 수 있는 조건 집합이다. 이 관점을 갖는 순간 프롬프트는 감각이 아니라 설계가 된다.
7.2 한글 프롬프트의 한계와 우회 전략
한국어 프롬프트가 아예 안 되는 것은 아니다. 다만 많은 이미지 모델은 영어 캡션과 영어 태그 비중이 훨씬 높고, 카메라, 조명, 재질, 사진 장르 같은 세부 어휘는 영어에서 더 안정적으로 반응하는 경우가 많다. 그래서 한국어는 아이디어를 빠르게 적는 데 좋고, 영어는 모델에 사양을 전달하는 데 강하다. 이 둘을 싸우게 하지 말고 역할을 나눠야 한다.
가장 실용적인 방법은 한국어를 초안으로 쓰고, 영어를 최종 입력 규격으로 쓰는 것이다. ComfyUI용 한국어 프롬프트 엔지니어 노드처럼 한국어 설명을 받아 영어 프롬프트와 네거티브 프롬프트로 확장해 주는 도구도 이미 나와 있다. 이런 노드는 GPT, Claude, Gemini, Ollama 같은 여러 LLM을 백엔드로 붙일 수 있어 입문자와 실무자 모두에게 유용하다.4
실무에서 잘 먹히는 우회 전략은 다음 다섯 가지다.
아이디어는 한국어로 짧게 쓴다. 누가, 어디서, 무엇을 하는지 정도만 분명히 적는다.
최종 생성용 프롬프트는 영어 중심으로 정리한다. 특히 카메라, 렌즈, 조명, 구도, 재질, 스타일 표현은 영어가 안정적이다.
고유명사와 브랜드, 영화 제목, 작가명, 촬영 기법은 가능한 한 원어 표기를 유지한다.
한글로 길게 설명하기보다 한국어 메모를 영어 키워드 묶음으로 압축한다.
모델이 자꾸 오해하는 요소는 번역에 맡기지 말고 직접 영어로 고정한다.
예를 들어 한국어 초안이 다음과 같다고 하자.
비 오는 새벽, 편의점 앞에 서 있는 20대 여성, 필름 사진 느낌, 외로운 분위기이 문장을 그대로 던지기보다, 모델이 잘 알아듣는 입력 규격으로 바꾸면 훨씬 안정적이다.
young woman standing in front of a convenience store at dawn in the rain, wet pavement reflections, candid street photography, 35mm film look, subdued colors, lonely mood, soft neon light두 문장의 차이는 번역이 아니라 구조다. 앞 문장은 사람 언어이고, 뒤 문장은 모델 언어에 가깝다.
한글 프롬프트에서 특히 흔한 문제는 추상어 과다다. 예를 들어 감성적인, 몽환적인, 예쁜, 분위기 있는 같은 말은 사람끼리는 통하지만 모델에게는 해석 폭이 너무 넓다. 이럴 때는 추상어를 시각 요소로 풀어 써야 한다. 몽환적이라면 안개, 낮은 대비, 역광, 할레이션, 파스텔 톤처럼 보이는 것으로 바꿔야 한다. 모델은 감정을 읽기보다 패턴을 본다.
프로덕션에서는 아예 작은 번역 사전을 만들어 두는 것도 좋다. 예를 들어 다음처럼 팀 내 공용 표현을 정해 놓으면 결과 편차가 줄어든다.
| 한국어 의도 | 영어 사양 예시 |
|---|---|
| 감성적인 필름 느낌 | 35mm film look, soft grain, muted colors |
| 선명한 제품 사진 | clean product photography, studio lighting, sharp focus |
| 따뜻한 광고 컷 | warm commercial lighting, inviting mood, polished composition |
| 웹툰풍 캐릭터 | clean line art, cel shading, comic panel aesthetic |
이렇게 되면 프롬프트는 번역 문제가 아니라 어휘 관리 문제가 된다. 그리고 어휘 관리가 되면, 팀원이 바뀌어도 출력 퀄리티가 덜 흔들린다.
7.3 LLM(Ollama, GPT, Claude)으로 프롬프트 자동 작성
LLM을 프롬프트 작성에 쓸 때 가장 중요한 태도는 하나다. 시인으로 쓰지 말고 컴파일러로 써라. 즉, 멋진 문장을 써 달라고 하기보다 내 의도를 모델이 잘 읽는 형식으로 변환해 달라고 요청해야 한다.
LLM의 역할은 크게 셋으로 나눌 수 있다.
한국어 아이디어를 영어 생성 프롬프트로 번역한다.
짧은 메모를 촬영, 조명, 구도, 재질 정보가 있는 구조화된 프롬프트로 확장한다.
길고 지저분한 프롬프트를 모델별로 간결하게 정리한다.
좋은 결과를 얻으려면 입력부터 구조화해야 한다. 아래처럼 쓰면 성공 확률이 높다.
역할: 이미지 생성용 프롬프트 컴파일러
목표: 사실적인 인물 광고 컷 생성
입력:
- 주제: 20대 여성 러너
- 행동: 도심 새벽 러닝
- 장소: 강변 산책로
- 카메라: low angle, 35mm
- 조명: sunrise backlight
- 스타일: sports commercial
- 반드시 포함: 땀, 역동성, 신발 디테일
- 피할 요소: extra fingers, blurry face, distorted shoes
출력:
- positive prompt 한 줄
- negative prompt 한 줄
- 80 토큰 이내
- 영어, 쉼표 구분이렇게 쓰면 LLM은 창의력을 뽐내기보다 정해진 슬롯을 채우는 방향으로 움직인다. 바로 이 지점이 프로덕션에서 중요하다. 자유 작문은 재미있지만, 재현성은 낮다.
온도값도 중요하다. LLM 프롬프트 생성 노드들은 보통 temperature를 낮추면 더 결정적이고 일관된 출력을, 높이면 더 다양하고 창의적인 출력을 내도록 설계된다.5 실무 감각으로 정리하면 다음과 같다.
| 용도 | 권장 temperature 감각 |
|---|---|
| 프로덕션용 반복 생성 | 0.1 ~ 0.3 |
| 레퍼런스 탐색 | 0.3 ~ 0.5 |
| 아이데이션, 발상 확장 | 0.6 이상 |
광고 배너 100개를 뽑아야 하는데 프롬프트가 실행마다 달라진다면 곤란하다. 반대로 콘셉트 탐색 단계에서는 약간의 변주가 오히려 아이디어를 넓혀 준다. 결국 temperature는 창의력 버튼이 아니라 통제 범위 조절기다.
ComfyUI 안에서는 한국어 프롬프트 엔지니어 노드나 범용 LLM Prompt Generator 노드를 넣어, 생성된 문자열을 바로 텍스트 인코더로 넘기는 흐름을 만들 수 있다.45 가장 단순한 파이프라인은 이렇다.
텍스트 입력 또는 한국어 메모
→ LLM 프롬프트 생성 노드
→ 결과 미리보기
→ CLIP Text Encode
→ KSampler여기서 중요한 것은 사람이 중간 검수 지점을 갖는 것이다. LLM은 말이 유창해서 그럴듯해 보이지만, 그럴듯함과 유효함은 다르다. 특히 이미지 프롬프트에서는 다음 네 가지를 꼭 확인해야 한다.
같은 뜻의 동의어를 너무 많이 늘어놓지 않았는가
모델이 잘 모를 만한 장식어가 끼어들지 않았는가
실제로 원하는 주제보다 배경이나 스타일 단어가 더 강해지지 않았는가
특정 LoRA나 임베딩의 트리거를 엉뚱하게 오염시키지 않았는가
LLM을 잘 쓰는 팀은 프롬프트를 매번 새로 쓰지 않는다. 템플릿, 금칙어, 토큰 길이 제한, 모델별 스타일 프리셋을 함께 관리한다. 즉, LLM을 도입해도 장인이 사라지는 것이 아니라, 장인의 감각이 템플릿으로 승격될 뿐이다.
7.4 Wildcard와 Dynamic Prompts로 변주 만들기
프로덕션에서 한 장 잘 뽑는 것만큼 중요한 것이 변주를 많이, 그리고 질서 있게 만드는 일이다. 바로 여기서 wildcard가 빛난다. ComfyUI 텍스트 필드는 기본적으로 {a|b|c} 형태의 랜덤 선택 문법을 지원한다.2
fashion portrait, {red|blue|yellow} jacket, studio background이 프롬프트를 큐에 올릴 때마다 재킷 색이 바뀐다. 아주 단순하지만 배치 생성에 놀라울 만큼 유용하다. 썸네일 A/B 테스트, 상품 배경 변주, SNS 크리에이티브 다변화 같은 작업에서 특히 강하다.
하지만 실무는 금방 더 복잡해진다. 색상만 바꾸는 게 아니라 인물 타입, 의상, 장소, 렌즈, 조명, 카피 무드까지 함께 돌리고 싶어진다. 이때는 PromptFlow 같은 커스텀 노드가 편하다. PromptFlow는 인라인 wildcard뿐 아니라 __folder/filename__ 형태의 파일 wildcard, 필드별 고정과 랜덤, 증가와 감소 모드, 그리고 가능한 조합을 미리 보여 주는 Variations 기능까지 제공한다.6
예를 들어 폴더를 이렇게 구성할 수 있다.
ComfyUI/wildcards/
personas/
runner.txt
office_worker.txt
outfits/
sportswear.txt
business_casual.txt
lighting/
sunrise.txt
studio_soft.txt그리고 프롬프트는 이렇게 쓴다.
__personas/runner__ wearing __outfits/sportswear__, shot in __lighting/sunrise__, commercial photo, clean background이제 텍스트 한 줄이 작은 콘텐츠 공장으로 바뀐다. 더 중요한 것은 무작위가 아니라 통제된 무작위라는 점이다. 예를 들어 인물은 고정하고 배경만 랜덤, 혹은 의상만 순차 변경 같은 운용이 가능해지면 A/B 테스트가 실험 설계처럼 변한다.
Wildcard를 잘 쓰기 위한 실무 규칙도 있다.
한 번에 모든 축을 랜덤화하지 않는다. 먼저 배경만, 다음엔 의상만 바꾼다.
의미적으로 묶이는 단어는 파일 단위로 관리한다. 예를 들어 스포츠웨어와 하이힐을 같은 목록에 넣지 않는다.
조합 수를 먼저 계산한다. 5가지 인물, 4가지 의상, 3가지 조명이면 벌써 60조합이다.
결과 파일명이나 메타데이터에 어떤 wildcard가 선택됐는지 남긴다.
베이스 프롬프트는 고정하고, 변주 슬롯만 열어 둔다.
PromptFlow의 Variations 기능처럼 생성 전에 가능한 조합을 미리 확인하는 도구는 여기서 특히 유용하다.6 실무에서 가장 무서운 것은 적은 변주가 아니라 쓸모없는 변주의 폭발이다. 랜덤은 창의성을 주지만, 관리되지 않은 랜덤은 검수 지옥을 부른다.
좋은 wildcard 설계는 결국 좋은 상품 진열과 비슷하다. 창고에 물건이 많다고 매장이 좋아지는 것은 아니다. 어디에 무엇이 있고, 어떤 조합이 팔리는지 알아야 한다.
실무 요약
이 장의 내용을 한 문장으로 요약하면 이렇다. 프롬프트는 문장이 아니라 시스템 입력 규격이다.
아래 다섯 가지만 몸에 익혀도 프롬프트 품질이 눈에 띄게 좋아진다.
중요한 요소는 앞에 두고, 가중치는 적게 그러나 정확하게 준다.
임베딩과 LoRA는 많이 쌓기보다 역할을 분리해서 쓴다.
하나의 프롬프트로 해결되지 않으면 타임스텝으로 분해한다.
한국어는 발상 도구로, 영어는 최종 사양으로 쓰는 편이 안정적이다.
LLM과 wildcard는 자동화 도구이지 판단 대행자가 아니다.
좋은 프롬프트는 길어서 좋은 것이 아니라, 모델이 헷갈리지 않아서 좋다. 그리고 프로덕션에서는 바로 그 차이가 속도, 재현성, 비용으로 돌아온다.
참고
1DeepWiki - Embeddings and Prompt Weighting
2ComfyUI Community Manual - Text Prompts
4ComfyUI Korean Prompt Engineer with LLM
이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.