자동으로 블로그 포스트를 발행하는 시스템을 구축하고 한동안은 정말 편하게 글을 썼다. 하지만 어느 날 자동 생성된 이미지를 보고 소스라치게 놀라고 말았다. 육아 정보를 다루는 KidStory 블로그에 올라간 아이 일러스트가 기괴한 모습으로 렌더링되어 있었기 때문이다.
팔다리가 엉뚱하게 꺾여 있거나 개수가 맞지 않았고, 심지어 아이 옷에는 정체불명의 외계어 같은 뭉개진 글자들이 지저분하게 박혀 있었다. 이미지 유입이 중요한 핀터레스트와 육아 니치 시장에서 이런 기괴한 인물 이미지는 브랜드 신뢰도에 치명적인 타격이었다. 결국 하던 일을 모두 멈추고 본격적인 트러블슈팅에 착수했다.
기괴함을 유발한 두 가지 핵심 원인 분석
문제를 해결하기 위해 먼저 왜 이런 참사가 발생했는지 면밀히 뜯어보았다. 첫 번째 원인은 이미지 생성 모델인 Pollinations flux에게 프롬프트를 넘겨줄 때 단순히 일러스트라고만 지시하고 구체적인 스타일을 못 박지 않았다는 점이었다. 스타일을 애매하게 지시하니 모델이 반사실적인 형태로 인물을 렌더링하면서 기괴한 해부학적 왜곡이 일어났다.
두 번째 원인은 글자 삽입을 방지하는 네거티브 프롬프트 성격의 제약 조건이 누락되었다는 점이었다. 글자를 넣지 말라는 명확한 명령이 없다 보니 flux 모델이 빈 공간에 임의로 영문 텍스트를 생성했고, 이것이 뭉개지면서 지저분한 오탈자처럼 표현되었다. 결국 프롬프트와 코드 양쪽에서 강력한 제어가 필요하다는 결론을 내렸다.
구글 앱스 스크립트 수정으로 구축한 이중 방어막
단순히 프롬프트 지침만 수정해서는 모델이 지시 사항을 무시할 확률이 높았다. 그래서 나는 자동화 스크립트 파일인 Code_KidStory.gs를 직접 열어 두 단계를 거치는 이중 방어 처방을 설계했다. 먼저 이미지 생성 프롬프트 자체를 flat vector, no-text, no-realistic-people 등 사물 중심으로 구체화했다.
특히 아이 일러스트가 필요한 경우에는 글의 맥락에 맞게 특정 월령이나 나이를 프롬프트에 직접 명시해 주었다. 이렇게 연령대를 정확하게 못 박아 주니 모델이 엉뚱하고 기괴하게 신체를 변형하는 현상이 눈에 띄게 줄어들었다.
여기에 더해 생성 함수 레벨인 generateAndUploadImage 내부에 STYLE_ENFORCE 접미사를 하드코딩으로 심어버렸다. 제미나이의 출력 프롬프트 내용과 무관하게, API로 전달되는 모든 이미지 생성 요청 끝에 'flat vector illustration, no text, no distorted limbs'라는 스타일 제약을 강제로 주입한 것이다.
니치별 스타일 전파와 최적화 전략
이러한 이중 방어 처방의 효과는 즉각적이었다. 수정 이후 발행된 포스트들의 이미지는 훨씬 깔끔하고 일관성 있는 flat 일러스트 형태로 일정하게 생성되었다. 나는 이 성공적인 이중 처방 방식을 또 다른 블로그 채널인 IssueLog에도 그대로 전파하여 시스템을 강화했다.
다만 IssueLog에 적용할 때는 해당 블로그의 니치에 맞춰 미세 조정 프로세스를 거쳤다. 아기 월령 표기 옵션을 제거하고 차분한 민트 그린 대신 중립적인 톤을 활용하도록 세팅했으며, 인물보다는 추상적인 사물이나 개념 중심의 오브젝트가 렌더링되도록 규칙을 조율했다.
기계나 테크 중심의 이미지를 주로 다루는 IT Story와 Lab 블로그의 경우는 인물 묘사 비율이 낮아 기괴한 오류가 발생할 확률이 적었기 때문에 일단 이번 코드 수정 대상에서 제외하고 보류해 두었다. 무분별하게 시스템 전체를 건드리기보다 실질적인 리스크가 있는 영역에 집중해 효율성을 높였다.
AI 이미지 실패 패턴을 극복하며 얻은 교훈
이번 삽질을 거치며 AI 이미지 트러블슈팅의 핵심은 텍스트 렌더링 오류와 해부학적 왜곡이라는 2대 실패 패턴을 선제적으로 제어하는 데 있음을 절실히 깨달았다. 프롬프트 지침만으로는 모델의 탈선을 막기 어렵기 때문에, 이미지 생성 함수 레벨에서 강제로 네거티브 요소와 스타일을 주입하는 이중 장치가 매우 유효했다.
무조건 화려하고 사실적인 이미지만을 고집하기보다 블로그의 성격에 맞춰 안전한 flat 일러스트 스타일을 고수하고 색상 팔레트를 커스텀하는 것이 트래픽 유지에도 안전하다. 한번 안정적으로 이중 방어 코드를 짜두니 이제는 더 이상 아침마다 기괴한 인물 이미지가 발행되었을까 봐 불안해하지 않아도 되어 무척 든든하다.