CRUD 작업은 데이터 저장 및 검색과 관련된 모든 웹 응용 프로그램에서 필수적입니다. 이러한 작업은 사용자가 새 기록을 만들고, 기존 기록을 검색하고, 기존 기록을 업데이트하고, 데이터베이스에서 기록을 삭제할 수 있게 해줍니다.
FastAPI는 API 엔드포인트를 쉽게 정의하고 HTTP 요청을 처리할 수 있는 간단하고 직관적인 방법을 제공하여 CRUD 작업을 쉽게 구현할 수 있게 해줍니다. Python의 타입 힌트를 활용하여 대화형 API 문서를 자동으로 생성하고 데이터 유효성 검사를 수행하여 강력하고 잘 문서화된 API 구축을 위한 강력한 도구입니다.

이번 포스트에서는 FastAPI로 CRUD 작업을 신속하게 구현하는 방법을 탐구해보겠습니다. FastAPI와 데이터베이스를 설정하는 것부터 시작하여 그 다음 CRUD 작업을 위한 API 엔드포인트를 생성할 것입니다. 생성, 읽기, 업데이트 및 삭제 작업의 구현과 이러한 작업의 테스트 및 유효성 검사도 다룰 것입니다. 자, 시작해 보도록 하죠! FastAPI와 CRUD 작업의 세계로 뛰어들어 봅시다!
FastAPI에서 CRUD란 무엇인가요?
FastAPI에서 CRUD는 데이터베이스나 데이터 저장 시스템에서 수행할 수 있는 기본 작업을 의미합니다. CRUD는 Create(생성), Read(읽기), Update(업데이트), Delete(삭제)의 약자로, 대부분의 응용 프로그램에서 데이터를 관리하는 데 필수적인 기본 기능을 나타냅니다.

다음은 FastAPI에서 CRUD 작업에 대한 자세한 설명입니다:
- Create (C): 이 작업은 데이터베이스에 새로운 데이터를 추가하는 것입니다. FastAPI에서는 적절한 엔드포인트에 POST 요청을 보내 데이터를 생성할 수 있습니다. 예를 들어, 시스템에 새 사용자를 추가하기 위해 해당 사용자 세부정보를 요청 본문에 담아 사용자 생성 엔드포인트에 POST 요청을 보냅니다.
- Read (R): 읽기 작업은 데이터베이스에서 기존 데이터를 검색하는 것입니다. FastAPI에서는 GET 요청을 사용하여 읽기 작업을 수행할 수 있습니다. 예를 들어, 모든 사용자 또는 특정 사용자의 세부정보를 검색하고자 할 때 해당 엔드포인트에 GET 요청을 보냅니다.
- Update (U): 이 작업은 데이터베이스의 기존 데이터를 수정할 수 있게 해줍니다. FastAPI에서는 PUT 또는 PATCH 요청을 사용하여 데이터를 업데이트할 수 있습니다. PUT 요청은 전체 리소스를 업데이트하는 데 사용되며, PATCH는 리소스의 특정 필드를 수정하는 데 사용됩니다. 예를 들어, 사용자의 정보를 업데이트하려면 업데이트된 세부정보와 함께 사용자 엔드포인트에 PUT 또는 PATCH 요청을 보냅니다.
- Delete (D): 삭제 작업은 데이터베이스에서 데이터를 제거하는 것입니다. FastAPI에서는 DELETE 요청을 사용하여 데이터를 삭제할 수 있습니다. 예를 들어, 시스템에서 사용자를 삭제하려면 사용자의 식별자 또는 고유 키와 함께 사용자 엔드포인트에 DELETE 요청을 보냅니다.
FastAPI로 CRUD 작업을 빠르게 만드는 방법
FastAPI로 CRUD 기능을 구현하려면 다음 단계를 따라주세요:
단계 1: FastAPI 설치: 시스템에 Python이 설치되어 있는지 확인하고, 명령줄에서 다음 명령을 실행하여 FastAPI를 설치합니다:
pip install fastapi
단계 2: FastAPI 애플리케이션 생성: 새 Python 파일(예: main.py)을 만들고 필요한 모듈과 라이브러리를 가져옵니다:
from fastapi import FastAPI
from pydantic import BaseModel
from typing import List
app = FastAPI()
단계 3: 데이터 모델 정의: Pydantic을 사용하여 데이터 모델을 정의합니다. 예:
class Item(BaseModel):
id: int
name: str
price: float
단계 4: CRUD 경로 및 핸들러 생성: FastAPI를 사용하여 CRUD 작업을 위한 경로와 해당 처리 기능을 생성합니다. 예를 들면 다음과 같습니다:
items = []
@app.get("/items", response_model=List[Item])
async def read_items():
return items
@app.post("/items", response_model=Item)
async def create_item(item: Item):
items.append(item)
return item
@app.put("/items/{item_id}", response_model=Item)
async def update_item(item_id: int, item: Item):
items[item_id] = item
return item
@app.delete("/items/{item_id}")
async def delete_item(item_id: int):
del items[item_id]
return {"message": "아이템 삭제됨"}
단계 5: 애플리케이션 실행: FastAPI 애플리케이션을 실행하고 APIRouter 기능을 테스트하려면 uvicorn과 같은 ASGI 서버를 사용합니다. uvicorn이 설치되어 있는지 확인하세요:
pip install uvicorn
IDE 편집기에서 터미널을 열고 main.py 파일이 저장된 디렉터리로 이동한 다음 애플리케이션을 시작하기 위해 다음 명령을 실행합니다:
uvicorn main:app --reload
이 명령은 FastAPI 애플리케이션을 기본 포트(보통 8000)에서 자동 재로드 기능과 함께 시작합니다. 코드 변경 시 애플리케이션이 자동으로 다시 로드됩니다.
단계 6: CRUD 작업 테스트
HTTP 클라이언트 도구(예: cURL 또는 Apidog)를 사용하여 요청을 보내고 생성, 읽기, 업데이트 및 삭제 기능을 테스트합니다. 다음은 몇 가지 예제 요청입니다:
- 새 아이템 생성: POST 요청 본문과 함께 새 아이템을 생성합니다.
POST http://localhost:8000/items
{
"id": 1,
"name": "사과",
"price": 0.5
}

