왜 두 서버를 나눠 쓰는가
이미지 생성과 카드 렌더링을 같은 서버에서 하려면 ComfyUI를 Linux VPS에 올려야 합니다. GPU 없는 VPS에서 ComfyUI를 돌리면 이미지 한 장에 수 분이 걸립니다. 이미 Windows 서버에 ComfyUI가 GPU와 함께 설치되어 있고 worker.ps1까지 세팅이 되어 있다면 그걸 그대로 쓰는 게 맞습니다. 새로 구성하는 것보다 기존 환경을 연결하는 것이 훨씬 빠릅니다.
역할 분리 원칙은 단순합니다. 차은별(Linux)이 기획하고 명령하고, Windows 서버가 이미지를 생성합니다. 결과는 다시 Linux로 돌아와 최종 카드뉴스에 합성됩니다. 차은별이 실무 총괄이고, Windows 서버 ComfyUI는 이미지 생성 전담 워커입니다.
전체 파이프라인 8단계
1단계 — 주제 입력
대표님이 차은별에게 주제, 톤, 스타일, 장수, 타깃을 전달합니다. 예를 들면 이런 식입니다. "주제: AI 에이전트 만들며 배운 6가지 / 톤: 인사이트형 / 스타일: premium / 장수: 8장 / 타깃: 직장인". 이 다섯 가지가 들어오면 차은별이 이어지는 단계를 자동으로 처리합니다.
2단계 — 카드 구조 생성
차은별이 커버 문구, 본문 카피, CTA를 작성하고 slides.json 초안을 만듭니다. 이 단계에서 이미지가 필요한 슬라이드를 함께 선별합니다. 8장 기준으로 2~3장만 이미지를 사용하는 것이 가장 안정적입니다.
이미지를 넣기 좋은 장이 따로 있습니다. 표지, 첫 본문 1~2장, 감정을 강조하는 슬라이드, quote나 분위기를 잡는 장이 여기에 해당합니다. 반대로 리스트형, 스텝형, 수치 강조형, CTA 슬라이드는 이미지 없이 가는 게 오히려 더 잘 읽힙니다. 모든 장에 이미지를 넣으면 텍스트 메시지가 묻힙니다.
3단계 — ComfyUI용 이미지 프롬프트 작성
선별한 슬라이드마다 이미지 생성 프롬프트를 따로 작성합니다. 카드뉴스용 프롬프트 규격은 고정해두는 것이 좋습니다. 매번 다른 스타일로 이미지가 나오면 카드뉴스 전체 톤이 무너집니다.
규격은 다음 네 가지를 기준으로 잡습니다. 분위기는 calm, editorial, premium, soft light로 고정합니다. 비율은 세로형, 카드뉴스 상단 배너 기준 구도로 맞춥니다. 텍스트가 없는 이미지여야 합니다. 카드뉴스에서 이미지 위에 텍스트를 올리기 때문에 이미지 자체에 글자가 들어가면 겹칩니다. 마지막으로 미니멀하고 고급스럽고 감정선이 있는 비주얼이어야 합니다.
예시 프롬프트는 이렇습니다.
"calm editorial illustration, peaceful mind, minimal composition, soft light, premium magazine style, vertical composition, clean background, no text"
이전에 이미 만들었던 카드뉴스를 보면 디자인 기준이 명확합니다. 흑백 선화 느낌, 단순한 캐릭터 일러스트, 배경 요소 최소화, 감정과 행동이 바로 읽히는 장면형 이미지입니다. 휴대폰 보는 장면, 칠판 앞 장면, 컴퓨터 앞 장면처럼 슬라이드의 핵심 메시지를 한 장면으로 상징화하는 방식입니다. 이 기준을 프롬프트 규칙으로 문서화해서 차은별이 매번 참조할 수 있게 만들면 이미지 스타일이 일관되게 유지됩니다.
4단계 — job.json 생성 및 Windows로 전송
Linux에서 job.json을 만들고 SCP로 Windows 서버 D:\016_CardNew\io\ 폴더에 전달합니다. job.json 안에는 job_id, topic, image_prompt, negative_prompt 네 항목이 들어갑니다.
5단계 — worker.ps1 실행
SSH로 Windows 서버에 접속해 worker.ps1을 실행합니다. worker가 ComfyUI API(http://127.0.0.1:8188/)를 호출하고, comfy_workflow.json에 정의된 워크플로우를 실행해 이미지를 생성합니다. 완료 후 result.json과 이미지를 D:\016_CardNew\output\ 에 저장합니다.
6단계 — 결과 이미지 회수
result.json을 먼저 가져와서 output_image 경로를 확인합니다. 그 경로를 기준으로 생성된 이미지를 SCP로 Linux 서버의 generated-images/ 폴더에 저장합니다.
이미지를 Linux로 가져오는 방식은 세 가지입니다. 가장 쉬운 건 SCP입니다. ComfyUI 결과 이미지를 HTTP URL로 받는 방법도 있고, 공유 네트워크 드라이브로 읽어오는 방법도 있습니다. 지금 구조에서는 SCP가 가장 단순하고 안정적입니다.
7단계 — slides.json에 이미지 연결
가져온 이미지 경로를 slides.json의 해당 슬라이드 image_url 필드에 삽입합니다. 슬라이드 타입은 이미지 포함 여부에 따라 cover-topimage 또는 content-topimage로 분리합니다.
이전 디자인 기준을 보면 레이아웃 구조가 명확합니다. 상단 55~60%는 이미지 영역, 하단 40~45%는 회색 텍스트 박스, 맨 아래에 계정명과 페이지 번호가 들어가는 푸터입니다. 이 구조를 템플릿으로 고정해두면 이미지가 들어올 때마다 자동으로 배치됩니다.
8단계 — 최종 렌더
이미지 포함 슬라이드와 텍스트 전용 슬라이드를 함께 렌더해서 최종 PNG를 출력합니다. 이미지를 넣기로 한 슬라이드는 topimage 템플릿으로, 텍스트만 있는 슬라이드는 기존 템플릿으로 각각 처리됩니다.
역할 분리 최종 정리
차은별(Linux VPS #1)이 담당하는 것은 주제 해석, 카피 작성, 이미지 필요 슬라이드 선별, 프롬프트 작성, job.json 생성 및 전송, worker 실행 명령, 결과 이미지 회수, slides.json 조합, 카드 렌더, Discord 업로드, 캡션 생성입니다. Windows 서버 ComfyUI는 이미지 생성 하나만 담당합니다.
이 구조가 완성되면 조직도에서 두 서버가 처음으로 실제 협업하는 사례가 됩니다. 카드뉴스 하나를 만들기 위해 두 서버의 에이전트가 역할을 나눠 움직이는 것입니다.
구현 순서 — 한 번에 다 연결하지 않는다
처음부터 전 단계를 한 번에 연결하려 하면 어디서 실패했는지 찾기가 어렵습니다. 단계별로 하나씩 붙이는 것이 훨씬 안전합니다.
1차는 텍스트 카드뉴스 생성과 캡션 자동화입니다. 이미 완료된 상태입니다.
2차는 SSH/SCP 연결만 먼저 확인합니다. job.json을 전송하고 worker를 실행해 result.json이 오는지까지만 테스트합니다.
3차는 가져온 이미지를 slides.json에 수동으로 넣어서 렌더가 되는지 확인합니다.
4차는 이미지 삽입 자동화와 상단 이미지형 템플릿을 추가합니다.
5차는 주제 입력 하나로 최종 PNG까지 나오는 완전 자동화를 완성합니다.
