TOP
본문 바로가기
[파이썬 Projects]/<파이썬 웹개발>

[파이썬] FastAPI - 메모 앱 프로젝트 2: CRUD 구현

by 기록자_Recordian 2025. 5. 9.
728x90
반응형
이전 내용
 

[파이썬] FastAPI - 메모 앱 프로젝트 1: 초기 설정, DB 연동

이전 내용 [파이썬] FastAPI - 성능 개선 팁이전 내용 [FastAPI] 미들웨어(middleware) - 3: GZip이전 내용 [FastAPI] 미들웨어(middleware) - 2: CORS이전 내용 [FastAPI] 미들웨어(middleware) - 1: TrustedHostMiddleware이전 내

puppy-foot-it.tistory.com


CRUD 기능 구현

 

main.py에 CRUD 기능을 구현하여 사용자가 메모를 생성, 조회, 수정 및 삭제가 가능하도록 구현한다.

from typing import Optional

Optional 은 Python의 타입 힌팅 기능 중 하나로, 특정 변수 또는 매개변수가 None 이 될 수 있음을 나타낸다.

class MemoUpdate(BaseModel):
    title: Optional[str] = None
    content: Optional[str] = None
  • Optional[str]: 문자열(str) 타입의 값을 가질 수 있으며, 값이 없을 경우 None이 될 수 있다.
  • MemoUpdate(BaseModel) 클래스는 BaseModel을 상속받아 수정할 수 있는 메모를 정의하며, 이 클래스 내의 두 필드인 title과 content 는 모두 선택적이다.

◆ 메모 생성 기능(Create)

@app.post("/memos")
async def create_user(memo: MemoCreate, db:Session = Depends(get_db)):
    new_memo = Memo(title = memo.title, content = memo.content)
    db.add(new_memo)
    db.commit()
    db.refresh(new_memo)
    # 새로 생성된 사용자 정보 반환
    return {"id": new_memo.id, "title": new_memo.title, "content": new_memo.content}

 

◆ 메모 조회 기능(Read)

# 메모 조회
@app.get("/memos")
async def list_memos(db: Session = Depends(get_db)):
    memos = db.query(Memo).all()
    # 리스트 내포 사용하여 전체 정보 반환
    return [{'id': memo.id, 'title': memo.title, 'content': memo.content} for memo in memos]

 

◆ 메모 수정 기능(Update)

# 메모 수정
@app.put("/memos/{memo_id}")
async def update_user(memo_id: int, memo: MemoUpdate, db: Session = Depends(get_db)):
    db_memo = db.query(memo).filter(Memo.id == memo_id).first()
    if db_memo is None:
        return {"error": "User를 찾을 수 없습니다."}
    
    # 사용자 정보 업데이트
    if memo.title is not None:
        db_memo.title = memo.title
    if memo.content is not None:
        db_memo.content = memo.content

    db.commit()
    db.refresh(db_memo)
    return {"id": db_memo.id, "title": db_memo.title, "content": db_memo.content}

 

◆ 메모 삭제 기능(Delete)

# 메모 삭제
@app.delete("/memos/{memo_id}")
async def delete_user(memo_id: int, db: Session = Depends(get_db)):
    db_memo = db.query(Memo).filter(Memo.id == memo_id).first()
    if db_memo is None:
        return {"error": "Memo를 찾을 수 없습니다."}
    db.delete(db_memo)
    db.commit()
    return {"message": "Memo가 삭제되었습니다."}

 

앞서 작성한 CRUD 기능을 구현하는 코드에 대한 설명은 하단 링크에서 보다 자세하게 확인할 수 있다.

 

[파이썬] FastAPI - SQLAlchemy와 CRUD (Depends, db.query)

이전 내용 [파이썬] FastAPI - ORM 연동하기(SQLAlchemy)이전 내용 [파이썬] FastAPI - 웹소켓이전 내용 [파이썬] FastAPI - 스트리밍 응답이전 내용 [파이썬] FastAPI - 쿼리 매개변수, 경로 매개변수, 백그라운

puppy-foot-it.tistory.com


CRUD 기능 테스트하기

 

먼저 main.py를 실행하여 서버를 실행한 뒤, POST MAN을 켜서 CRUD 기능을 테스트해 보도록 한다.

 

◆ 루트('/') 페이지에서 GET 요청

localhost:8000/ URL에서 GET 요청을 하면 home.html 이 잘 뜨는 것을 확인할 수 있다.

 

◆ 메모 생성

엔드포인트를 /memos 로 설정하고, Body에서 JSON 형태로 값을 입력한 뒤 POST 요청을 하면 메모가 잘 생성된 것을 확인해 볼 수 있다.

 

 

◆ 메모 조회

엔드포인트를 /memos 로 설정하고, GET 요청을 보내면 작성한 메모들이 조회되는 것을 확인할 수 있다.

 

◆ 메모 수정

id가 3인 메모를 영어로 바꿔보기 위해 엔드포인트 /memos/3 에서 JSON 타입으로 수정 항목(title, content)을 입력하고 PUT 요청을 하면 수정이 잘 된 것을 확인할 수 있다.

 

◆ 메모 삭제

2번 메모를 삭제하기 위해 엔드포인트 /memos/2 에서 DELETE 요청을 보내면 삭제 되었다는 메시지가 반환된다.

 

최종적으로, 앞서 진행한 수정 및 삭제 기능이 잘 구현되었는지 전체 메모를 조회해 본다.

 

CRUD 기능이 잘 구현된 것을 확인할 수 있다.

SQL Shell 에서도 테이블에 해당 데이터가 잘 생성되었는지 확인해 본다.

SELECT * FROM memo;

 

잘 생성된 것을 확인할 수 있다.


[참고]

가장 빠른 풀스택을 위한 플라스크 & FastAPI

 

https://allna.tistory.com/31


다음 내용

 

[파이썬] FastAPI - 메모 앱 프로젝트 3: 사용자 인증

이전 내용 [파이썬] FastAPI - 메모 앱 프로젝트 2: CRUD 구현이전 내용 [파이썬] FastAPI - 메모 앱 프로젝트 1: 초기 설정, DB 연동이전 내용 [파이썬] FastAPI - 성능 개선 팁이전 내용 [FastAPI] 미들웨어(middl

puppy-foot-it.tistory.com

728x90
반응형