- 모든 아이템 가져오기: GET 요청을 보내 모든 아이템을 검색합니다.
GET http://localhost:8000/items

- 아이템 업데이트: 요청 본문과 함께 PUT 요청을 보내 아이템을 업데이트합니다.
GET http://localhost:8000/items

- 아이템 삭제: DELETE 요청을 보내 아이템을 삭제합니다.
DELETE http://localhost:8000/items/1

마지막으로, 우리는 Apidog에서 삭제 작업에 대한 테스트를 작성할 수 있습니다. 삭제 엔드포인트에 대한 DELETE 요청을 시뮬레이션하고 응답 상태 코드가 200(성공적인 삭제를 나타냄)인지 확인할 수 있습니다. 그 후, 데이터베이스에서 삭제된 데이터를 검색하려고 해보고 그것이 존재하지 않음을 확인할 수 있습니다.
이러한 테스트를 작성함으로써 우리의 CRUD 작업이 올바르게 작동하고, 잘못된 입력이나 존재하지 않는 데이터와 같은 다양한 시나리오를 처리할 수 있도록 할 수 있습니다.
추가 팁
코드 자동 완성, 오류 검사 및 디버깅 기능을 통해 개발 효율성을 개선하기 위해 Visual Studio Code와 같은 IDE 지원을 사용하세요.
- FastAPI를 사용할 때, 코드 자동 완성, 오류 검사 및 디버깅 기능을 활용하여 Visual Studio Code와 같은 IDE 지원을 사용하여 개발 효율성을 개선하세요.
- 경로와 핸들러 기능을 서로 다른 모듈로 분리하여 코드베이스를 정리하여 유지 관리성과 확장성을 촉진하세요. 성능과 동시성 기능을 향상시키기 위해 FastAPI의 비동기 지원을 활용하세요.
- 적절한 인증 및 권한 부여 메커니즘으로 API 보안을 보장하세요. Pydantic 모델을 사용하여 데이터 유효성 검사 및 직렬화를 통해 데이터 일관성을 유지하고 오류를 효과적으로 처리하세요. 필요한 경우 크로스-오리진 리소스 공유를 위해 CORS를 구현하세요.
- API 신뢰성과 기능을 보장하기 위해 포괄적인 단위 및 통합 테스트를 생성하세요. FastAPI의 예외 처리 및 사용자 지정 오류 응답을 통해 오류를 우아하게 처리하세요. 성능을 모니터링하고 로그 및 프로파일러를 사용하고 FastAPI와 그 의존성을 최신 상태로 유지하여 버그 수정 및 새로운 기능을 제공합니다.
이러한 관행을 따르면 FastAPI로 강력하고 효율적인 API를 개발하고 개발 및 배포 프로세스를 간소화할 수 있습니다.