감정 기록 + AI 분석 웹앱 백엔드 (FastAPI / Python 3.14 호환)
기존 스파게티 구조의 백엔드를 **도메인 주도 설계(DDD)**와 레이어드 아키텍처를 적용하여 완전히 분리된 구조로 재구성한 독립 실행형 프로젝트입니다.
이 프로젝트를 다른 곳으로 이동하여 실행할 때, ModuleNotFoundError를 방지하기 위해 아래와 같은 폴더 배치를 권장합니다. (인프라 설정 파일들은 바깥에, 파이썬 코드는 moodping/ 안에 배치)
MoodPing_Project/
├── docker-compose.yml # DB 컨테이너 설정
├── schema.sql # DB 초기화 스크립트
├── requirements.txt # 파이썬 패키지 의존성
├── .env.example # 복사해서 .env 로 사용
└── moodping/ # 실제 파이썬 소스 코드 폴더
├── main.py
├── config/
├── static/
└── ... (도메인 폴더들)
cp .env.example .env
# .env 파일을 열어 API 키 입력 (카카오, OpenAI 등)docker compose up -d
# 3307 포트로 MySQL 서버 실행 및 schema.sql 자동 적용# 가상환경 생성 (파이썬 3.14 완벽 호환)
python -m venv venv
# Windows
venv\Scripts\activate
# Mac/Linux
source venv/bin/activate
# 의존성 설치 (버전 충돌을 막기 위해 항상 이 명령어를 사용하세요)
pip install -r requirements.txt**루트 폴더(MoodPing_Project/ 위치)**에서 다음 명령어를 실행합니다.
uvicorn moodping.main:app --reload --port 33333- 웹앱 접속:
http://localhost:33333 - API 문서:
http://localhost:33333/docs
.env 파일의 LLM_PROVIDER 값만 변경하면 여러 AI 모델을 자유롭게 스위칭할 수 있습니다. (비즈니스 서비스 코드 수정 불필요)
LLM_PROVIDER=openai # GPT-4.1-mini (기본값)
LLM_PROVIDER=gemini # Gemini 2.5 Flash
LLM_PROVIDER=claude # Claude Haiku 4.5각 비즈니스 기능별로 폴더(도메인)를 분리하고, 내부를 단방향 계층형(Controller -> Service -> Repository)으로 엄격하게 관리합니다.
moodping/
├── main.py # 앱 진입점 (FastAPI)
├── config/ # 공통 환경 및 DB 설정
├── static/ # 프론트엔드 정적 파일
├── llm/ # 통합 LLM 클라이언트 모듈 (Factory 패턴)
│
├── account/ # 도메인: 사용자 계정
├── authentication/ # 도메인: JWT 세션
├── kakao_authentication/# 도메인: 카카오 로그인 플로우
├── mood_record/ # 도메인: 감정 기록
├── mood_analysis/ # 도메인: LLM 감정 분석
├── weekly_report/ # 도메인: 주간 리포트
└── event_log/ # 도메인: 퍼널/리텐션 분석 로그
[도메인 내부 기본 구조]
└── {도메인명}/
├── controller/ # FastAPI 라우터 및 요청 DTO
├── service/ # 비즈니스 로직 (인터페이스 & 싱글톤 구현체)
├── repository/ # DB 및 외부 API 연동
└── domain/entity/ # SQLAlchemy 모델 (Factory Method 'create' 패턴 사용)
| 메서드 | URL | 담당 도메인 | 설명 |
|---|---|---|---|
GET |
/auth/kakao |
kakao_authentication |
카카오 OAuth 리다이렉트 |
GET |
/auth/callback |
kakao_authentication |
카카오 로그인 + Account 생성 + JWT 발급 |
GET |
/auth/me |
authentication |
현재 로그인 사용자 정보 (Bearer 토큰 필요) |
POST |
/mood-records |
mood_record |
감정 기록 저장 + 즉시 LLM 분석 실행 |
GET |
/api/reports/weekly/latest |
weekly_report |
주간 리포트 조회/생성 (Bearer 토큰 필요) |
POST |
/api/events |
event_log |
프론트엔드 퍼널 이벤트 로그 저장 |
GET |
/api/debug/metrics |
event_log |
퍼널 이탈률 + 7일 리텐션 지표 (디버그) |
POST |
/users/link-data |
account |
비로그인(anon_id) 데이터를 로그인(user_id)으로 승계 |
GET |
/docs |
main.py |
Swagger UI 자동 생성 |