사용자가 게시물을 생성, 조회, 업데이트, 삭제하고, 댓글을 추가하고, 게시물에 좋아요/취소할 수 있는 간단한 소셜 네트워킹 서비스(SNS)를 위한 완전한 FastAPI 백엔드 구현입니다.
- 프레임워크: Python 3.12+를 사용한 FastAPI
- 데이터베이스: SQLite (
sns_api.db) - API 문서화: Swagger UI + OpenAPI 3.1 사양
- CORS: 교차 출처 요청 활성화
- 데이터 검증: 포괄적인 검증을 포함한 Pydantic 모델
python/
├── main.py # FastAPI 애플리케이션 진입점
├── models.py # Pydantic 데이터 모델 및 스키마
├── database.py # SQLite 데이터베이스 작업
├── openapi.yaml # OpenAPI 3.0.1 사양
├── sns_api.db # SQLite 데이터베이스 파일 (자동 생성)
├── README.md # 이 문서
└── .venv/ # 가상 환경 (설정 중 생성)
준비를 위해 README 문서를 참조하세요.
먼저 $REPOSITORY_ROOT 환경 변수를 설정하세요.
# bash/zsh
REPOSITORY_ROOT=$(git rev-parse --show-toplevel)# PowerShell
$REPOSITORY_ROOT = git rev-parse --show-toplevel그런 다음 python 디렉터리로 이동하고 가상 환경을 생성하세요:
cd $REPOSITORY_ROOT/complete/python가상 환경 생성
# uv 사용 (권장)
uv venv .venv# 표준 Python 사용 (대안)
python -m venv .venv# Linux/macOS에서
source .venv/bin/activate# Windows Command Prompt에서
.venv\Scripts\activate# uv 사용 (권장)
uv pip install fastapi uvicorn python-multipart pyyaml# pip 사용 (대안)
pip install fastapi uvicorn python-multipart pyyaml상위 디렉터리에서 OpenAPI 사양을 복사하세요.
# Linux/macOS에서
cp ../openapi.yaml .# Windows Command Prompt에서
xcopy ..\openapi.yaml .개발 서버 시작
uvicorn main:app --host 0.0.0.0 --port 8000 --reload애플리케이션은 다음에서 사용할 수 있습니다:
- API 기본 URL:
http://localhost:8000/api/ - Swagger UI:
http://localhost:8000/docs - OpenAPI 사양:
http://localhost:8000/openapi.json
애플리케이션은 다음 테이블을 포함한 SQLite를 사용합니다:
id(TEXT, PRIMARY KEY) - UUIDusername(TEXT, NOT NULL) - 작성자 사용자명content(TEXT, NOT NULL) - 게시물 내용created_at(TEXT, NOT NULL) - ISO 타임스탬프updated_at(TEXT, NOT NULL) - ISO 타임스탬프
id(TEXT, PRIMARY KEY) - UUIDpost_id(TEXT, NOT NULL) - posts에 대한 외래 키username(TEXT, NOT NULL) - 작성자 사용자명content(TEXT, NOT NULL) - 댓글 내용created_at(TEXT, NOT NULL) - ISO 타임스탬프updated_at(TEXT, NOT NULL) - ISO 타임스탬프
post_id(TEXT, NOT NULL) - posts에 대한 외래 키username(TEXT, NOT NULL) - 좋아요를 누른 사용자liked_at(TEXT, NOT NULL) - ISO 타임스탬프- 기본 키:
(post_id, username)
GET /api/posts- 모든 게시물 목록POST /api/posts- 새 게시물 생성GET /api/posts/{postId}- 특정 게시물 가져오기PATCH /api/posts/{postId}- 게시물 업데이트DELETE /api/posts/{postId}- 게시물 삭제
GET /api/posts/{postId}/comments- 게시물의 댓글 목록POST /api/posts/{postId}/comments- 댓글 생성GET /api/posts/{postId}/comments/{commentId}- 특정 댓글 가져오기PATCH /api/posts/{postId}/comments/{commentId}- 댓글 업데이트DELETE /api/posts/{postId}/comments/{commentId}- 댓글 삭제
POST /api/posts/{postId}/likes- 게시물 좋아요DELETE /api/posts/{postId}/likes?username={username}- 게시물 좋아요 취소
curl -X POST "http://localhost:8000/api/posts" \
-H "Content-Type: application/json" \
-d '{"username": "john_doe", "content": "Hello World! This is my first post."}'curl -X GET "http://localhost:8000/api/posts"curl -X POST "http://localhost:8000/api/posts/{POST_ID}/comments" \
-H "Content-Type: application/json" \
-d '{"username": "jane_smith", "content": "Great post!"}'curl -X POST "http://localhost:8000/api/posts/{POST_ID}/likes" \
-H "Content-Type: application/json" \
-d '{"username": "alice_johnson"}'http://localhost:8000/docs로 이동- 모든 API 엔드포인트를 대화형으로 탐색하고 테스트
- 요청/응답 스키마 및 예제 보기
NewPostRequest:{username: str, content: str}UpdatePostRequest:{username: str, content: str}NewCommentRequest:{username: str, content: str}UpdateCommentRequest:{username: str, content: str}LikeRequest:{username: str}
Post: 메타데이터와 개수를 포함한 전체 게시물 객체Comment: 메타데이터를 포함한 전체 댓글 객체LikeResponse: 타임스탬프를 포함한 좋아요 확인
애플리케이션은 기본 설정을 사용하지만 사용자 정의할 수 있습니다:
- 데이터베이스: SQLite 파일
sns_api.db(자동 생성) - 호스트:
0.0.0.0(모든 인터페이스) - 포트:
8000 - CORS: 모든 출처에 대해 활성화
프로덕션 배포를 위해서는 다음을 고려하세요:
- 데이터베이스: PostgreSQL 또는 MySQL로 전환
- 환경 변수: 민감한 구성에 사용
- 보안: 인증 및 권한 추가
- CORS: 특정 도메인으로 제한
- 로깅: 구조화된 로깅 구현
- 모니터링: 상태 확인 및 메트릭 추가
main.py: FastAPI 앱 구성, 미들웨어 및 라우트 정의models.py: 데이터 검증 및 직렬화를 위한 Pydantic 모델database.py: SQLite 작업, 연결 관리 및 CRUD 함수
프로젝트는 다음을 따릅니다:
- Python PEP 8 스타일 가이드라인
- FastAPI 모범 사례
- 함수형 프로그래밍 패턴
- 전체적인 타입 힌트
- 포괄적인 오류 처리
models.py에서 Pydantic 모델 정의database.py에서 데이터베이스 작업 추가main.py에서 API 엔드포인트 생성- 필요한 경우 OpenAPI 사양 업데이트
- 포트 이미 사용 중:
--port 8001로 포트 변경 - 가상 환경 문제:
rm -rf .venv && uv venv .venv로 재생성 - 데이터베이스 잠김: 애플리케이션의 모든 실행 인스턴스 중지
- 가져오기 오류: 가상 환경이 활성화되어 있는지 확인
추가 로깅과 함께 실행:
uvicorn main:app --host 0.0.0.0 --port 8000 --reload --log-level debug면책조항: 이 문서는 GitHub Copilot에 의해 현지화되었습니다. 따라서 실수가 포함될 수 있습니다. 부적절하거나 잘못된 번역을 발견하면 issue를 생성해 주세요.