FastAPI 백엔드와 Streamlit 프론트엔드를 결합한 풀스택 웹 애플리케이션 템플릿입니다.
Docker Compose를 사용하여 간편하게 배포할 수 있도록 만들었습니다.
fastaapi_w_streamlit/
├── backend/ # FastAPI 백엔드
│ ├── __init__.py
│ ├── main.py # FastAPI 메인 애플리케이션
│ ├── config.py # 설정 관리
│ ├── models.py # Pydantic 데이터 모델
│ ├── routers/ # API 라우터
│ │ ├── __init__.py
│ │ ├── users.py # 사용자 관련 API
│ │ └── items.py # 아이템 관련 API
│ ├── Dockerfile # 백엔드 Docker 이미지
│ └── requirements.txt # 백엔드 의존성
├── frontend/ # Streamlit 프론트엔드
│ ├── __init__.py
│ ├── app.py # Streamlit 메인 애플리케이션
│ ├── Dockerfile # 프론트엔드 Docker 이미지
│ └── requirements.txt # 프론트엔드 의존성
├── docker-compose.yml # Docker Compose 설정
├── .dockerignore # Docker 제외 파일
├── run_backend.py # 백엔드 실행 스크립트 (로컬)
├── run_frontend.py # 프론트엔드 실행 스크립트 (로컬)
├── run_all.sh # 통합 실행 스크립트 (Mac/Linux)
├── run_all.bat # 통합 실행 스크립트 (Windows)
├── .env.example # 환경 변수 예시
├── .gitignore # Git 제외 파일 목록
└── README.md # 프로젝트 문서
- ✅ RESTful API 설계
- ✅ 모듈화된 라우터 구조
- ✅ Pydantic을 통한 데이터 검증
- ✅ CORS 미들웨어 설정
- ✅ 자동 API 문서 생성 (Swagger UI, ReDoc)
- ✅ 환경 변수 기반 설정
- ✅ 헬스 체크 엔드포인트
- ✅ Docker 컨테이너화
- ✅ 직관적인 웹 인터페이스
- ✅ 사용자 관리 (CRUD)
- ✅ 아이템 관리 (CRUD)
- ✅ 실시간 데이터 조회
- ✅ API 테스트 도구
- ✅ 반응형 대시보드
- ✅ Docker 컨테이너화
Docker가 설치되어 있다면 가장 간단하게 실행할 수 있습니다.
- Docker 설치 (https://www.docker.com/get-started)
- Docker Compose 설치 (Docker Desktop에 포함)
1. 컨테이너 빌드 및 실행:
docker-compose up --build2. 백그라운드 실행:
docker-compose up -d3. 로그 확인:
docker-compose logs -f4. 컨테이너 중지:
docker-compose down5. 컨테이너 중지 및 볼륨 삭제:
docker-compose down -v- 자동 네트워크 구성:
fastapi_streamlit_network브리지 네트워크로 백엔드와 프론트엔드 연결 - 헬스체크: 프론트엔드는 백엔드 서비스의 상태를 모니터링하고 백엔드가 준비된 후 시작
- 환경 변수: Docker Compose에서 환경 변수를 통해 설정 관리
- 자동 재시작: 컨테이너 장애 시 자동으로 재시작 (
restart: unless-stopped)
# 백엔드만 재시작
docker-compose restart backend
# 프론트엔드만 재시작
docker-compose restart frontend
# 특정 서비스의 로그 확인
docker-compose logs -f backend
docker-compose logs -f frontend
# 컨테이너 상태 확인
docker-compose psDocker 없이 로컬에서 직접 실행할 수도 있습니다.
python -m venv venv
# Mac/Linux
source venv/bin/activate
# Windows
venv\Scripts\activate백엔드:
cd backend
pip install -r requirements.txt
cd ..프론트엔드:
cd frontend
pip install -r requirements.txt
cd ..방법 1: 통합 실행 (추천)
Mac/Linux:
chmod +x run_all.sh
./run_all.shWindows:
run_all.bat방법 2: 개별 실행
터미널 1 - 백엔드:
python run_backend.py터미널 2 - 프론트엔드:
python run_frontend.py방법 3: 직접 실행
백엔드:
cd backend
python main.py
# 또는
uvicorn main:app --reload --host 0.0.0.0 --port 8000프론트엔드:
streamlit run frontend/app.py서버 실행 후 다음 URL에서 접속할 수 있습니다:
- Streamlit 대시보드: http://localhost:8501
- FastAPI 서버: http://localhost:8000
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
- 헬스 체크: http://localhost:8000/health
- Streamlit 대시보드: http://localhost:8501
- FastAPI 서버: http://localhost:8000
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
- 헬스 체크: http://localhost:8000/health
GET /- 루트 엔드포인트GET /health- 헬스 체크
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/v1/users/ |
사용자 생성 |
| GET | /api/v1/users/ |
모든 사용자 조회 |
| GET | /api/v1/users/{user_id} |
특정 사용자 조회 |
| DELETE | /api/v1/users/{user_id} |
사용자 삭제 |
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/v1/items/ |
아이템 생성 |
| GET | /api/v1/items/ |
모든 아이템 조회 |
| GET | /api/v1/items/{item_id} |
특정 아이템 조회 |
| PUT | /api/v1/items/{item_id} |
아이템 수정 |
| DELETE | /api/v1/items/{item_id} |
아이템 삭제 |
- API 서버 상태 확인
- 주요 기능 소개
- 유용한 링크 모음
- 조회: 전체 사용자 목록 확인
- 생성: 새로운 사용자 등록
- 삭제: 사용자 삭제
- 조회: 전체 아이템 목록 확인 (페이지네이션 지원)
- 생성: 새로운 아이템 등록
- 수정: 아이템 정보 수정
- 삭제: 아이템 삭제
- 직접 API 엔드포인트 테스트
- HTTP 메서드 선택 (GET, POST, PUT, DELETE)
- 요청 본문 편집
- 응답 결과 확인
# API 요청
POST http://localhost:8000/api/v1/users/
{
"username": "johndoe",
"email": "john@example.com",
"password": "password123"
}# API 요청
POST http://localhost:8000/api/v1/items/?owner_id=1
{
"title": "노트북",
"description": "맥북 프로 16인치",
"price": 2500000
}- 브라우저에서 http://localhost:8501 접속
- 사이드바에서 "사용자 관리" 선택
- "사용자 생성" 탭에서 정보 입력
- "생성" 버튼 클릭
프로젝트는 fastapi_streamlit_network라는 커스텀 브리지 네트워크를 사용합니다:
- Backend 서비스: 컨테이너명
fastapi_backend, 포트 8000 - Frontend 서비스: 컨테이너명
streamlit_frontend, 포트 8501 - 내부 통신: 프론트엔드는
http://backend:8000으로 백엔드 API 호출 - 외부 접근: 호스트에서는
http://localhost:8000,http://localhost:8501로 접근
Docker Compose에서 설정되는 환경 변수:
Backend:
PROJECT_NAME=FastAPI Template
VERSION=1.0.0
DEBUG=True
HOST=0.0.0.0
PORT=8000Frontend:
API_BASE_URL=http://backend:8000/api/v1
API_HOST=http://backend:8000- FastAPI: 고성능 웹 프레임워크
- Uvicorn: ASGI 서버
- Pydantic: 데이터 검증
- Streamlit: 데이터 앱 프레임워크
- Requests: HTTP 클라이언트
- Pandas: 데이터 처리
- Docker: 컨테이너화
- Docker Compose: 멀티 컨테이너 오케스트레이션
- Docker 관련 트러블슈팅은
Docker_Guide.md문서를 참고하세요.
- 현재는 메모리 기반의 임시 데이터베이스를 사용합니다
- 서버 재시작 시 데이터가 초기화됩니다
- 실제 운영 환경에서는 PostgreSQL, MySQL 등의 데이터베이스 연결이 필요합니다
- 비밀번호는 반드시 해싱하여 저장해야 합니다
- 인증/인가 시스템 구현이 필요합니다
프로젝트를 확장하려면 다음을 고려하세요:
-
데이터베이스 연결
- PostgreSQL, MySQL, MongoDB 등
- SQLAlchemy ORM 적용
- Docker Compose에 데이터베이스 서비스 추가
-
인증/인가
- JWT 토큰 기반 인증
- OAuth2 소셜 로그인
- 세션 관리
-
고급 기능
- 파일 업로드/다운로드
- 실시간 알림 (WebSocket)
- 데이터 시각화 (차트, 그래프)
- Redis 캐싱
-
배포
- Docker Hub에 이미지 푸시
- Kubernetes 오케스트레이션
- CI/CD 파이프라인 (GitHub Actions)
- 클라우드 배포 (AWS ECS, GCP Cloud Run, Azure Container Instances)
-
테스트
- 단위 테스트 (pytest)
- 통합 테스트
- E2E 테스트
- Docker 환경에서 테스트 실행
-
모니터링
- 로깅 시스템 (ELK Stack)
- 에러 추적 (Sentry)
- 성능 모니터링 (Prometheus + Grafana)
- 컨테이너 모니터링
-
보안
- HTTPS/SSL 인증서
- 환경 변수 암호화
- Docker 시크릿 관리
- 보안 취약점 스캔
이슈나 풀 리퀘스트는 언제든 환영합니다!
MIT License
질문이나 제안사항이 있으시면 이슈를 등록해주세요.
Happy Coding! 🚀🐳