DreamsComeTrue
사용자의 꿈 데이터를 생성형 AI를 통해 숏폼 영상으로 시각화하는 서비스. 꿈을 재미있게 기록하고, 기억하고 싶을 때 기억할 수 있으며, 꿈을 재현할 수 있는 창의적인 플랫폼입니다.
프로젝트 개요
사용자의 꿈을 생성형 AI를 활용하여 숏폼 영상으로 변환하는 창의적인 서비스입니다. 단순한 꿈 기록을 넘어서, 사용자가 꿈을 재미있게 경험하고, 기억하고 싶을 때 언제든지 되돌아볼 수 있으며, 꿈의 분위기와 감성을 시각적으로 재현할 수 있는 독특한 경험을 제공합니다.
이 프로젝트에서는 생성형 AI 파이프라인 구축을 핵심 목표로 삼았습니다. ChatGPT를 활용한 꿈 데이터 분석 및 씬 분리, Midjourney를 통한 이미지 생성, LUMA AI를 활용한 영상 생성 등 다양한 생성형 AI 서비스를 통합하여 완성도 높은 숏폼 영상을 자동으로 제작합니다. RabbitMQ를 통한 메시지 큐 기반 비동기 처리 아키텍처를 구축하여 생성형 AI 서비스의 긴 처리 시간과 불안정한 응답을 효율적으로 관리하고, 여러 AI 서비스 간의 복잡한 호출 체인을 안정적으로 처리합니다.
백엔드 개발자로서 Spring Boot 기반 마이크로서비스 아키텍처 설계, Docker를 활용한 컨테이너화 및 오케스트레이션, 생성형 AI 서비스와 Spring 서버 간의 안정적인 연동 시스템 구축, JWT 기반 인증 및 소셜 로그인(Google, Kakao) 시스템 구현 등을 담당했습니다. 특히 RabbitMQ를 통한 이벤트 기반 아키텍처로 생성형 AI의 비동기적 특성을 효율적으로 처리하고, 실패한 작업에 대한 재시도 메커니즘과 상태 추적 시스템을 구현하여 신뢰성 있는 서비스를 구축했습니다.
나의 역할
Spring Boot 기반 백엔드 서버 기본 설정 및 구조 설계
Docker를 활용한 컨테이너화 및 Docker Compose를 통한 개발 환경 구성
RabbitMQ 기반 메시지 큐 시스템 구축 및 비동기 작업 처리 구현
생성형 AI 파이프라인 연동: ChatGPT, Midjourney, LUMA AI API 통합
생성형 AI 서비스와 Spring 서버 간의 안정적인 통신 레이어 구현
JWT 기반 토큰 인증 시스템 구현
소셜 로그인 시스템 구현 (Google OAuth, Kakao OAuth)
AI 작업 상태 추적 및 재시도 메커니즘 구현
데드레터 큐를 활용한 실패 작업 처리 및 모니터링
RESTful API 설계 및 구현
기술적 도전과제
생성형 AI 서비스의 긴 처리 시간과 불안정한 응답
RabbitMQ를 활용한 메시지 큐 기반 비동기 처리 아키텍처를 구축하여 AI 서비스 호출을 큐에 담아 순차적으로 처리했습니다. 각 작업의 상태를 추적하고, 타임아웃과 재시도 로직을 구현하여 불안정한 응답을 효과적으로 관리했습니다. 또한 데드레터 큐를 활용하여 반복적으로 실패하는 작업을 별도로 관리하고 모니터링할 수 있도록 했습니다.
여러 생성형 AI 서비스 간의 복잡한 호출 체인 관리
각 AI 서비스(ChatGPT → Midjourney → LUMA AI) 간의 작업 흐름을 RabbitMQ의 큐와 익스체인지를 통해 체계적으로 관리했습니다. 각 단계별로 별도의 큐를 구성하고, 이전 단계의 결과를 다음 단계의 입력으로 전달하는 이벤트 기반 아키텍처를 설계했습니다. 작업의 실패 시 이전 단계로 롤백하거나 재시도할 수 있는 메커니즘을 구현했습니다.
JWT 토큰 기반 인증 및 소셜 로그인 구현
Spring Security를 활용하여 JWT 기반 인증 시스템을 구현하고, Google OAuth와 Kakao OAuth를 통한 소셜 로그인을 지원했습니다. 토큰의 생성, 검증, 갱신 로직을 구현하고, 리프레시 토큰 메커니즘을 추가하여 사용자 경험을 개선했습니다. 각 소셜 로그인 제공자별로 통합된 인터페이스를 설계하여 확장성을 고려했습니다.
마이크로서비스 환경에서의 서비스 간 통신 및 상태 관리
RabbitMQ를 활용한 이벤트 기반 아키텍처로 각 마이크로서비스 간의 느슨한 결합을 구현했습니다. 작업의 상태를 중앙화된 데이터베이스에 저장하고, 각 서비스는 필요한 상태 정보를 조회하여 처리할 수 있도록 설계했습니다. 또한 Redis를 활용하여 작업 상태와 진행 상황을 캐싱하여 빠른 조회가 가능하도록 했습니다.
프로젝트 성과
ChatGPT, Midjourney, LUMA AI를 통합하여 사용자의 꿈 데이터를 자동으로 숏폼 영상으로 변환하는 완전 자동화된 파이프라인을 구축했습니다.
RabbitMQ를 활용한 메시지 큐 기반 아키텍처로 생성형 AI의 긴 처리 시간과 불안정한 응답을 효율적으로 관리하며, 실패한 작업에 대한 재시도 메커니즘을 통해 높은 작업 성공률을 달성했습니다.
Docker를 활용하여 각 서비스를 컨테이너화하고, Docker Compose를 통해 개발 환경을 구성하여 개발부터 배포까지 일관된 환경을 제공했습니다.
기술 선택 이유
Spring Boot
엔터프라이즈급 애플리케이션 개발을 위한 검증된 프레임워크로, RESTful API 개발과 마이크로서비스 아키텍처 구현에 적합합니다. Spring Security를 통한 인증/인가 시스템과 Spring Data JPA를 통한 데이터 영속성 관리를 효율적으로 수행할 수 있습니다.
RabbitMQ
생성형 AI 서비스들의 긴 처리 시간과 복잡한 호출 체인을 관리하기 위해 메시지 큐 기반 비동기 처리 아키텍처를 구축했습니다. RabbitMQ를 통해 여러 AI 서비스(ChatGPT, Midjourney, LUMA AI) 간의 작업을 큐에 담아 순차적으로 처리하고, 실패한 작업에 대한 재시도 메커니즘과 데드레터 큐를 활용한 에러 처리를 구현했습니다. 이를 통해 생성형 AI의 불안정한 응답 시간과 오류를 효과적으로 관리하고, 시스템의 안정성과 신뢰성을 높였습니다.
Docker
마이크로서비스 아키텍처의 각 컴포넌트를 컨테이너화하여 개발 환경과 운영 환경의 일관성을 보장하고, 독립적인 스케일링과 배포가 가능하도록 했습니다. Docker Compose를 활용하여 로컬 개발 환경을 구성하고, 각 서비스(Spring Boot 서버, RabbitMQ, MySQL, Redis)를 컨테이너로 실행하여 의존성 관리와 배포 프로세스를 단순화했습니다.
생성형 AI 파이프라인 (ChatGPT, Midjourney, LUMA AI)
ChatGPT API를 활용하여 사용자가 입력한 꿈 데이터를 분석하고 씬으로 분리하며, 적절한 배경음악을 선택하는 역할을 수행합니다. Midjourney를 통해 꿈의 분위기와 내용을 시각화한 이미지를 생성하고, LUMA AI를 통해 최종적으로 숏폼 영상을 생성합니다. 각 AI 서비스의 API를 안정적으로 호출하고, 응답을 처리하며, 실패 시 재시도 로직을 구현하여 완성도 높은 결과물을 생성합니다.
KPT 회고
Keep
RabbitMQ를 활용한 메시지 큐 기반 아키텍처로 생성형 AI의 긴 처리 시간과 불안정한 응답을 효과적으로 관리할 수 있었습니다. 실패한 작업에 대한 재시도 메커니즘을 구현하여 시스템 안정성을 크게 향상시켰습니다.
Docker 컨테이너화로 개발과 운영 환경의 일관성을 유지했고, Spring Boot 마이크로서비스 아키텍처로 각 컴포넌트의 책임을 명확히 분리하여 유지보수성을 높였습니다.
Problem
생성형 AI 서비스의 비용 관리와 최적화에 대한 전략이 부족했습니다. API 호출 비용이 높은 서비스들을 사용하면서 불필요한 재시도나 중복 호출을 최소화하는 전략을 세밀하게 설계하지 못했습니다.
영상 생성 시간이 오래 걸리는 문제에 대한 실시간 피드백이나 진행 상황 표시 기능이 없어 사용자 경험이 좋지 않았습니다.
Try
생성형 AI 서비스 도입 전에 다양한 모델과 서비스 제공업체의 가격 구조를 비교 분석하고, 품질 대비 비용 효율이 가장 높은 조합을 찾는 리서치를 먼저 수행하겠습니다.
사용자가 영상을 생성하는 동안 대기 시간을 활용할 수 있도록, 꿈 해석이나 감정 분석 같은 추가 기능을 제공하거나, 다른 사용자들이 생성한 영상을 탐색할 수 있는 기능을 구현하여 대기 시간을 경험의 일부로 전환하는 방법을 시도해보고 싶습니다.
생성형 AI의 응답 품질을 체계적으로 개선하기 위해, 프롬프트 버전 관리 시스템을 도입하고 각 프롬프트별 결과물의 품질을 평가하는 체계를 만들어 지속적으로 최적화하는 프로세스를 구축하겠습니다.