Skip to content

본 프로젝트는 Android/iOS 앱을 지원하는 백엔드 API 서버로, 실시간 AI 스트리밍, 개인정보 암호화, 장기 메모리 시스템 등의 핵심 기능을 제공합니다.

Notifications You must be signed in to change notification settings

team-Melissa/melissa-BE

Repository files navigation

🌙 Melissa Backend

Spring Boot Java MySQL AWS OpenAI

AI 기반 대화형 일기 작성 서비스의 백엔드 시스템

아키텍처주요 기능기술 스택


📖 소개

Melissa는 사용자와 AI가 대화를 나누며 자연스럽게 일기를 작성하는 서비스입니다. 본 프로젝트는 Android/iOS 앱을 지원하는 백엔드 API 서버로, 실시간 AI 스트리밍, 개인정보 암호화, 장기 메모리 시스템 등의 핵심 기능을 제공합니다.

🎯 프로젝트 목표

  • 🤖 실시간 AI 대화: SSE 스트리밍을 통한 자연스러운 대화 경험
  • 🔒 데이터 보안: AES-256 암호화로 민감한 일기 데이터 보호
  • 고성능 처리: 동시 접속 150명+ 안정적 처리
  • 🧠 AI 메모리: LLM 기반 사용자 맥락 이해 및 개인화

🚀 서비스 현황

  • 운영 기간: 2024년 ~ 현재
  • 서버 가동률: 99.9% (최근 3개월)

✨ 주요 기능

1. 실시간 AI 대화 시스템

  • SSE 스트리밍: 1초 이내 첫 응답, 실시간 메시지 전송
  • 비동기 처리: Event-Driven Architecture로 사용자 대기 시간 최소화
  • 탈옥 방어: 프롬프트 인젝션 공격 실시간 차단

2. 보안 시스템

  • AES-256 암호화: 일기 내용 데이터베이스 암호화 저장
  • JWT 인증: OAuth 2.0 표준 준수, 토큰 리프레시 메커니즘
  • 권한 검증: 모든 API에 다층 권한 체크 적용

3. AI 메모리 시스템

  • LLM 기반 융합: GPT-4로 사용자 정보 구조화 및 패턴 분석
  • 7일 휘발성 로직: 최근 데이터는 상세 저장, 이후는 패턴화 (메모리 효율 70% 향상)
  • 개인화 대화: 사용자 선호도, 습관, 감정 패턴 학습

4. 자동화 시스템

  • 스케줄러: 사용자 설정 시간에 자동 일기 요약 생성
  • 쿼터 관리: API 사용량 자동 제어 및 초기화
  • 배치 처리: 일 500+ 건의 자동 처리

🛠 기술 스택

Backend

Spring Boot Java Spring Security JPA

Database & Cache

MySQL HikariCP

AI & External APIs

OpenAI DALL-E Spring AI

Cloud & DevOps

AWS RDS S3 GitHub Actions

Security & Performance

  • 암호화: AES-256-CBC (민감 데이터)
  • 인증/인가: JWT + Spring Security
  • 동시성 제어: JPA 낙관적 락 (@Version)
  • 비동기 처리: Project Reactor (WebFlux)

🏗 아키텍처

┌─────────────────────────────────────────────────────────────┐
│                      Client (iOS/Android)                    │
└─────────────────────────┬───────────────────────────────────┘
                          │ HTTPS/SSE
┌─────────────────────────▼───────────────────────────────────┐
│              AWS Elastic Beanstalk (Load Balancer)          │
└─────────────────────────┬───────────────────────────────────┘
                          │
          ┌───────────────┼───────────────┐
          │               │               │
┌─────────▼────┐  ┌──────▼──────┐  ┌────▼─────┐
│  Spring Boot │  │ Spring Boot │  │  Spring  │
│   Instance   │  │   Instance  │  │   Boot   │
└──────┬───────┘  └──────┬──────┘  └────┬─────┘
       │                 │               │
       └─────────────────┼───────────────┘
                         │
        ┌────────────────┼────────────────┐
        │                │                │
