- 프로젝트 개요
- 문제 정의 & 가치 제안
- 핵심 기능
- 아키텍처 개요
- 기술 스택
- 프로젝트 구조
- 보안 · 프라이버시
- 관측성 · 안정성
- 차별점 & 확장성
- 커밋 컨벤션
- 팀-백엔드
- 문의
- 라이선스
Conever는 사용자의 지역/테마 선호를 바탕으로 AI가 여행지를 추천하고, 여행 중 촬영한 사진을 인생네컷 형태로 재구성하며, 특정 주기에 리마인드 알림으로 추억을 다시 꺼내보게 하는 서비스입니다.
본 저장소는 모바일 클라이언트를 위한 API Gateway 백엔드로, 인증/인가, 데이터 집계, 비동기 오케스트레이션을 담당합니다.
- 문제: 기존 여행 서비스는 예약·길안내 중심으로, 여정의 감정과 스토리를 기록하고 주기적으로 리마인드하는 경험이 부족합니다.
- 가치: Conever는 (1) 개인화 추천, (2) 기록의 구조화(인생네컷), (3) 시간이 흐른 뒤의 재경험(리마인드) 을 결합하여 여행의 전체 수명 주기를 지원합니다.
- 17개 시·도, 7개 카테고리 기반 개인화 추천
- 한국관광공사 TourAPI + 생성형 AI(Gemini 2.5 Flash) 후처리 파이프라인
- 실제 이동/방문 데이터 기반 연관 장소 제안
- 인기·연관도 Top-N(예: 최대 50개) 활용, 동선 설계 보조
- 촬영 사진 업로드/보관
- 4장 자동 레이아웃 인생네컷 생성
- (선택) 감정/스토리 태깅
- 3개월/6개월/1년/2년/5년 주기 알림
- 과거 여행 기록/이미지 재노출
- 관광지별 포즈 추천
- 동반자 초대, 사진/인생네컷 공동 열람
- API Gateway (Django/DRF): 인증/인가, 요청 검증, 응답 집계
- 비동기 처리 (Celery + Redis): 이미지 처리, 알림 발송, 데이터 동기화
- 데이터 레이어 (MySQL): 도메인 데이터 영속화
- 파일 스토리지 (AWS S3): 사진/인생네컷 저장
- 실시간/푸시 (Channels/WebSocket & FCM 연계 가능): (선택) 실시간 상태/알림
- 모니터링 (Promtail → Loki → Grafana): 로그/지표 관제
간단한 흐름(요약):
Mobile App → (Auth) → API Gateway ─┬─ MySQL
├─ Redis/Celery (비동기)
├─ S3 (이미지/인생네컷)
└─ 외부 API(TourAPI/Geocoder/Gemini)
- Backend: Django 5.x, Django REST Framework, Django Channels
- DB/Cache: MySQL 8.x, Redis 7.2.x
- Queue/Schedule: Celery 5.x, Celery Beat
- Infra: Docker, Docker Compose, Nginx, AWS S3
- Monitoring: Grafana, Loki, Promtail
- External APIs: 한국관광공사 TourAPI, Geocoder API 2.0, Google Gemini
실제 버전은
requirements.txt를 기준으로 관리됩니다.
alphaBE/
├── authenticate/ # 인증/인가
├── config/ # Django 설정
├── middleware/ # 커스텀 미들웨어
├── services/ # 서비스 레이어(외부 API, 도메인 로직)
├── tour/ # 여행 도메인
├── usr/ # 사용자 도메인
├── tests/ # 테스트
├── docker-compose.yml
├── Dockerfile
├── requirements.txt
├── manage.py
└── entrypoint.sh
- 비밀 관리: 모든 자격증명/키는 저장소에 포함하지 않습니다(.env, 키 파일 등은 커밋 금지).
- 데이터 최소 수집: 추천 및 리마인드 목적 범위 내 최소 정보만 수집·저장.
- 익명화/가명화: 로그·분석 단계에서 개인 식별 정보 최소화.
- 권한 분리: 읽기/쓰기 권한을 역할별로 분리(원칙: 최소 권한).
- 로그 파이프라인: Promtail → Loki 집계, Grafana 대시보드 시각화
- 비동기 오프로딩: 이미지 처리/AI 후처리/알림 발송은 Celery로 처리 지연 최소화
- 헬스체크/리트라이: 외부 API 실패 대비 타임아웃·재시도 정책 설계
- 확장성 고려: 캐시 계층(Redis)·수평 확장 전제, WAF/Rate Limit 구성 용이
- 여정 전·중·후 전체를 아우르는 설계: 추천 → 기록(인생네컷) → 리마인드의 폐루프(Closed Loop).
- 데이터 네트워크 효과: 동반자/공유 기능으로 재참여·재방문 유도.
- 모듈화된 AI 파이프라인: 모델 교체·프롬프트 튜닝·후처리 모듈을 분리하여 실험 비용 절감.
- 운영 친화성: 로그/지표 표준화로 A/B 실험·성능 튜닝·오류 분석이 용이.
Conventional Commits 권장:
feat:기능 추가fix:버그 수정refactor:리팩터링(기능 변화 없음)chore:빌드/도구/패키지 갱신docs:문서 수정test:테스트 추가/개선
기존
MODIFY라벨은feat:또는refactor:등 표준 라벨로 대체를 권장합니다.
- 임태근 (@YimTaeKeun) — 총괄, 백엔드, 기획
- 조시연 (@jimmy914) — 백엔드, 기획
프로젝트 문의: [email protected]
- 라이선스:
LICENSE파일 참조