$cat projects/3/README.md

DreamsComeTrue

2024.10 - 2024.113FE 3BEBackend Developer삼성 청년 SW 아카데미 11기 자율 프로젝트

사용자의 꿈 데이터를 생성형 AI를 통해 숏폼 영상으로 시각화하는 서비스. 꿈을 재미있게 기록하고, 기억하고 싶을 때 기억할 수 있으며, 꿈을 재현할 수 있는 창의적인 플랫폼입니다.

Spring BootJavaDockerRabbitMQChatGPTLUMA AIMidjourneyMySQLRedis
▸ github
$cat overview.md

사용자의 꿈을 생성형 AI를 활용하여 숏폼 영상으로 변환하는 창의적인 서비스입니다. 단순한 꿈 기록을 넘어서, 사용자가 꿈을 재미있게 경험하고, 기억하고 싶을 때 언제든지 되돌아볼 수 있으며, 꿈의 분위기와 감성을 시각적으로 재현할 수 있는 독특한 경험을 제공합니다.

이 프로젝트에서는 생성형 AI 파이프라인 구축을 핵심 목표로 삼았습니다. ChatGPT를 활용한 꿈 데이터 분석 및 씬 분리, Midjourney를 통한 이미지 생성, LUMA AI를 활용한 영상 생성 등 다양한 생성형 AI 서비스를 통합하여 완성도 높은 숏폼 영상을 자동으로 제작합니다. RabbitMQ를 통한 메시지 큐 기반 비동기 처리 아키텍처를 구축하여 생성형 AI 서비스의 긴 처리 시간과 불안정한 응답을 효율적으로 관리하고, 여러 AI 서비스 간의 복잡한 호출 체인을 안정적으로 처리합니다.

백엔드 개발자로서 Spring Boot 기반 마이크로서비스 아키텍처 설계, Docker를 활용한 컨테이너화 및 오케스트레이션, 생성형 AI 서비스와 Spring 서버 간의 안정적인 연동 시스템 구축, JWT 기반 인증 및 소셜 로그인(Google, Kakao) 시스템 구현 등을 담당했습니다. 특히 RabbitMQ를 통한 이벤트 기반 아키텍처로 생성형 AI의 비동기적 특성을 효율적으로 처리하고, 실패한 작업에 대한 재시도 메커니즘과 상태 추적 시스템을 구현하여 신뢰성 있는 서비스를 구축했습니다.

$cat role.md
$cat highlights.md
생성형 AI 파이프라인 연동

ChatGPT, Midjourney, LUMA AI 등 여러 생성형 AI 서비스를 통합하여 사용자의 꿈 데이터를 자동으로 숏폼 영상으로 변환하는 파이프라인을 구축했습니다. 각 AI 서비스의 API를 안정적으로 호출하고, 응답을 처리하며, 실패 시 재시도 로직을 구현했습니다.

RabbitMQ 기반 비동기 처리

생성형 AI 서비스의 긴 처리 시간과 복잡한 호출 체인을 관리하기 위해 RabbitMQ를 활용한 메시지 큐 기반 아키텍처를 구축했습니다. 여러 AI 서비스 간의 작업을 큐에 담아 순차적으로 처리하고, 실패한 작업에 대한 재시도 메커니즘을 구현하여 시스템의 안정성을 높였습니다.

Docker 컨테이너화

마이크로서비스 아키텍처의 각 컴포넌트를 Docker로 컨테이너화하여 개발 환경과 운영 환경의 일관성을 보장했습니다. Docker Compose를 활용하여 로컬 개발 환경을 구성하고, 각 서비스를 독립적으로 관리하고 스케일링할 수 있도록 했습니다.

$cat challenges.md
problem생성형 AI 서비스의 긴 처리 시간과 불안정한 응답

solutionRabbitMQ를 활용한 메시지 큐 기반 비동기 처리 아키텍처를 구축하여 AI 서비스 호출을 큐에 담아 순차적으로 처리했습니다. 각 작업의 상태를 추적하고, 타임아웃과 재시도 로직을 구현하여 불안정한 응답을 효과적으로 관리했습니다. 또한 데드레터 큐를 활용하여 반복적으로 실패하는 작업을 별도로 관리하고 모니터링할 수 있도록 했습니다.

problem여러 생성형 AI 서비스 간의 복잡한 호출 체인 관리

solution각 AI 서비스(ChatGPT → Midjourney → LUMA AI) 간의 작업 흐름을 RabbitMQ의 큐와 익스체인지를 통해 체계적으로 관리했습니다. 각 단계별로 별도의 큐를 구성하고, 이전 단계의 결과를 다음 단계의 입력으로 전달하는 이벤트 기반 아키텍처를 설계했습니다. 작업의 실패 시 이전 단계로 롤백하거나 재시도할 수 있는 메커니즘을 구현했습니다.

