Skip to content

wasseobi/seobi-backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Seobi Backend

Flask 기반의 λ°±μ—”λ“œ API μ„œλ²„μž…λ‹ˆλ‹€. PostgreSQL λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λ©°, SQLAlchemyλ₯Ό ORM으둜 μ‚¬μš©ν•©λ‹ˆλ‹€.

1. μ£Όμš” κΈ°λŠ₯

  • μ‚¬μš©μž 관리 (User CRUD)
  • μ„Έμ…˜ 관리 (Session CRUD)
  • λ©”μ‹œμ§€ 관리 (Message CRUD)
  • MCP μ„œλ²„ 관리 (MCPServer CRUD)
  • MCP μ„œλ²„ ν™œμ„±ν™” 관리 (ActiveMCPServer CRUD)
  • 일정 관리 (Schedule CRUD)
  • 리포트 관리 (Report CRUD)
  • μΈμ‚¬μ΄νŠΈ 아티클 관리 (InsightArticle CRUD)
  • μžλ™ μž‘μ—… 관리 (AutoTask CRUD)
  • λΈŒλ¦¬ν•‘ 관리 (Briefing CRUD)

2. 기술 μŠ€νƒ

Backend

Microsoft Azure Python Flask SQLAlchemy Pydantic LangGraph LangChain OpenAI

Dev & Ops

UV Github-Actions Swagger OpenSSL Postgresql

Database

Postgres

3. κ΅¬ν˜„ 방식

λ°μ΄ν„°λ² μ΄μŠ€

  • PostgreSQL을 μ‚¬μš©ν•˜μ—¬ 데이터 μ €μž₯ 및 관리
  • SQLAlchemyλ₯Ό ORM으둜 ν™œμš©ν•˜μ—¬ λ°μ΄ν„°λ² μ΄μŠ€ λͺ¨λΈ μ •μ˜ 및 쿼리 처리
  • Alembic을 μ‚¬μš©ν•œ λ°μ΄ν„°λ² μ΄μŠ€ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ 관리

λ°±μ—”λ“œ 둜직

  • Flaskλ₯Ό 기반으둜 API μ„œλ²„ κ΅¬ν˜„
  • Pydantic을 μ‚¬μš©ν•˜μ—¬ 데이터 검증 및 μŠ€ν‚€λ§ˆ μ •μ˜
  • LangGraphλ₯Ό ν™œμš©ν•œ AI/도ꡬ 호좜 μ›Œν¬ν”Œλ‘œμš° 관리
  • OpenAI API 연동을 ν†΅ν•œ AI κΈ°λŠ₯ 제곡

MCP (Model Context Protocol)

μƒμ„±ν˜• AI λͺ¨λΈμ΄ μ™ΈλΆ€ μ‹œμŠ€ν…œκ³Ό μ—°λ™ν•˜κ±°λ‚˜ νŠΉμ • μ»¨ν…μŠ€νŠΈ(λ§₯락)λ₯Ό μ΄ν•΄ν•˜κ³  ν™œμš©ν•  수 μžˆλ„λ‘ λ•λŠ” Anthropicμ—μ„œ λ°œν‘œν•œ ν”„λ‘œν† μ½œλ‘œ μ£Όμš” κΈ°λŠ₯은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

  • 도ꡬ 관리:
    • μ£Όμš” 도ꡬ:
      • search_web: μ›Ή 검색을 μˆ˜ν–‰
      • google_news: λ‰΄μŠ€ 검색 및 필터링
      • google_search_expansion: 검색 ν‚€μ›Œλ“œ ν™•μž₯
    • 도ꡬ ν˜ΈμΆœμ€ call_tool 및 run_tool λ…Έλ“œλ₯Ό 톡해 μ²˜λ¦¬λ©λ‹ˆλ‹€.

LangGraph

