
나의 AI 정원 앱이 왜 계속 호텔만 생성했는지, 그리고 어떻게 해결했는지
요약
AI 정원 생성 앱 개발 과정에서 발생한 이미지 품질 저하 문제를 프롬프트 엔지니어링을 통해 해결하는 과정을 다룹니다. 단순 사물 나열 방식에서 벗어나 '분위기(mood)'를 묘사하는 방식으로 프롬프트를 개선하여 결과물을 최적화합니다.
핵심 포인트
- 사물 중심의 구체적 지시보다 분위기 묘사가 효과적일 수 있음
- 프롬프트를 API 호출처럼 구조적으로 다루는 접근법 제시
- GPT를 활용한 프롬프트 최적화 전략 및 시행착오 공유
이제 앱의 GUI (Graphical User Interface)가 준비되었으니, 프롬프트 (Prompt)를 "프로그래밍"할 차례입니다! 지식이 많지 않았던 저는 프롬프트를 마치 API (Application Programming Interface) 호출처럼 다루었습니다. 어질러진 마당 사진을 업로드하고 프롬프트를 입력하기 시작했습니다.
이미지 전의 샘플
일련의 지침(잔디, 가구, 멀치(mulch), 자생 상록 관목, 가구, 태양광 및 스트링 조명 추가)을 입력한 후, 다음과 같은 결과물을 얻었습니다.
괜찮아 보이지만, 질감이 색이 바랜 듯하고 매력적이지 않게 느껴집니다... 다른 예시들도 여러 번 시도해 보았지만 모두 같은 문제를 가지고 있었습니다. 활기찬 잔디와 멋진 조명을 추가해 달라고 아무리 요청해도, 낡은 잔디, 색이 바랜 느낌, 회색 하늘이 나타났고, 조명은 포함될 수도 있고 아닐 수도 있었습니다...
그냥 "분위기"를 묘사해 보는 건 어떨까??
그래서 GPT에게 이 문제를 어떻게 해결해야 하는지 물었습니다. GPT는 집 같은(homely), 모텔 같은(motel-like), 아침 햇살(morning sun), 깔끔한(neat), 정돈된(tidy), 단순한(simple), 우아한(elegant) 것과 같이 단순히 "분위기"를 묘사해야 한다고 말했습니다. 그리고 사물은 모델이 배치하도록 두라고 했습니다. 그래서 다음과 같은 결과물을 얻었습니다:
더 나아 보이긴 하지만... 너무 깔끔한 호텔 같고, 콘크리트 정글 같으며, 자재들이 많은 건설 작업이 들어간 비싼 것처럼 보입니다. 계속해서 "집 같은(homely)", "저렴한(affordable)" 느낌을 달라고 요청하고 있지만, 모델은 이를 무시하는 것 같습니다.
프롬프트의 진짜 의미
그래서 저는 처음부터 다시 시작하기로 했습니다. 다른 모델인 Gemini를 사용하여 프로젝트와 제가 직면한 문제들을 설명했습니다.
Gemini는 저에게 놀라운 사실을 말해주었습니다...! 그것은 바로 프롬프트 엔지니어링 (Prompt engineering)은 프로그래밍이 아니라는 점이었습니다. 저는 내내 잘못된 멘탈 모델 (Mental model)을 가지고 있었습니다.
확률적 컴파일러 (Probabilistic Compiler) vs 잠재 공간 (Latent Space)
제가 전통적인 코드를 작성할 때는 결정론적인 (Deterministic) CPU에 명령을 내리는 것입니다. 하지만 프롬프트를 작성할 때는 **통계적 가중치 행렬 (Statistical weight matrix)**과 상호작용하는 것입니다.
AI는 저의 텍스트 지침을 컴파일 (Compile)하는 것이 아니라, **잠재 공간 (Latent space)**이라고 불리는 인간 개념들의 거대하고 다차원적인 수학적 지도를 탐색합니다.
모델의 학습 데이터에 포함된 모든 단어, 구절, 시각적 스타일은 이 지도 위에서 일련의 좌표 세트로 존재합니다. 유사한 개념들은 동일한 지리적 근처에 위치합니다.
저의 프롬프트는 명령형 명령이 아닙니다. 그것은 생성기를 특정 통계적 우편번호(Zip code) 쪽으로 끌어당기는 **벡터 좌표 (Vector coordinate)**입니다.
택시 비유:
**전통적인 코딩 (Traditional coding)**은 운전자에게 정확한 GPS 좌표를 주는 것과 같습니다: "400미터를 주행한 뒤, 좌회전하여, 42번 주차 구역에 주차하세요." 결과는 매번 동일합니다.
**프롬프팅 (Prompting)**은 택시를 불러 이렇게 말하는 것과 같습니다: "예술 지구(Arts District) 내의 아늑한 곳으로 데려다주세요." 동네가 매우 넓기 때문에, 운전자는 매번 완전히 다른 골목길에 저를 내려줍니다.
두 장소 모두 기술적으로는 제 설명에 부합하지만, 시각적 배치는 완전히 달라집니다. 만약 제가 프롬프트를 느슨하게 남겨둔다면, 모델은 그 동네 주변을 배회하게 되며, 이는 제가 목격한 거대한 분산 (Variance)을 야기합니다.
저의 해결책: "설정 파일 (Config File)" 구조화하기
저에게 해결책은 AI에게 텍스트 단락을 전달하는 대신, 깔끔하고 구조화된 의사 스키마 (Pseudo-schema)를 전달하는 것이었습니다. 엄격한 파라미터 (Parameters)를 정의함으로써, 저는 공간적 및 재료적 연속성을 강제했습니다.
결국 저의 분산을 길들일 수 있었던 구조화된 접근 방식은 다음과 같습니다:
[환경 지도 (Environment Map)]: 업로드된 뒷마당 사진을 공간적 경계 맥락으로 엄격하게 사용할 것.
[스타일 제약 (Style Const)]: 밝은 아침 햇살, 고대비 건축 사진, 집 같은 분위기.
[재정적 가드레일 (Financial Guardrails)]: 저비용의 DIY 친화적 재료만 보여줄 것.
...
이것이 작동하는 이유:
-
환경 고정 (Locks the Environment): 조명과 카메라 각도를 사전에 정의함으로써, AI가 한낮의 태양에서 분위기 있는 황혼으로 무작위로 전환하려는 경향을 제거합니다.
-
제약 조건 하드코딩 (Hardcodes the Constraints): AI가 "저예산"이 무엇을 의미하는지 추측하게 두는 대신, 저렴한 재료(멀치, 자갈)는 명시적으로 화이트리스트 (Whitelist)에 추가하고, 비싼 재료(포장재, 벽)는 블랙리스트 (Blacklist)에 추가했습니다.
"코드로 공간 퍼즐을 푸는 것"에서 "통계적 행렬 (Statistical Matrix)에 엄격한 경계 파라미터 (Boundary Parameters)를 설정하는 것"으로 사고방식을 전환함으로써, 무작위성과 싸우는 것을 멈추고 영감을 활용하기 시작했습니다.
결과
영감을 주는 조명, 활기찬 잔디, 유지보수가 쉬운 관목, 그리고 실현 가능한 화단과 함께 제가 원했던 아늑함에 훨씬 더 가까워졌습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기

