FastAPI 기반 학습 로드맵/자료 큐레이션 서비스의 백엔드 레포지토리입니다. Clean Architecture 계층 분리와 Docker 기반 실행 환경을 제공하며, DOC_LOG → Notion 자동화로 개발 로그를 관리합니다.
app/
core/ # 설정, DB 세션, 보안 유틸
domain/ # 엔티티, 리포지토리 인터페이스
infrastructure/ # 구체 리포지토리, 외부 어댑터
usecases/ # 비즈니스 유스케이스
presentation/ # FastAPI 라우터/스키마
Dockerfile # multi-stage (dev/prod)
docker-compose.yml # api + postgres
scripts/ # 자동화 스크립트 (Notion sync 등)
cp example.env .env
# .env 파일에서 DATABASE_URL이 postgresql+asyncpg:// 형식인지 확인
docker compose up --build이후 http://localhost:8000/docs에서 API 스펙을 확인할 수 있습니다.
반드시 비동기 드라이버를 사용해야 합니다:
- ✅ 올바른 형식:
postgresql+asyncpg://user:password@host:port/dbname - ❌ 잘못된 형식:
postgresql://user:password@host:port/dbname(동기 드라이버)
서버 환경에서는 .env 파일의 DATABASE_URL이 postgresql+asyncpg://로 시작하는지 확인하세요.
- DOC_LOG.md 템플릿에 작업 내용을 기록
git add DOC_LOG.md && git commitgit push→ GitHub Actions가 Notion Dev-Journal에 로그를 저장하고 DOC_LOG를 초기화
POST /api/v1/auth/signup: 회원가입POST /api/v1/auth/login: 로그인 (access/refresh token 발급)POST /api/v1/auth/refresh: 토큰 재발급GET /api/v1/auth/me: 현재 사용자 정보
GET /api/v1/roadmaps: 분야별 로드맵 계층 구조 + 사용자별 완료 상태
POST /api/v1/progress/{item_id}/complete?type=roadmap|material: 로드맵/자료 완료 토글type파라미터:roadmap(기본값) 또는material- 예시:
POST /api/v1/progress/1/complete?type=material(자료 ID 1 완료 처리)
GET /api/v1/progress?type=roadmap|material&category=frontend|backend|devops: 사용자 진도 현황 및 통계type: 필터링할 progress 유형 (선택)category: 로드맵 카테고리 필터 (선택)- 응답:
progress(진도 목록),statistics(전체/로드맵/자료별 통계)
GET /api/v1/materials?keyword=...&difficulty=beginner|intermediate&type=document|video&page=1&limit=20: 자료 검색POST /api/v1/materials/{material_id}/scrap: 자료 스크랩DELETE /api/v1/materials/{material_id}/scrap: 자료 스크랩 해제
# 1. 회원가입
curl -X POST http://localhost:8000/api/v1/auth/signup \
-H "Content-Type: application/json" \
-d '{"email": "user@example.com", "password": "password123"}'
# 2. 로그인
curl -X POST http://localhost:8000/api/v1/auth/login \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "username=user@example.com&password=password123"
# 3. 로드맵 조회 (토큰 필요)
curl -X GET http://localhost:8000/api/v1/roadmaps \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
# 4. 자료 완료 처리
curl -X POST http://localhost:8000/api/v1/progress/5/complete?type=material \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"completed": true}'
# 5. 진도 현황 조회 (자료만 필터)
curl -X GET "http://localhost:8000/api/v1/progress?type=material" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"# 새 마이그레이션 생성
PYTHONPATH=. alembic revision -m "add something"
# 로컬에서 실행할 경우 호스트 DB URL을 지정
ALEMBIC_DATABASE_URL=postgresql+psycopg2://stacknori:stacknori@localhost:5432/stacknori alembic upgrade head도커 컨테이너 내부에서는 POSTGRES_SERVER=db 환경 변수를 그대로 사용하면 된다.
# 기본값으로 실행 (admin@stacknori.com / admin123456)
python scripts/seed_admin.py
# 환경 변수로 커스터마이징
ADMIN_EMAIL=admin@example.com \
ADMIN_PASSWORD=secure_password \
python scripts/seed_admin.py
# 도커 컨테이너 내부에서 실행
docker compose exec api python scripts/seed_admin.py자세한 내용은 docs/ROLE_SYSTEM.md를 참고하세요.
# 로드맵/자료 기본 데이터 입력
python scripts/seed_content.py
# 환경 변수로 DB URL 지정 가능
DATABASE_URL=postgresql+asyncpg://... python scripts/seed_content.py
# 도커 컨테이너 내부 실행
docker compose exec api python scripts/seed_content.py- GitHub Actions CI (lint/test) & docker build 캐시
- NAS 기반 self-hosted runner에서 compose 배포 자동화
자세한 인프라/클린 아키텍처 계획은 docs/INFRA_CLEAN_ARCH_PLAN.md를 참고하세요.