Metadata-Version: 2.4
Name: jobu
Version: 0.2.1
Summary: Python 기반 통합 배치 스케줄링 시스템
Author-email: dok9 <dok9gold@gmail.com>
License: MIT
Project-URL: Homepage, https://github.com/dok9gold/jobu
Project-URL: Repository, https://github.com/dok9gold/jobu
Project-URL: Issues, https://github.com/dok9gold/jobu/issues
Keywords: batch,scheduler,cron,job,async
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Framework :: AsyncIO
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.12
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: aiosqlite<0.22.0,>=0.20.0
Requires-Dist: aiosql<14.0,>=13.0
Requires-Dist: pyyaml<7.0,>=6.0.0
Requires-Dist: pydantic<3.0,>=2.10.0
Requires-Dist: croniter<7.0,>=5.0.0
Requires-Dist: fastapi<0.130.0,>=0.115.0
Requires-Dist: uvicorn<0.40.0,>=0.34.0
Requires-Dist: jinja2<4.0,>=3.1.0
Requires-Dist: httpx<0.30.0,>=0.27.0
Requires-Dist: asyncpg<0.32.0,>=0.30.0
Requires-Dist: asyncmy<0.3.0,>=0.2.9
Requires-Dist: python-json-logger<5.0,>=3.0.0
Provides-Extra: dev
Requires-Dist: pytest<10.0,>=8.0.0; extra == "dev"
Requires-Dist: pytest-asyncio<2.0,>=1.0.0; extra == "dev"
Dynamic: license-file

# jobu (Job Unified)

Python 기반 통합 배치 스케줄링 시스템

> **요구사항:** Python 3.12+

## 개요

RDB에 크론 정보를 저장하고, Dispatcher가 스케줄에 따라 Job을 생성하면 Worker가 실행하는 구조입니다.

```
[cron_jobs] --Dispatcher--> [job_executions] --Worker--> [Handler]
```

## 특징

- Dispatcher/Worker 분리로 HA 구성 용이
- 다중 DB 지원 (SQLite, PostgreSQL, MySQL)
- 다중 DB 트랜잭션 지원 (`@transactional(db1, db2)`)
- 비즈니스 로직과 model/sql 분리
- aiosql 기반 SQL 쿼리 관리
- 비동기 커넥션풀 지원
- Admin API로 크론/잡 관리

## 모듈

| 모듈 | 설명 |
|------|------|
| [admin](admin/README.md) | 관리 API 및 모니터링 화면 |
| [database](database/README.md) | DB 커넥션풀, 트랜잭션 관리 |
| [dispatcher](dispatcher/README.md) | 크론 기반 Job 생성 |
| [worker](worker/README.md) | Job 실행 워커풀 |

**흐름:** Admin에서 크론 등록 -> Dispatcher가 스케줄에 맞춰 Job 생성 -> Worker가 Job 실행

## 구조

```
jobu/
  config/       # 설정 파일
  database/     # DB 커넥션풀 (SQLite, PostgreSQL, MySQL)
  dispatcher/   # Job 생성
  worker/       # Job 실행
  admin/        # 관리 API
  docker/       # Docker 개발 환경
```

## 설치

```bash
pip install jobu
```

## 빠른 시작

```bash
# 새 프로젝트 생성
jobu init myproject
cd myproject

# 가상환경 설정
python -m venv .venv
source .venv/bin/activate  # Windows: .venv\Scripts\activate
pip install -r requirements.txt

# 실행
python main.py
```

### 템플릿 옵션

```bash
jobu init myproject                     # 기본 (main 브랜치)
jobu init myproject --template sample   # sample 브랜치
```

## 개발 환경 설치

```bash
# 가상환경 생성 및 활성화
python -m venv .venv
source .venv/bin/activate  # Windows: .venv\Scripts\activate

# 의존성 설치
pip install -r requirements.txt
```

## 실행

```bash
# Admin API
python -m uvicorn admin.main:app --reload --port 8080

# Dispatcher
python -m dispatcher.main

# Worker
python -m worker.main

# Docker (PostgreSQL, MySQL 개발환경)
cd docker && docker-compose up -d
```

## 관리자 페이지

| URL | 설명 |
|-----|------|
| http://localhost:8080/docs | API 문서 (Swagger) |
| http://localhost:8080/crons | 크론 관리 화면 |
| http://localhost:8080/jobs | 잡 이력 화면 |

## 개발 가이드

- [CONTRIBUTING.md](CONTRIBUTING.md) - 네이밍 규칙, 개발 규칙, 시간대 규칙
- [PRODUCTION.md](PRODUCTION.md) - 운영 환경 배포 및 설정 가이드
