-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
170 lines (127 loc) · 5.42 KB
/
Copy pathMakefile
File metadata and controls
170 lines (127 loc) · 5.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
.PHONY: help install run test lint format migrate migrate-create docker-build docker-up docker-down docker-logs clean
# 색상 정의
YELLOW := \033[1;33m
GREEN := \033[1;32m
NC := \033[0m # No Color
# 기본 변수
PYTHON := poetry run python
UVICORN := poetry run uvicorn
ALEMBIC := poetry run alembic
PYTEST := poetry run pytest
BLACK := poetry run black
ISORT := poetry run isort
FLAKE8 := poetry run flake8
MYPY := poetry run mypy
# 기본 명령어
.DEFAULT_GOAL := help
##@ 도움말
help: ## 사용 가능한 명령어 목록 표시
@echo "$(GREEN)LinkyBoard AI - 사용 가능한 명령어$(NC)"
@echo ""
@awk 'BEGIN {FS = ":.*##"; printf "사용법: make $(YELLOW)<target>$(NC)\n\n"} /^[a-zA-Z_-]+:.*?##/ { printf " $(YELLOW)%-20s$(NC) %s\n", $$1, $$2 } /^##@/ { printf "\n$(GREEN)%s$(NC)\n", substr($$0, 5) }' $(MAKEFILE_LIST)
##@ 개발 환경
install: ## Poetry 의존성 설치
poetry install
setup: install ## 의존성 설치 + pre-commit 훅 설정
poetry run pre-commit install
poetry run pre-commit install --hook-type commit-msg
poetry run pre-commit install --hook-type pre-push
@echo "$(GREEN)✓ 개발 환경 설정 완료$(NC)"
update: ## Poetry 의존성 업데이트
poetry update
run: ## 개발 서버 실행 (핫 리로드)
$(UVICORN) app.main:app --host 0.0.0.0 --port 8000 --reload
run-prod: ## 프로덕션 서버 실행
$(UVICORN) app.main:app --host 0.0.0.0 --port 8000 --workers 4
##@ 테스트
test: ## 전체 테스트 실행 (Mock AI만, 과금 없음)
$(PYTEST) -v -m "not real_ai"
test-all: ## 전체 테스트 실행 (실제 AI API 포함, 과금 발생)
ENABLE_REAL_AI_TESTS=true $(PYTEST) -v
test-unit: ## 단위 테스트만 실행
$(PYTEST) tests/unit -v -m "not real_ai"
test-integration: ## 통합 테스트만 실행
$(PYTEST) tests/integration -v -m "not real_ai"
test-e2e: ## E2E 테스트만 실행
$(PYTEST) tests/e2e -v
test-ai: ## AI 도메인 테스트만 실행 (Mock)
$(PYTEST) tests/unit/domains/ai tests/integration/test_ai_api.py -v -m "not real_ai"
test-real-ai: ## 실제 AI API 테스트 (과금 발생)
ENABLE_REAL_AI_TESTS=true $(PYTEST) -v -m "real_ai"
test-cov: ## 커버리지 포함 테스트 실행
$(PYTEST) --cov=app --cov-report=html --cov-report=term-missing -m "not real_ai"
test-cov-unit: ## 단위 테스트 커버리지
$(PYTEST) tests/unit --cov=app --cov-report=term-missing -m "not real_ai"
test-failed: ## 실패한 테스트만 재실행
$(PYTEST) --lf -v -m "not real_ai"
test-watch: ## 파일 변경 시 자동 테스트 실행 (pytest-watch 필요)
poetry run ptw -- -v -m "not real_ai"
##@ 코드 품질
quality: ## 코드 품질 검사 (format + lint)
@echo "$(GREEN)Running code quality checks...$(NC)"
$(ISORT) app tests scripts
$(BLACK) app tests scripts
$(FLAKE8) --extend-ignore=E203,W503,B008 app tests scripts
$(MYPY) app
@echo "$(GREEN)✓ Code quality checks passed$(NC)"
lint: ## 린트 검사 (flake8 + mypy)
$(FLAKE8) --extend-ignore=E203,W503,B008 app tests
$(MYPY) app
flake8: ## flake8 검사 (pre-commit과 동일한 설정)
$(FLAKE8) --extend-ignore=E203,W503,B008 app tests scripts
format: ## 코드 포맷팅 (black + isort)
$(ISORT) app tests
$(BLACK) app tests
format-check: ## 포맷팅 검사 (수정 없이 확인만)
$(ISORT) --check-only app tests
$(BLACK) --check app tests
##@ 데이터베이스
migrate: ## 마이그레이션 적용 (최신 버전으로 업그레이드)
$(ALEMBIC) upgrade head
migrate-down: ## 마이그레이션 롤백 (한 단계 되돌리기)
$(ALEMBIC) downgrade -1
migrate-create: ## 새 마이그레이션 생성 (예: make migrate-create name="add_users_table")
@if [ -z "$(name)" ]; then \
echo "$(YELLOW)사용법: make migrate-create name=\"마이그레이션_이름\"$(NC)"; \
exit 1; \
fi
$(ALEMBIC) revision --autogenerate -m "$(name)"
migrate-history: ## 마이그레이션 히스토리 조회
$(ALEMBIC) history
migrate-current: ## 현재 마이그레이션 버전 확인
$(ALEMBIC) current
##@ Docker
docker-build: ## Docker 이미지 빌드
docker-compose build
docker-up: ## Docker Compose 환경 실행 (빌드 포함)
docker-compose up -d --build
docker-down: ## Docker Compose 환경 종료
docker-compose down
docker-down-v: ## Docker Compose 환경 종료 (볼륨 포함 삭제)
docker-compose down -v
docker-logs: ## Docker 로그 확인
docker-compose logs -f
docker-logs-api: ## API 서비스 로그만 확인
docker-compose logs -f api
docker-exec: ## API 컨테이너 쉘 접속
docker-compose exec api /bin/bash
docker-ps: ## 실행 중인 컨테이너 확인
docker-compose ps
##@ LLM & Observability
test-langfuse: ## LangFuse 연결 테스트
PYTHONPATH=. $(PYTHON) scripts/test_langfuse_connection.py
test-llm: ## LLM 통합 테스트 (실제 API 호출)
PYTHONPATH=. $(PYTHON) scripts/test_llm_integration.py
##@ 유틸리티
clean: ## 캐시 및 임시 파일 삭제
find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
find . -type d -name ".pytest_cache" -exec rm -rf {} + 2>/dev/null || true
find . -type d -name ".mypy_cache" -exec rm -rf {} + 2>/dev/null || true
find . -type f -name "*.pyc" -delete 2>/dev/null || true
find . -type f -name "*.pyo" -delete 2>/dev/null || true
rm -rf htmlcov .coverage 2>/dev/null || true
shell: ## Poetry 가상환경 쉘 실행
poetry shell
env-example: ## .env.example에서 .env 파일 생성
cp .env.example .env
@echo "$(GREEN).env 파일이 생성되었습니다. 필요한 값을 설정해주세요.$(NC)"