problemJWT 토큰 기반 인증 및 소셜 로그인 구현

solutionSpring Security를 활용하여 JWT 기반 인증 시스템을 구현하고, Google OAuth와 Kakao OAuth를 통한 소셜 로그인을 지원했습니다. 토큰의 생성, 검증, 갱신 로직을 구현하고, 리프레시 토큰 메커니즘을 추가하여 사용자 경험을 개선했습니다. 각 소셜 로그인 제공자별로 통합된 인터페이스를 설계하여 확장성을 고려했습니다.

problem마이크로서비스 환경에서의 서비스 간 통신 및 상태 관리

solutionRabbitMQ를 활용한 이벤트 기반 아키텍처로 각 마이크로서비스 간의 느슨한 결합을 구현했습니다. 작업의 상태를 중앙화된 데이터베이스에 저장하고, 각 서비스는 필요한 상태 정보를 조회하여 처리할 수 있도록 설계했습니다. 또한 Redis를 활용하여 작업 상태와 진행 상황을 캐싱하여 빠른 조회가 가능하도록 했습니다.

$ls architecture/
시스템 아키텍처
시스템 아키텍처

PWA 프론트엔드와 백엔드 마이크로서비스 아키텍처: 프론트엔드(PWA), 백엔드 코어 서비스, RabbitMQ 메시지 브로커, 생성형 AI 서비스(ChatGPT, Midjourney, LUMA AI)의 통합 구조

비동기 처리 아키텍처 (CALL-CHAIN)
비동기 처리 아키텍처 (CALL-CHAIN)

RabbitMQ 기반 메시지 큐를 활용한 비동기 처리 플로우: Node.js 이벤트 루프, 외부 서비스, 프로세스 함수, 체커 함수를 통한 작업 처리 및 피드백 메커니즘

기술 스택 (VARIOUS STACK)
기술 스택 (VARIOUS STACK)

프로젝트에 사용된 다양한 기술 스택: EFFECTIVE (Node.js, Spring Boot, Redis), PRODUCTIVE (Next.js, JavaScript, Express), STABLE (Nginx, TypeScript, Java) 그룹으로 분류된 기술들

$cat results.md
생성형 AI 파이프라인 구축

ChatGPT, Midjourney, LUMA AI를 통합하여 사용자의 꿈 데이터를 자동으로 숏폼 영상으로 변환하는 완전 자동화된 파이프라인을 구축했습니다.

안정적인 비동기 처리

RabbitMQ를 활용한 메시지 큐 기반 아키텍처로 생성형 AI의 긴 처리 시간과 불안정한 응답을 효율적으로 관리하며, 실패한 작업에 대한 재시도 메커니즘을 통해 높은 작업 성공률을 달성했습니다.

컨테이너화된 마이크로서비스

Docker를 활용하여 각 서비스를 컨테이너화하고, Docker Compose를 통해 개발 환경을 구성하여 개발부터 배포까지 일관된 환경을 제공했습니다.

$cat retrospection.md
잘 됐던 것

RabbitMQ를 활용한 메시지 큐 기반 아키텍처로 생성형 AI의 긴 처리 시간과 불안정한 응답을 효과적으로 관리할 수 있었습니다. 실패한 작업에 대한 재시도 메커니즘을 구현하여 시스템 안정성을 크게 향상시켰습니다.

Docker 컨테이너화로 개발과 운영 환경의 일관성을 유지했고, Spring Boot 마이크로서비스 아키텍처로 각 컴포넌트의 책임을 명확히 분리하여 유지보수성을 높였습니다.

개선할 것

생성형 AI 서비스의 비용 관리와 최적화에 대한 전략이 부족했습니다. API 호출 비용이 높은 서비스들을 사용하면서 불필요한 재시도나 중복 호출을 최소화하는 전략을 세밀하게 설계하지 못했습니다.

영상 생성 시간이 오래 걸리는 문제에 대한 실시간 피드백이나 진행 상황 표시 기능이 없어 사용자 경험이 좋지 않았습니다.

배운 것

생성형 AI 서비스 도입 전에 다양한 모델과 서비스 제공업체의 가격 구조를 비교 분석하고, 품질 대비 비용 효율이 가장 높은 조합을 찾는 리서치를 먼저 수행하겠습니다.

사용자가 영상을 생성하는 동안 대기 시간을 활용할 수 있도록, 꿈 해석이나 감정 분석 같은 추가 기능을 제공하거나, 다른 사용자들이 생성한 영상을 탐색할 수 있는 기능을 구현하여 대기 시간을 경험의 일부로 전환하는 방법을 시도해보고 싶습니다.

생성형 AI의 응답 품질을 체계적으로 개선하기 위해, 프롬프트 버전 관리 시스템을 도입하고 각 프롬프트별 결과물의 품질을 평가하는 체계를 만들어 지속적으로 최적화하는 프로세스를 구축하겠습니다.