5강: FastAPI를 통한 웹 게시
목차
- FastAPI로 웹 애플리케이션 작성
- 크롤링 데이터 API로 제공
- 파일 첨부 및 다운로드 기능 구현
- 최종 웹 애플리케이션 배포
1. FastAPI로 웹 애플리케이션 작성
FastAPI를 사용하여 웹 애플리케이션을 작성합니다.
기본 FastAPI 애플리케이션 작성
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello, World!"}
애플리케이션 실행
Uvicorn을 사용하여 애플리케이션을 실행합니다.
uvicorn main:app --reload
2. 크롤링 데이터 API로 제공
크롤링한 데이터를 API로 제공하는 엔드포인트를 작성합니다.
데이터 조회 API 작성
데이터베이스에서 크롤링한 데이터를 조회하여 반환하는 API를 작성합니다.
from fastapi import FastAPI, Depends
from sqlalchemy.orm import Session
from .database import SessionLocal, engine, Base
from .models import WebData
app = FastAPI()
# 데이터베이스 모델 초기화
Base.metadata.create_all(bind=engine)
# 데이터베이스 세션 생성 함수
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
@app.get("/webdata/")
def read_webdata(skip: int = 0, limit: int = 10, db: Session = Depends(get_db)):
web_data = db.query(WebData).offset(skip).limit(limit).all()
return web_data
3. 파일 첨부 및 다운로드 기능 구현
FastAPI를 사용하여 파일 첨부 및 다운로드 기능을 구현합니다.
파일 업로드 엔드포인트 작성
from fastapi import FastAPI, File, UploadFile
import shutil
app = FastAPI()
@app.post("/uploadfile/")
def upload_file(file: UploadFile = File(...)):
with open(f"files/{file.filename}", "wb") as buffer:
shutil.copyfileobj(file.file, buffer)
return {"filename": file.filename}
파일 다운로드 엔드포인트 작성
from fastapi import FastAPI
from fastapi.responses import FileResponse
app = FastAPI()
@app.get("/downloadfile/{filename}")
def download_file(filename: str):
file_path = f"files/{filename}"
return FileResponse(path=file_path, filename=filename)
4. 최종 웹 애플리케이션 배포
최종적으로 웹 애플리케이션을 배포하는 방법을 학습합니다.
Docker를 사용한 배포
Docker를 사용하여 애플리케이션을 배포합니다.
Dockerfile 작성
FROM python:3.8-slim
WORKDIR /app
COPY . /app
RUN pip install --no-cache-dir -r requirements.txt
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
Docker 이미지 빌드 및 실행
docker build -t myfastapiapp .
docker run -d -p 8000:8000 myfastapiapp
Heroku를 사용한 배포
Heroku를 사용하여 애플리케이션을 배포합니다.
Heroku CLI 설치 및 로그인
Heroku 애플리케이션 생성 및 배포
heroku create myfastapiapp
git push heroku main
흔하게 발생하는 오류 및 해결 방법
오류:
ModuleNotFoundError: No module named '...'
- 해결 방법: 모듈이 설치되었는지 확인하고, 설치되지 않았다면
pip install
명령어를 사용하여 설치합니다.
- 해결 방법: 모듈이 설치되었는지 확인하고, 설치되지 않았다면
오류:
Docker: bind: address already in use
- 해결 방법: 다른 프로세스가 포트를 사용 중인지 확인하고, 사용 중인 포트를 변경하거나 해당 프로세스를 종료합니다.
마무리
FastAPI를 사용하여 웹 애플리케이션을 작성하고, 크롤링 데이터를 API로 제공하는 방법을 학습했습니다. 또한, 파일 업로드 및 다운로드 기능을 구현하고, 최종적으로 애플리케이션을 배포하는 방법을 배웠습니다. 이로써 FastAPI와 PostgreSQL을 사용한 웹 애플리케이션 개발의 기본 과정을 모두 마쳤습니다.
'PostgreSQL' 카테고리의 다른 글
4강: 웹 크롤링 데이터 저장 (0) | 2024.05.29 |
---|---|
3강: FastAPI와 PostgreSQL 연동하기 (0) | 2024.05.29 |
2강: Python에서 PostgreSQL 사용하기 (0) | 2024.05.29 |
1강: PostgreSQL 기초 및 설치 (0) | 2024.05.29 |
[교안]PostgreSQL과 FastAPI를 활용한 웹 크롤링 학습 커리큘럼 (0) | 2024.05.29 |