LangGraphλŠ” AI 기반의 도ꡬ 호좜 및 μ›Œν¬ν”Œλ‘œμš° 관리λ₯Ό μœ„ν•œ 핡심 λͺ¨λ“ˆμž…λ‹ˆλ‹€. μ£Όμš” κΈ°λŠ₯κ³Ό κ΅¬ν˜„μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

  1. μ—μ΄μ „νŠΈ μ•„ν‚€ν…μ²˜

    • AgentState: μ—μ΄μ „νŠΈμ˜ μƒνƒœ 관리
      • 단기 κΈ°μ–΅: λ©”μ‹œμ§€ νžˆμŠ€ν† λ¦¬ 관리
      • μž₯κΈ° κΈ°μ–΅: μ‚¬μš©μžλ³„ μ€‘μš” 정보 μ €μž₯
      • 도ꡬ μƒνƒœ: ν˜„μž¬ μ‹€ν–‰ 쀑인 도ꡬ 정보 좔적
    • AgentExecutor: μ—μ΄μ „νŠΈ μ‹€ν–‰ 관리
      • 비동기 μ‹€ν–‰ 지원
      • 였λ₯˜ 처리 및 볡ꡬ
      • MCP 도ꡬ 톡합
  2. λ…Έλ“œ ꡬ쑰

    • ModelNode: LLM 호좜 및 응닡 생성
      • μ»¨ν…μŠ€νŠΈ 관리
      • 도ꡬ 호좜 κ²°μ •
      • 응닡 ν¬λ§·νŒ…
    • ToolNode: 도ꡬ μ‹€ν–‰
      • 동기/비동기 도ꡬ 지원
      • κ²°κ³Ό 검증
      • 였λ₯˜ 처리
    • SummarizeNode: λŒ€ν™” μš”μ•½
      • 주기적 μš”μ•½ 생성
      • μ»¨ν…μŠ€νŠΈ μ••μΆ•
    • CleanupNode: ν›„μ²˜λ¦¬
      • λ©”λͺ¨λ¦¬ 정리
      • μƒνƒœ μ΅œμ ν™”
  3. κ·Έλž˜ν”„ ꡬ쑰

    • 쑰건뢀 λΆ„κΈ° 처리:
      workflow.add_conditional_edges(
          "agent",
          state_conditional,
          {
              "tool": "tool",
              "cleanup": "cleanup",
          }
      )
    • μˆœν™˜ 및 반볡 처리:
      • 도ꡬ 호좜 β†’ κ²°κ³Ό 평가 β†’ λ‹€μŒ 단계 κ²°μ •
    • μ’…λ£Œ 쑰건 관리
  4. νŒŒμ‹± μ—μ΄μ „νŠΈ

    • μžμ—°μ–΄ μž…λ ₯ 뢄석
    • 정보 μΆ”μΆœ 및 검증
    • ν•„μš”μ‹œ LLM ν•Έλ“œμ˜€ν”„
    • μ΅œλŒ€ 5회 μž¬μ‹œλ„ 둜직
  5. λ°±κ·ΈλΌμš΄λ“œ 처리

    • μž‘μ—… 단계별 μ‹€ν–‰:
      1. μž‘μ—… 큐 관리
      2. κ³„νš μ΄ˆκΈ°ν™”
      3. 단계 μ‹€ν–‰
      4. κ²°κ³Ό 평가
      5. μž‘μ—… μ™„λ£Œ 처리
    • μ‹€νŒ¨/μž¬μ‹œλ„ 처리
    • κ²°κ³Ό λ°μ΄ν„°λ² μ΄μŠ€ μ €μž₯

4. ν”„λ‘œμ νŠΈ ꡬ쑰