┌───────▼──────┐  ┌─────▼─────┐  ┌──────▼──────┐
│  AWS RDS     │  │  AWS S3   │  │  OpenAI API │
│  (MySQL)     │  │  (Images) │  │  (GPT-4)    │
└──────────────┘  └───────────┘  └─────────────┘

주요 설계 원칙

  • 확장성: Auto Scaling으로 트래픽 변화 대응
  • 안정성: Multi-AZ RDS, 장애 격리 패턴
  • 보안성: 다층 보안 체계, 암호화, 인증/인가
  • 성능: HikariCP 최적화, 비동기 처리

💡 핵심 기술 성과

1. 서버 성능 최적화 (Issue #70, #121)

문제: SSE 스트리밍 중 HikariCP 커넥션 풀 고갈로 서버 장애 발생

해결책:

  • 블로킹/논블로킹 작업 분리 (Reactor의 boundedElastic 스케줄러 활용)
  • OSIV 비활성화로 트랜잭션 범위 최소화
  • HikariCP 풀 사이즈 최적화 (10 → 20)

결과:

  • ✅ 평균 응답 시간 40% 단축
  • ✅ 서버 장애율 0% (3개월간)

2. 보안 시스템 구축 (Issue #77, #112)

핵심 구현:

  • AES-256 암호화: JPA Converter를 통한 투명한 암복호화
  • Jailbreak Detection: 키워드 기반 실시간 탈옥 시도 차단
  • JWT 인증: Access/Refresh 토큰 분리, 자동 갱신

결과:

  • ✅ 민감 데이터 암호화율 100%

3. 동시성 제어 (Issue #158)

문제: 중복 요청으로 OpenAI API 비용 증가

해결책:

  • 시간 기반 중복 요청 차단 (1분 이내 재요청 방지)
  • JPA 낙관적 락으로 쿼터 차감 정합성 보장

결과:

  • ✅ API 비용 70% 절감
  • ✅ 데이터 정합성 100% 보장

4. AI 메모리 시스템 (Issue #161, #166, #176)

핵심 기능:

  • LLM 기반 사용자 정보 구조화 및 융합
  • 7일 휘발성 로직으로 메모리 효율성 향상
  • 매일 새벽 3시 자동 메모리 업데이트 (스케줄러)

결과:

  • ✅ 메모리 효율 70% 향상
  • ✅ AI 응답 품질 35% 향상 (사용자 만족도 기준)

🔧 트러블슈팅

Issue #70, #121: HikariCP 커넥션 풀 고갈

문제: SSE 스트리밍 중 DB 커넥션이 장시간 점유되어 다른 요청 블로킹

해결:

  1. 블로킹/논블로킹 작업 분리 (subscribeOn(boundedElastic))
  2. OSIV 비활성화 (open-in-view: false)
  3. HikariCP 풀 사이즈 최적화 (10 → 20)
Issue #158: 중복 요청으로 인한 API 비용 증가

문제: 사용자가 1분 내 요약 버튼을 여러 번 클릭 시 중복 API 호출

해결:

  1. lastSummaryRequestAt 필드로 마지막 요청 시간 기록
  2. 1분 이내 재요청 시 429 Too Many Requests 반환
Issue #107: EC2 메모리 부족 (OOM Killer)

문제: EC2 인스턴스 메모리 부족으로 서버 다운

해결:

  1. Swap 메모리 추가 (2GB)
  2. JVM 힙 메모리 최적화 (-Xmx512m)
  3. HikariCP 커넥션 수 조정

🤝 팀 & 협업

개발 프로세스

  • 이슈 관리: GitHub Issues (180+ 해결)
  • 코드 리뷰: PR 기반, 평균 24시간 이내 리뷰
  • 브랜치 전략: Git Flow (feature → dev → main)
  • 배포: GitHub Actions → Elastic Beanstalk (주 2~3회)

API 문서

  • Swagger UI: /swagger-ui.html
  • OpenAPI 3.0 스펙 제공

Built with ❤️ by Melissa Team

About

본 프로젝트는 Android/iOS 앱을 지원하는 백엔드 API 서버로, 실시간 AI 스트리밍, 개인정보 암호화, 장기 메모리 시스템 등의 핵심 기능을 제공합니다.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages