최근 생성형 AI 기술은 이미지 생성 분야에서 실질적인 제품과 서비스로 진입하고 있으며, 특히 Midjourney, DALL·E와 같은 모델 기반의 웹서비스는 개인 창작자와 기업 모두에게 직관적인 창작 인터페이스를 제공한다. 이러한 서비스를 자체적으로 구현하고자 할 경우, 핵심적으로 고려해야 할 것은 사용자의 생성 요청을 안정적으로 큐잉하고, GPU 리소스를 효율적으로 할당하며, 생성된 이미지를 실시간으로 사용자에게 공유하는 흐름이다.
여기서는 Stable Diffusion 3.5 Large 모델을 활용하여, 사용자의 텍스트 프롬프트 입력만으로 이미지를 생성하고, 이를 웹 브라우저를 통해 실시간으로 확인할 수 있는 경량형 서비스 구조를 설계하고 구현하는 방법을 설명한다. 프레임워크는 FastAPI를 선택하고, 비동기 이미지 생성을 위한 백엔드 큐와 프론트엔드 자동 갱신(Polling) 메커니즘을 결합하는 구조이다.
기본 동작 구조
전체 시스템은 크게 3개 계층으로 나눌 수 있다:
- Frontend (HTML + JavaScript)
- 사용자가 텍스트 프롬프트를 입력하고 “Generate” 버튼을 누르면 요청이 서버로 전송된다.
- 클라이언트 측에서는 일정 주기마다
/statusAPI를 통해 생성된 이미지 목록을 조회하고, 이를 갤러리 형태로 화면에 반영한다. - 새로고침 없이 이미지 목록이 자동으로 업데이트되므로 UX가 매우 직관적이다.
- FastAPI 서버
/generate엔드포인트는 사용자의 프롬프트를 수신하고, 고유한 파일명을 생성한 뒤 큐에 등록한다.- 백그라운드 작업을 통해 Stable Diffusion 모델이 실행되고 이미지가
/generated_images디렉토리에 저장된다. /status엔드포인트는 현재 큐 상태, 작업 중인 항목, 이미지 목록을 JSON으로 반환하여 클라이언트 측 동기화에 활용된다.
- Stable Diffusion 모델 로딩
diffusers라이브러리를 통해StableDiffusion3Pipeline을 불러오며,torch_dtype=torch.float16설정을 통해 A6000 GPU의 메모리 효율성을 극대화한다.- 최초 로딩은 다소 시간이 걸릴 수 있으나 이후 요청은 매우 빠르게 처리된다.
- 모델은
enable_attention_slicing()등을 통해 메모리 사용 최적화 상태로 실행된다.
구현 포인트 및 유의사항
- IP별 접속 제한: 서버는 IP당 최대 5개의 동시 요청만 허용하며, 이를 초과하면 요청을 차단한다. 간단한 DoS 방지 기능으로 활용 가능하다.
- 비동기 큐 처리: FastAPI의
BackgroundTasks기능을 활용해 요청을 큐에 넣고 바로 응답을 반환하며, 실제 생성은 별도 처리된다. 따라서 사용자에게는 빠른 피드백이 제공되고, 서버는 순차적 안정성을 유지할 수 있다. - Polling 갱신: 프론트엔드는 JavaScript에서 10초마다
/status를 호출하여 이미지 갤러리를 갱신한다. 이는 WebSocket보다 구현이 간단하며, 초기에 빠르게 구축하기 적합하다. - Static 파일 제공: 생성된 이미지는 FastAPI의
StaticFiles를 통해/generated_images/파일명형태로 서비스된다.
확장성 고려
- 향후 사용자가 증가하면 Celery + Redis 조합으로 큐 시스템을 분리하고, 생성 서버를 분산 구조로 확장할 수 있다.
- 생성 프롬프트와 생성 이미지를 DB에 함께 저장하여, 히스토리 기능이나 개인 갤러리 기능으로 확장할 수 있다.
- 웹 인터페이스에 프롬프트 예시 자동 완성, 생성 진행률 바 등 UX 요소를 덧붙여 더욱 완성도 높은 서비스로 진화시킬 수 있다.
이와 같은 구조는 초기 프로토타입 단계에서도 충분히 강력한 사용자 경험을 제공하며, GPU 리소스를 효율적으로 사용하는 동시에 최소한의 코드로 구축할 수 있는 것이 큰 장점이다. Stable Diffusion의 다양한 파이프라인과 하드웨어 가속 기능을 이해하고 적절히 조합한다면, 생성형 이미지 시스템의 내재화는 더 이상 복잡한 일이 아니다.