seobi-backend/
β”‚
β”œβ”€β”€ app/
β”‚   β”œβ”€β”€ __init__.py
β”‚   β”œβ”€β”€ dao/                  # 데이터 μ ‘κ·Ό 객체(DAO) λͺ¨μŒ
β”‚   β”‚   β”œβ”€β”€ auto_task_dao.py
β”‚   β”‚   β”œβ”€β”€ briefing_dao.py
β”‚   β”‚   β”œβ”€β”€ insight_article_dao.py
β”‚   β”‚   β”œβ”€β”€ interest_dao.py
β”‚   β”‚   β”œβ”€β”€ message_dao.py
β”‚   β”‚   β”œβ”€β”€ report_dao.py
β”‚   β”‚   β”œβ”€β”€ schedule_dao.py
β”‚   β”‚   β”œβ”€β”€ session_dao.py
β”‚   β”‚   └── user_dao.py
β”‚   β”œβ”€β”€ langgraph/            # LangGraph 연동 및 도ꡬ κ΄€λ ¨ μ½”λ“œ
β”‚   β”‚   β”œβ”€β”€ agent/
β”‚   β”‚   β”œβ”€β”€ background/
β”‚   β”‚   β”œβ”€β”€ cleanup/
β”‚   β”‚   β”œβ”€β”€ general_agent/
β”‚   β”‚   β”œβ”€β”€ insight/
β”‚   β”‚   β”œβ”€β”€ parsing_agent/
β”‚   β”‚   └── tools/
β”‚   β”œβ”€β”€ models/               # λ°μ΄ν„°λ² μ΄μŠ€ λͺ¨λΈ μ •μ˜
β”‚   β”‚   β”œβ”€β”€ __init__.py
β”‚   β”‚   β”œβ”€β”€ auto_task.py
β”‚   β”‚   β”œβ”€β”€ auto_task_step.py
β”‚   β”‚   β”œβ”€β”€ briefing.py
β”‚   β”‚   β”œβ”€β”€ db.py
β”‚   β”‚   β”œβ”€β”€ insight_article.py
β”‚   β”‚   β”œβ”€β”€ interest.py
β”‚   β”‚   β”œβ”€β”€ message.py
β”‚   β”‚   β”œβ”€β”€ mcp_server.py
β”‚   β”‚   β”œβ”€β”€ mcp_server_activation.py
β”‚   β”‚   β”œβ”€β”€ report.py
β”‚   β”‚   β”œβ”€β”€ schedule.py
β”‚   β”‚   β”œβ”€β”€ session.py
β”‚   β”‚   └── user.py
β”‚   β”œβ”€β”€ routes/               # API μ—”λ“œν¬μΈνŠΈ
β”‚   β”‚   β”œβ”€β”€ __init__.py
β”‚   β”‚   β”œβ”€β”€ auth.py
β”‚   β”‚   β”œβ”€β”€ auto_task.py
β”‚   β”‚   β”œβ”€β”€ briefing.py
β”‚   β”‚   β”œβ”€β”€ insight.py
β”‚   β”‚   β”œβ”€β”€ message.py
β”‚   β”‚   β”œβ”€β”€ mcp_server.py     # MCP μ„œλ²„ κ΄€λ ¨ μ—”λ“œν¬μΈνŠΈ
β”‚   β”‚   β”œβ”€β”€ mcp_server_activation.py # MCP μ„œλ²„ ν™œμ„±ν™” μ—”λ“œν¬μΈνŠΈ
β”‚   β”‚   β”œβ”€β”€ report.py
β”‚   β”‚   β”œβ”€β”€ schedule.py
β”‚   β”‚   └── session.py
β”‚   β”œβ”€β”€ schemas/              # Pydantic λ“± μŠ€ν‚€λ§ˆ μ •μ˜
β”‚   β”‚   β”œβ”€β”€ auto_task_schema.py
β”‚   β”‚   β”œβ”€β”€ background_schema.py
β”‚   β”‚   β”œβ”€β”€ briefing_schema.py
β”‚   β”‚   β”œβ”€β”€ insight_schema.py
β”‚   β”‚   β”œβ”€β”€ message_schema.py
β”‚   β”‚   β”œβ”€β”€ session_schema.py
β”‚   β”‚   └── user_schema.py
β”‚   β”œβ”€β”€ services/             # λΉ„μ¦ˆλ‹ˆμŠ€ 둜직
β”‚   β”‚   β”œβ”€β”€ auto_task_service.py
β”‚   β”‚   β”œβ”€β”€ background_service.py
β”‚   β”‚   β”œβ”€β”€ briefing_service.py
β”‚   β”‚   β”œβ”€β”€ cleanup_service.py
β”‚   β”‚   β”œβ”€β”€ insight_article_service.py
β”‚   β”‚   β”œβ”€β”€ interest_service.py
β”‚   β”‚   β”œβ”€β”€ message_service.py
β”‚   β”‚   β”œβ”€β”€ schedule_service.py
β”‚   β”‚   β”œβ”€β”€ session_service.py
β”‚   β”‚   └── user_service.py
β”‚   └── utils/                # μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜ 및 μ™ΈλΆ€ 연동
β”‚       β”œβ”€β”€ agent_state_store.py
β”‚       β”œβ”€β”€ app_config.py
β”‚       β”œβ”€β”€ auth_middleware.py
β”‚       β”œβ”€β”€ auto_task_utils.py
β”‚       β”œβ”€β”€ json_utils.py
β”‚       β”œβ”€β”€ map.py
β”‚       β”œβ”€β”€ openai_client.py
β”‚       β”œβ”€β”€ summarize_output.py
β”‚       β”œβ”€β”€ text_cleaner.py
β”‚       β”œβ”€β”€ time.py
β”‚       └── time_utils.py
β”‚
β”œβ”€β”€ certs/                    # μΈμ¦μ„œ λ“± λ³΄μ•ˆ κ΄€λ ¨ 파일
β”‚   └── certificate.pem
β”œβ”€β”€ logs/                     # 둜그 파일
β”‚   └── app.log
β”œβ”€β”€ migrations/               # Alembic λ§ˆμ΄κ·Έλ ˆμ΄μ…˜
β”‚   β”œβ”€β”€ alembic.ini
β”‚   β”œβ”€β”€ env.py
β”‚   β”œβ”€β”€ README
β”‚   β”œβ”€β”€ script.py.mako
β”‚   └── versions/
β”œβ”€β”€ tests/                    # ν…ŒμŠ€νŠΈ μ½”λ“œ
β”‚   β”œβ”€β”€ conftest.py
β”‚   β”œβ”€β”€ db_setup.py
β”‚   β”œβ”€β”€ test_db_cleanup.py
β”‚   β”œβ”€β”€ test_db_setup.py
β”‚   β”œβ”€β”€ test_dao/
β”‚   └── test_services/
β”œβ”€β”€ config.py                 # ν™˜κ²½ μ„€μ •
β”œβ”€β”€ main.py                   # μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ§„μž…μ 
β”œβ”€β”€ requirements.txt          # μ˜μ‘΄μ„± λͺ©λ‘
β”œβ”€β”€ pyproject.toml            # ν”„λ‘œμ νŠΈ 메타데이터
└── uv.lock                   # uv νŒ¨ν‚€μ§€ λ§€λ‹ˆμ € lock 파일

