DreamsComeTrue
꿈을 적으면 생성형 AI가 숏폼 영상으로 만들어 주는 서비스. 꿈을 기록해 두고, 다시 떠올리고 싶을 때 영상으로 꺼내 볼 수 있습니다.
꿈을 적으면 숏폼 영상으로 만들어 주는 서비스입니다. ChatGPT가 장면을 나누고, Midjourney가 그림을 그리고, LUMA AI가 영상으로 잇습니다.
세 서비스 모두 느리고(총 10~20분) 불안정해서, 그 불안정을 어떻게 흡수하느냐가 이 프로젝트의 핵심 과제였습니다. AI 서비스마다 큐를 나눈 RabbitMQ 기반 비동기 파이프라인으로 긴 처리 시간을 요청 스레드에서 떼어내고, 단계별 재시도와 데드레터 큐로 한 단계의 실패가 전체로 번지지 않게 했습니다.
백엔드에서는 비동기 파이프라인과 작업 상태 추적, Docker Compose 기반 실행 환경, JWT 인증과 Google, Kakao 소셜 로그인을 맡았습니다.
- ▸Spring Boot 기반 백엔드 서버 기본 설정 및 구조 설계
- ▸Docker를 활용한 컨테이너화 및 Docker Compose를 통한 개발 환경 구성
- ▸RabbitMQ 기반 메시지 큐 시스템 구축 및 비동기 작업 처리 구현: AI 작업을 큐에 담아 비동기 처리하여 응답 시간 단축, 병렬 처리를 통한 여러 AI 작업 동시 실행, 대량 배치 최적화를 통한 작업 처리량 향상
- ▸생성형 AI 파이프라인 연동: ChatGPT, Midjourney, LUMA AI API 통합
- ▸생성형 AI 서비스와 Spring 서버 간의 안정적인 통신 레이어 구현
- ▸JWT 기반 토큰 인증 시스템 구현
- ▸소셜 로그인 시스템 구현 (Google OAuth, Kakao OAuth)
- ▸AI 작업 상태 추적 및 재시도 메커니즘 구현
- ▸데드레터 큐를 활용한 실패 작업 처리 및 모니터링
- ▸RESTful API 설계 및 구현
ChatGPT, Midjourney, LUMA AI 등 여러 생성형 AI 서비스를 통합하여 사용자의 꿈 데이터를 자동으로 숏폼 영상으로 변환하는 파이프라인을 구축했습니다. 각 AI 서비스의 API를 안정적으로 호출하고, 응답을 처리하며, 실패 시 재시도 로직을 구현했습니다.
생성형 AI 서비스의 긴 처리 시간과 복잡한 호출 체인을 관리하기 위해 RabbitMQ를 활용한 메시지 큐 기반 아키텍처를 구축했습니다. 여러 AI 서비스 간의 작업을 큐에 담아 순차적으로 처리하고, 실패한 작업에 대한 재시도 메커니즘을 구현하여 시스템의 안정성을 높였습니다.
마이크로서비스 아키텍처의 각 컴포넌트를 Docker로 컨테이너화하여 개발 환경과 운영 환경의 일관성을 보장했습니다. Docker Compose를 활용하여 로컬 개발 환경을 구성하고, 각 서비스를 독립적으로 관리하고 스케일링할 수 있도록 했습니다.
solutionRabbitMQ를 활용한 메시지 큐 기반 비동기 처리 아키텍처를 구축하여 AI 서비스 호출을 큐에 담아 순차적으로 처리했습니다. 각 작업의 상태를 추적하고, 타임아웃과 재시도 로직을 구현하여 불안정한 응답을 효과적으로 관리했습니다. 또한 데드레터 큐를 활용하여 반복적으로 실패하는 작업을 별도로 관리하고 모니터링할 수 있도록 했습니다.
solution각 AI 서비스(ChatGPT → Midjourney → LUMA AI) 간의 작업 흐름을 RabbitMQ의 큐와 익스체인지를 통해 체계적으로 관리했습니다. 각 단계별로 별도의 큐를 구성하고, 이전 단계의 결과를 다음 단계의 입력으로 전달하는 이벤트 기반 아키텍처를 설계했습니다. 작업의 실패 시 이전 단계로 롤백하거나 재시도할 수 있는 메커니즘을 구현했습니다.
solutionSpring Security를 활용하여 JWT 기반 인증 시스템을 구현하고, Google OAuth와 Kakao OAuth를 통한 소셜 로그인을 지원했습니다. 토큰의 생성, 검증, 갱신 로직을 구현하고, 리프레시 토큰 메커니즘을 추가하여 사용자 경험을 개선했습니다. 각 소셜 로그인 제공자별로 통합된 인터페이스를 설계하여 확장성을 고려했습니다.
solutionRabbitMQ를 활용한 이벤트 기반 아키텍처로 각 마이크로서비스 간의 느슨한 결합을 구현했습니다. 작업의 상태를 중앙화된 데이터베이스에 저장하고, 각 서비스는 필요한 상태 정보를 조회하여 처리할 수 있도록 설계했습니다. 또한 Redis를 활용하여 작업 상태와 진행 상황을 캐싱하여 빠른 조회가 가능하도록 했습니다.
PWA 프론트엔드와 백엔드 마이크로서비스 아키텍처: 프론트엔드(PWA), 백엔드 코어 서비스, RabbitMQ 메시지 브로커, 생성형 AI 서비스(ChatGPT, Midjourney, LUMA AI)의 통합 구조
RabbitMQ 기반 메시지 큐를 활용한 비동기 처리 플로우: Node.js 이벤트 루프, 외부 서비스, 프로세스 함수, 체커 함수를 통한 작업 처리 및 피드백 메커니즘
프로젝트에 사용된 다양한 기술 스택: EFFECTIVE (Node.js, Spring Boot, Redis), PRODUCTIVE (Next.js, JavaScript, Express), STABLE (Nginx, TypeScript, Java) 그룹으로 분류된 기술들
ChatGPT, Midjourney, LUMA AI를 통합하여 사용자의 꿈 데이터를 자동으로 숏폼 영상으로 변환하는 완전 자동화된 파이프라인을 구축했습니다.
RabbitMQ를 활용한 메시지 큐 기반 아키텍처로 생성형 AI의 긴 처리 시간과 불안정한 응답을 효율적으로 관리하며, 실패한 작업에 대한 재시도 메커니즘을 통해 높은 작업 성공률을 달성했습니다.
Docker를 활용하여 각 서비스를 컨테이너화하고, Docker Compose를 통해 개발 환경을 구성하여 개발부터 배포까지 일관된 환경을 제공했습니다.
RabbitMQ를 활용한 메시지 큐 기반 아키텍처로 생성형 AI의 긴 처리 시간과 불안정한 응답을 효과적으로 관리할 수 있었습니다. 실패한 작업에 대한 재시도 메커니즘을 구현하여 시스템 안정성을 크게 향상시켰습니다.
Docker 컨테이너화로 개발과 운영 환경의 일관성을 유지했고, Spring Boot 마이크로서비스 아키텍처로 각 컴포넌트의 책임을 명확히 분리하여 유지보수성을 높였습니다.
생성형 AI 서비스의 비용 관리와 최적화에 대한 전략이 부족했습니다. API 호출 비용이 높은 서비스들을 사용하면서 불필요한 재시도나 중복 호출을 최소화하는 전략을 세밀하게 설계하지 못했습니다.
영상 생성 시간이 오래 걸리는 문제에 대한 실시간 피드백이나 진행 상황 표시 기능이 없어 사용자 경험이 좋지 않았습니다.
비용과 대기 시간도 설계 변수입니다. 모델을 고르기 전에 서비스별 가격 구조를 비교하고, 불필요한 재시도와 중복 호출을 줄이는 전략을 함께 세웠어야 했습니다.
대기 시간 자체를 경험의 일부로 바꿀 방법도 처음부터 함께 설계해야 했습니다.


