FastAPI로 다이어리 서비스 구축(1)

김재섭·2024년 10월 15일

Python의 FastAPI를 사용해 다이어리 서비스 API를 구축하는 방법을 다룹니다.

SQLAlchemy ORM을 이용해 데이터베이스와 상호작용하고, Alembic을 통해 데이터베이스 마이그레이션을 관리하는 방법까지

FastAPI는 SQLAlchemy ORM과 쉽게 연동할 수 있습니다. SQLAlchemy는 관계형 데이터베이스를 객체지향적으로 다룰 수 있게 해주는 ORM 툴입니다.

이 프로젝트에서는 Session을 이용해 데이터베이스에 접근합니다.

from sqlalchemy.orm import Session
from app.models import Diary as DiaryModel, User
from ..database import get_db

이 부분에서는 FastAPI의 Depends를 사용해 데이터베이스 세션을 주입하고, SQLAlchemy로 다이어리를 처리하는 과정을 설명합니다.

@router.post("/")
async def new_diary(diary: DiaryCreate, db: Session = Depends(get_db)):
    user = db.query(User).filter(User.id == 1).first()
    new_diary = DiaryModel(user_id=user.id, ...)
    db.add(new_diary)
    db.commit()
    db.refresh(new_diary)
    return {"status": 201, "message": "다이어리 저장 성공", "data": {"id": new_diary.id}}

다이어리 생성 API (POST)

내용: 다이어리를 작성하는 API입니다. 사용자가 제목, 내용, 감정, 날씨 등을 입력해 다이어리를 저장할 수 있습니다. FastAPI의 POST 메서드를 사용해 데이터를 전송하고, SQLAlchemy로 데이터를 데이터베이스에 저장합니다.

@router.put("/{diary_id}")
async def edit_diary(diary_id: int, diary: Diary, db: Session = Depends(get_db)):
    existing_diary = db.query(DiaryModel).filter(DiaryModel.id == diary_id).first()
    if not existing_diary:
        raise HTTPException(status_code=404, detail="Diary not found")
    existing_diary.title = diary.title
    ...
    db.commit()

다이어리 수정 API (PUT)

내용: 사용자가 작성한 다이어리를 수정할 수 있는 API입니다. 해당 다이어리 ID를 통해 데이터를 조회하고, 필요한 필드를 수정 후 저장합니다.

@router.delete("/{diary_id}")
async def delete_diary(diary_id: int, db: Session = Depends(get_db)):
    diary_to_delete = db.query(DiaryModel).filter(DiaryModel.id == diary_id).first()
    if not diary_to_delete:
        raise HTTPException(status_code=404, detail="Diary not found")
    diary_to_delete.is_deleted = True
    db.commit()

다이어리 삭제 API (DELETE)

내용: 사용자가 작성한 다이어리를 삭제하는 API입니다. 실제 데이터를 삭제하는 대신, 논리적 삭제(Soft Delete) 방식을 사용해 is_deleted 필드만 업데이트합니다.

데이터베이스에서 레코드를 실제로 삭제하지 않고 상태만 업데이트하여 추후 복구가 가능하도록 하는 논리적 삭제 방식

profile
Upward Developer

0개의 댓글