5. μ„€μΉ˜ 및 μ‹€ν–‰

ν™˜κ²½ μ„€μ •

  1. Python 3.12 μ„€μΉ˜
  2. uv μ„€μΉ˜
    pip install uv
  3. ν™˜κ²½ λ³€μˆ˜ μ„€μ •
    • .env νŒŒμΌμ„ root directory에 생성 및 μ„€μ •(섀정값은 νŒ€μ›μ—κ²Œ 확인)
    • .certificate.pem νŒŒμΌμ„ root directory에 μ €μž₯(파일 μš”μ²­μ€ νŒ€μ›μ—κ²Œ 문의)

κ°€μƒν™˜κ²½ ν™œμ„±ν™”

# κ°€μƒν™˜κ²½ 생성
uv venv

# κ°€μƒν™˜κ²½ ν™œμ„±ν™”
source .venv/bin/activate

μ˜μ‘΄μ„± μ„€μΉ˜

uv sync

λ°μ΄ν„°λ² μ΄μŠ€ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜

flask db history
flask db migrate -m "적고 싢은 λ©”μ„Έμ§€(μˆ˜μ •κ΄€λ ¨ λ‚΄μš©)" 
flask db upgrade

μ„œλ²„ μ‹€ν–‰

python main.py

νŒ¨ν‚€μ§€ 관리

  • κ°œλ°œν•˜λ©΄μ„œ μΆ”κ°€λœ νŒ¨ν‚€μ§€κ°€ μžˆλ‹€λ©΄ μ•„λž˜ λͺ…λ Ήμ–΄λ‘œ νŒ¨ν‚€μ§€ 정리 μ§„ν–‰ ν•„μˆ˜
uv export -o requirements.txt

flask 개발 λͺ¨λ“œ κ΄€λ ¨

DEV_MODE=True 개발λͺ¨λ“œ μ‹œ, JWT 토큰 ν•„μš” μ—†μŒ. 배포 μ‹œ, False둜 μˆ˜μ •ν•˜μ—¬ JWT 토큰 검증 이후에 λ°±μ—”λ“œ API 호좜 κ°€λŠ₯ν•©λ‹ˆλ‹€.

About

πŸ“² μ„œλΉ„'s Backend

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 6