νμ΄ FastAPI κ°λ° μλ² μ€ν κ°μ΄λμ λλ€.
- Python 3.9+
pipμ¬μ© κ°λ₯ νκ²½
cd /Users/kimdoyeon/PycharmProjects/counseling-analyticspython3 -m venv .venvpy -m venv .venvsource .venv/bin/activate.venv\Scripts\Activate.ps1Windowsμμ μ€ν μ μ± μ€λ₯κ° λλ©΄(μ΅μ΄ 1ν):
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUserpip install -r requirements.txtpython -m uvicorn app.realtime.main:app --reload --host 0.0.0.0 --port 8000python -m app.batch.main- API: http://127.0.0.1:8000
- Swagger UI: http://127.0.0.1:8000/docs
- ReDoc: http://127.0.0.1:8000/redoc
- μμ€ν
νλ‘μ°:
docs/FLOW.md - Spring/FastAPI/EFS μ°λ κ°μ΄λ:
docs/TEAM_API_EFS_GUIDE.md - Team2 μκ³ λ¦¬μ¦ κ΅¬ν κ°μ΄λ:
docs/TEAM2_KEYWORD_MAPPING_GUIDE.md
python-analysis/
ββ app/
β ββ main.py # FastAPI μ± μνΈλ¦¬ν¬μΈνΈ
β ββ api/
β β ββ deps.py # κ³΅ν΅ μμ‘΄μ± μ£Όμ
β β ββ router.py # APIRouter ν΅ν©
β β ββ v1/
β β ββ analyze.py # POST /analyze
β β ββ health.py # /health, /ready
β β ββ ops.py # μ΄μ/μν μ‘°νμ© API
β β
β ββ core/
β β ββ config.py # νκ²½λ³μ, μ€μ (Pydantic Settings)
β β ββ logging.py # λ‘κΉ
μ€μ
β β ββ enums.py # κ³΅ν΅ Enum
β β ββ constants.py # κ²½λ‘, νμΌ suffix, μ¬μλ μμ
β β ββ exceptions.py # 컀μ€ν
μμΈ
β β
β ββ schemas/
β β ββ analyze_request.py # μμ² DTO
β β ββ analyze_response.py # μλ΅ DTO
β β ββ callback_request.py # Spring μ½λ°± DTO
β β ββ counsel_record.py # μλ΄ JSONL λ μ½λ μ€ν€λ§
β β ββ alias_record.py # λ³μΉ JSONL λ μ½λ μ€ν€λ§
β β ββ result_record.py # κ²°κ³Ό JSONL λ μ½λ μ€ν€λ§
β β ββ aggregate_record.py # κ°μΈλ³ μ§κ³ JSONL μ€ν€λ§
β β
β ββ services/
β β ββ analyze_service.py # μ 체 λΆμ νλ¦ orchestration
β β ββ alias_loader_service.py # λ³μΉ νμΌ λ‘λ©/μΊμ±
β β ββ result_writer_service.py # κ²°κ³Ό νμΌ μ μ₯(tmpβrename)
β β ββ callback_service.py # Spring κ²°κ³Ό μ μ‘
β β ββ idempotency_service.py # requestId μ€λ³΅ μ²λ¦¬ λ°©μ§
β β
β ββ pipeline/
β β ββ normalizer.py # ν
μ€νΈ μ κ·ν
β β ββ extractor.py # spaCy κΈ°λ° ν€μλ μΆμΆ
β β ββ mapper.py # Damerau-Levenshtein λ§€ν
β β ββ scorer.py # match score κ³μ°
β β ββ aggregator.py # member_id κΈ°μ€ ν€μλ μ§κ³
β β
β ββ infra/
β β ββ efs/
β β β ββ reader.py # EFS νμΌ μ½κΈ°
β β β ββ writer.py # EFS νμΌ μ°κΈ°
β β β ββ jsonl.py # JSONL stream read/write
β β β ββ paths.py # req/ref/result κ²½λ‘ μ νΈ
β β β
β β β
β β ββ cache/
β β β ββ alias_cache.py # jobInstanceIdλ³ alias μΊμ
β β β
β β ββ state/
β β ββ request_registry.py # μ²λ¦¬ μν κΈ°λ‘(νμΌ/redis/sqlite λ±)
β β ββ lock.py # μ€λ³΅ μ€ν λ°©μ§ λ½
β β
β β
β ββ utils/
β ββ time.py
β ββ hashing.py
β ββ retry.py
β
ββ tests/
β ββ api/
β ββ services/
β ββ pipeline/
β ββ infra/
β
ββ requirements.txt
ββ Dockerfile
ββ .env**b**