Melissa는 사용자와 AI가 대화를 나누며 자연스럽게 일기를 작성하는 서비스입니다. 본 프로젝트는 Android/iOS 앱을 지원하는 백엔드 API 서버로, 실시간 AI 스트리밍, 개인정보 암호화, 장기 메모리 시스템 등의 핵심 기능을 제공합니다.
- 🤖 실시간 AI 대화: SSE 스트리밍을 통한 자연스러운 대화 경험
- 🔒 데이터 보안: AES-256 암호화로 민감한 일기 데이터 보호
- ⚡ 고성능 처리: 동시 접속 150명+ 안정적 처리
- 🧠 AI 메모리: LLM 기반 사용자 맥락 이해 및 개인화
- 운영 기간: 2024년 ~ 현재
- 서버 가동률: 99.9% (최근 3개월)
- SSE 스트리밍: 1초 이내 첫 응답, 실시간 메시지 전송
- 비동기 처리: Event-Driven Architecture로 사용자 대기 시간 최소화
- 탈옥 방어: 프롬프트 인젝션 공격 실시간 차단
- AES-256 암호화: 일기 내용 데이터베이스 암호화 저장
- JWT 인증: OAuth 2.0 표준 준수, 토큰 리프레시 메커니즘
- 권한 검증: 모든 API에 다층 권한 체크 적용
- LLM 기반 융합: GPT-4로 사용자 정보 구조화 및 패턴 분석
- 7일 휘발성 로직: 최근 데이터는 상세 저장, 이후는 패턴화 (메모리 효율 70% 향상)
- 개인화 대화: 사용자 선호도, 습관, 감정 패턴 학습
- 스케줄러: 사용자 설정 시간에 자동 일기 요약 생성
- 쿼터 관리: API 사용량 자동 제어 및 초기화
- 배치 처리: 일 500+ 건의 자동 처리
- 암호화: 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 최적화, 비동기 처리
문제: SSE 스트리밍 중 HikariCP 커넥션 풀 고갈로 서버 장애 발생
해결책:
- 블로킹/논블로킹 작업 분리 (Reactor의
boundedElastic스케줄러 활용) - OSIV 비활성화로 트랜잭션 범위 최소화
- HikariCP 풀 사이즈 최적화 (10 → 20)
결과:
- ✅ 평균 응답 시간 40% 단축
- ✅ 서버 장애율 0% (3개월간)
핵심 구현:
- AES-256 암호화: JPA Converter를 통한 투명한 암복호화
- Jailbreak Detection: 키워드 기반 실시간 탈옥 시도 차단
- JWT 인증: Access/Refresh 토큰 분리, 자동 갱신
결과:
- ✅ 민감 데이터 암호화율 100%
문제: 중복 요청으로 OpenAI API 비용 증가
해결책:
- 시간 기반 중복 요청 차단 (1분 이내 재요청 방지)
- JPA 낙관적 락으로 쿼터 차감 정합성 보장
결과:
- ✅ API 비용 70% 절감
- ✅ 데이터 정합성 100% 보장
핵심 기능:
- LLM 기반 사용자 정보 구조화 및 융합
- 7일 휘발성 로직으로 메모리 효율성 향상
- 매일 새벽 3시 자동 메모리 업데이트 (스케줄러)
결과:
- ✅ 메모리 효율 70% 향상
- ✅ AI 응답 품질 35% 향상 (사용자 만족도 기준)
Issue #70, #121: HikariCP 커넥션 풀 고갈
문제: SSE 스트리밍 중 DB 커넥션이 장시간 점유되어 다른 요청 블로킹
해결:
- 블로킹/논블로킹 작업 분리 (
subscribeOn(boundedElastic)) - OSIV 비활성화 (
open-in-view: false) - HikariCP 풀 사이즈 최적화 (10 → 20)
Issue #158: 중복 요청으로 인한 API 비용 증가
문제: 사용자가 1분 내 요약 버튼을 여러 번 클릭 시 중복 API 호출
해결:
lastSummaryRequestAt필드로 마지막 요청 시간 기록- 1분 이내 재요청 시
429 Too Many Requests반환
Issue #107: EC2 메모리 부족 (OOM Killer)
문제: EC2 인스턴스 메모리 부족으로 서버 다운
해결:
- Swap 메모리 추가 (2GB)
- JVM 힙 메모리 최적화 (
-Xmx512m) - HikariCP 커넥션 수 조정
- 이슈 관리: GitHub Issues (180+ 해결)
- 코드 리뷰: PR 기반, 평균 24시간 이내 리뷰
- 브랜치 전략: Git Flow (feature → dev → main)
- 배포: GitHub Actions → Elastic Beanstalk (주 2~3회)
- Swagger UI:
/swagger-ui.html - OpenAPI 3.0 스펙 제공
Built with ❤️ by Melissa Team