Skip to content

semInDev/gathertree-demo-backend

Repository files navigation

🎄 GatherTree Backend

  • 기간 : 2025.12.19 ~ 2025.12.26

친구들과 함께 트리를 꾸미고 AI가 트리를 평가하는 크리스마스 이벤트 웹 서비스

짧은 기간 동안 운영되는 이벤트형 서비스 특성을 고려하여 운영 복잡도와 인프라 비용을 최소화하는 서버 아키텍처를 설계했습니다.


🚀 핵심 기여 (Key Contributions)

  • UUID 기반 로그인 없는 권한 모델 설계
  • Redis TTL 기반 상태 관리 구조 설계
  • S3 Presigned URL 기반 서버 부하 없는 이미지 업로드 구조
  • OpenAI Vision API 기반 AI 트리 평가 시스템 구현

🧱 Tech Stack

Backend

  • Java
  • Spring Boot
  • Spring Web (REST API)

State Management

  • Redis (TTL 기반 트리 상태 관리)

Storage

  • AWS S3 (트리 이미지 / 장식 이미지 저장)

AI Integration

  • OpenAI Vision API

    • 트리 평가
    • AI 제목 생성

Infra

  • AWS EC2 (API 서버)
  • AWS S3 + CloudFront (Frontend 배포 및 CDN)
  • Route53 (DNS)
  • ACM (TLS 인증서)
  • ALB (Backend HTTPS 처리)

DevOps / Tooling

  • Gradle
  • Swagger (Springdoc OpenAPI)

🧠 시스템 설계 경험 (System Design)

인증 아키텍처 설계

  • UUID 기반 로그인 없는 권한 모델
  • URL 공유 기반 협업 구조

Event-driven 구조

  • Webhook 기반 사용자 생명주기 처리

상태 관리 구조

  • Redis TTL 기반 단기 서비스 상태 관리

서버 부하 최소화 구조

  • S3 Presigned URL 기반 이미지 업로드

AI 비용 관리

  • 장식 개수 조건 기반 API 호출 제한
  • Redis 캐싱을 통한 중복 호출 방지

❗ Problem

  1. 크리스마스 이벤트용 서비스로 짧은 기간 동안 운영되는 웹 서비스였기 때문에 인프라 비용과 운영 복잡도를 최소화해야 했다.

  2. 사용자 인증 없이 URL 공유 기반으로 서비스가 진행되는 구조에서 간단하면서도 안전한 권한 모델이 필요했다.

  3. AI 평가 기능 도입 시 API 호출 비용과 서비스 안정성을 동시에 관리해야 했다.


💡 Solution

1️⃣ UUID 기반 권한 모델

  • 인증 시스템을 도입하지 않고
  • UUID 자체를 권한 키로 사용하는 구조를 설계
  • 로그인 없이도 트리 관리 가능

2️⃣ Redis + S3 역할 분리 아키텍처

  • 트리 상태 → Redis TTL 관리
  • 이미지 결과물 → S3 저장

DB 없이도 단기 이벤트 서비스 운영 가능


3️⃣ AI 호출 비용 제어

  • 장식 개수 조건 기반 평가 요청
  • Redis 캐싱을 통한 중복 호출 방지
  • JSON 응답 구조 강제

📈 Result

  • 로그인 없이 URL 공유 기반 협업 트리 서비스 구현
  • Redis TTL 상태 관리로 DB 없이 이벤트 서비스 운영
  • AI 호출 제한 및 캐싱으로 API 비용과 안정성 관리

🏗 시스템 아키텍처

flowchart LR

User --> Frontend

Frontend -->|API| Backend

Backend --> Redis
Backend --> S3

Frontend -->|Presigned URL| S3

Backend --> OpenAI

S3 --> CloudFront
CloudFront --> User
Loading

🔄 데이터 플로우

flowchart TD

User --> TreeDraw

TreeDraw --> UploadBaseImage
UploadBaseImage --> S3

S3 --> TreeMetadata
TreeMetadata --> Redis

User --> DecorationUpload
DecorationUpload --> S3

Redis --> TreeState
TreeState --> Frontend

Frontend --> AIRequest
AIRequest --> Backend
Backend --> OpenAI
Loading

🔁 서비스 시퀀스

sequenceDiagram

participant User
participant Frontend
participant Backend
participant Redis
participant S3
participant OpenAI

User->>Frontend: 트리 생성

Frontend->>Backend: POST /tree
Backend->>S3: base.png 저장
Backend->>Redis: tree metadata 저장

User->>Frontend: 장식 업로드
Frontend->>S3: presigned URL 업로드

Frontend->>Backend: AI 평가 요청
Backend->>OpenAI: Vision API 호출
OpenAI-->>Backend: 평가 결과 반환

Backend-->>Frontend: score / title / summary
Loading

⚡ 서버 부하 최소화 구조

flowchart LR

User --> Frontend

Frontend -->|API Request| Backend

Backend --> Redis[(Redis TTL State)]

Backend -->|Presigned URL| S3

Frontend -->|Upload Image via PUT| S3

S3 --> CloudFront

CloudFront --> User

Backend -->|AI Evaluation Request| OpenAI
Loading

🔑 Keywords

  • Authentication Architecture
  • Event-driven System
  • System Design
  • AI Service Integration
  • Backend Infrastructure

About

Spring Boot backend demo for GatherTree – a short-term Christmas event web app using Redis & S3 (no DB)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages