PostgreSQL

5강: FastAPI를 통한 웹 게시

알세지 2024. 5. 29. 12:21

5강: FastAPI를 통한 웹 게시

목차

  1. FastAPI로 웹 애플리케이션 작성
  2. 크롤링 데이터 API로 제공
  3. 파일 첨부 및 다운로드 기능 구현
  4. 최종 웹 애플리케이션 배포

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 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을 사용한 웹 애플리케이션 개발의 기본 과정을 모두 마쳤습니다.