오늘날의 기술 중심 세계에서 빠르고 효율적이며 확장 가능한 API를 구축하는 것은 개발자에게 매우 중요합니다. 최근 인기를 얻고 있는 강력한 조합은 FastAPI와 MongoDB를 사용하는 것입니다. 이름에서 알 수 있듯이 FastAPI는 Python 3.7+로 API를 구축하기 위한 현대적이며 고성능의 웹 프레임워크로, 코딩과 실행이 빠릅니다. 그동안 MongoDB는 확장성과 유연성으로 알려진 NoSQL 데이터베이스입니다. 이 둘의 조합은 작은 프로젝트부터 대규모 애플리케이션까지 처리할 수 있는 강력한 API를 제공하는 솔루션을 제공합니다.
그렇다면 다음 프로젝트에 이 두 가지를 고려해야 하는 이유는 무엇일까요? 함께 알아보겠습니다!
시작하기: 환경 설정
API를 구축하기 전에 환경을 설정합시다. 시스템에 Python이 설치되어 있어야 하며 패키지 관리를 위해 pip도 필요합니다.

1단계: FastAPI 및 Uvicorn 설치
먼저 FastAPI를 설치합시다. 터미널을 열고 다음 명령어를 실행하세요:
pip install fastapi
다음으로, FastAPI 애플리케이션을 제공할 Python용 ASGI 서버 구현체인 Uvicorn을 설치하겠습니다:
pip install uvicorn
2단계: Motor 설치
Motor는 FastAPI와 원활하게 작동하는 MongoDB의 비동기 드라이버입니다. 설치하려면 다음을 실행하세요:
pip install motor
좋아요! 이제 코딩을 시작하는 데 필요한 모든 것이 준비되었습니다.
첫 번째 FastAPI 애플리케이션 생성
이제 기본 FastAPI 애플리케이션을 만들고 이를 MongoDB에 연결합시다.
1단계: FastAPI 앱 초기화
새 Python 파일을 만들고 (이름을 main.py
로 정합시다) FastAPI를 임포트하고 앱을 초기화합니다:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"message": "MongoDB 튜토리얼 FastAPI에 오신 것을 환영합니다!"}
이 코드는 단일 엔드포인트를 가진 기본 FastAPI 애플리케이션을 설정합니다.

2단계: MongoDB에 연결하기
다음으로 Motor를 사용하여 FastAPI 애플리케이션을 MongoDB에 연결합시다. 데이터베이스 연결을 관리하기 위해 database.py
라는 새 파일을 만듭니다.
from motor.motor_asyncio import AsyncIOMotorClient
MONGO_DETAILS = "mongodb://localhost:27017"
client = AsyncIOMotorClient(MONGO_DETAILS)
database = client.mydatabase
이 예제에서는 로컬에서 실행 중인 MongoDB 인스턴스에 연결합니다. 시스템에 MongoDB가 설치되고 실행되고 있는지 확인하세요.
3단계: Pydantic 모델 정의하기
Pydantic 모델은 데이터 구조를 정의하고 FastAPI에서 데이터 유효성을 보장하는 좋은 방법입니다. models.py
파일을 만듭니다:
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: str
price: float
available: bool = True
이 모델은 재고에 있는 항목의 구조를 정의합니다.

API 엔드포인트 생성하기
기본 설정이 완료되었으니 이제 MongoDB 데이터베이스와 상호작용할 API 엔드포인트를 생성합시다.
1단계: 항목 컬렉션 생성
먼저 MongoDB 데이터베이스에 항목을 저장할 컬렉션이 필요합니다. main.py
에서 데이터베이스에 새 항목을 추가하는 엔드포인트를 생성합시다:
from fastapi import FastAPI, HTTPException
from database import database
from models import Item
from bson import ObjectId
app = FastAPI()
@app.post("/items/")
async def create_item(item: Item):
item_dict = item.dict()
result = await database["items"].insert_one(item_dict)
item_dict["_id"] = str(result.inserted_id)
return item_dict
이 엔드포인트는 MongoDB 컬렉션에 새 항목을 생성할 수 있도록 해줍니다. 삽입된 ID를 가독성을 위해 문자열로 변환하는 점에 주목하세요.
2단계: 항목 검색하기
다음으로, 데이터베이스에서 모든 항목을 검색하는 엔드포인트를 생성하겠습니다:
@app.get("/items/")
async def get_items():
items = await database["items"].find().to_list(1000)
for item in items:
item["_id"] = str(item["_id"])
return items
이 엔드포인트는 items
컬렉션에서 모든 항목을 가져오고 IDs를 문자열로 변환합니다.
3단계: 단일 항목 검색하기
ID로 단일 항목을 검색하기 위해 다른 엔드포인트를 추가하겠습니다:
@app.get("/items/{item_id}")
async def get_item(item_id: str):
item = await database["items"].find_one({"_id": ObjectId(item_id)})
if item:
item["_id"] = str(item["_id"])
return item
raise HTTPException(status_code=404, detail="항목을 찾을 수 없습니다.")
이 엔드포인트는 ID로 항목을 검색하고 반환하며, 항목이 존재하지 않을 경우 404 오류를 발생시킵니다.
4단계: 항목 업데이트하기
항목 업데이트는 FastAPI와 Motor로 간단합니다. ID로 항목을 업데이트하는 코드를 추가합니다:
@app.put("/items/{item_id}")
async def update_item(item_id: str, item: Item):
result = await database["items"].update_one(
{"_id": ObjectId(item_id)}, {"$set": item.dict()}
)
if result.modified_count == 1:
updated_item = await database["items"].find_one({"_id": ObjectId(item_id)})
updated_item["_id"] = str(updated_item["_id"])
return updated_item
raise HTTPException(status_code=404, detail="항목을 찾을 수 없습니다.")
이 엔드포인트는 ID로 항목을 업데이트하고 업데이트된 항목을 반환합니다.
5단계: 항목 삭제하기
마지막으로, ID로 항목을 삭제하는 엔드포인트를 추가하겠습니다:
@app.delete("/items/{item_id}")
async def delete_item(item_id: str):
result = await database["items"].delete_one({"_id": ObjectId(item_id)})
if result.deleted_count == 1:
return {"message": "항목이 삭제되었습니다."}
raise HTTPException(status_code=404, detail="항목을 찾을 수 없습니다.")
이 엔드포인트는 항목을 삭제하고 성공 메시지를 반환하며, 항목을 찾을 수 없는 경우 404 오류를 발생시킵니다.
MongoDB 데이터베이스에 연결하는 방법 to Apidog
- API에서 "프로세서 작업"을 클릭하고 "데이터베이스 작업"을 선택하세요.

2. "데이터베이스 연결 관리"를 클릭하고 상단 오른쪽에서 "새로 만들기" 버튼을 클릭하세요.

3. MongoDB 데이터베이스 유형을 선택한 후에 해당 연결 정보를 입력하세요.

MongoDB 데이터베이스 운영하기
MongoDB는 데이터를 BSON 문서 형식으로 저장합니다. 대부분 사용자 사용 습관의 편의를 위해 Apidog에서 MongoDB 데이터베이스를 수정할 때는 JSON 형식 파일을 제출합니다. 시스템은 JSON의 실제 내용을 기반으로 각 필드를 해당 BSON 데이터 유형으로 자동 매핑합니다.
그 중 _id
필드는 상대적으로 특별합니다. MongoDB 사양에 따르면 각 문서는 기본 키로써 _id
필드를 가져야 하며, 이 필드의 기본 데이터 유형은 ObjectId
이고 String
이 아닙니다.
만약 ObjectId
유형의 _id
필드를 선언해야 한다면 일반적인 문자열 형식을 사용할 수 있습니다. 문자열 내용이 ObjectId
형식에 부합하면 Apidog이 자동으로 BSON의 ObjectId
유형으로 매핑합니다.
현재 MongoDB에 다음과 같은 BSON 문서가 있다고 가정합시다:
{ _id: ObjectId('6569a36afcf5ee79c08d2f94'), name: "Apidog"}
따라서 Apidog을 사용하여 _id
를 통해 문서를 조회할 때 "쿼리 조건"에 입력해야 할 JSON 값은:
{ "_id": "6569a36afcf5ee79c08d2f94" }
일반 작업
일반적인 CRUD 작업에 대해서는 시각적 API 작업을 통해 지원합니다. JavaScript 코드를 작성할 필요 없이 "작업 유형"에서 작업을 지정하고, "컬렉션 이름"을 지정한 후 "쿼리 조건"에 해당 내용을 JSON 형식으로 작성하면 됩니다.
예를 들어 위에서 언급한 쿼리 작업의 경우, 명령을 입력하고 "콘솔 로그"를 활성화하면 콘솔에서 조회된 문서를 볼 수 있습니다.

고급 명령
보다 고급 작업이 필요하다면 데이터베이스 명령을 직접 실행할 수도 있습니다. "작업 유형"에서 "데이터베이스 명령 실행"을 선택하고 데이터베이스 명령을 JSON 형식으로 입력하세요. 데이터베이스 명령은 db.collection.findOne()
와 같은 메서드 호출을 참조하는 것이 아니라 특정 형식의 JSON 데이터를 참조합니다.
예를 들어 사용자의 컬렉션에 있는 문서 수를 쿼리하려면 count
데이터베이스 명령을 사용할 수 있습니다:
{ "count": "users"}
명령을 입력한 후 결과를 콘솔에서 확인할 수 있습니다.

API 테스트하기
API를 테스트하기 위해 Postman이나 Apidog와 같은 도구를 사용할 수 있습니다. 이러한 도구는 엔드포인트에 요청을 보내고 응답을 확인할 수 있게 하여 디버깅을 간편하게 하고 모든 것이 올바르게 작동하는지 확인합니다.
테스트를 위한 Apidog 사용하기
Apidog는 API를 생성하고 테스트하며 관리하는 과정을 간소화해주는 강력한 API 개발 및 테스트 도구입니다. FastAPI MongoDB 애플리케이션을 테스트하기 위해 Apidog을 사용하는 방법은 다음과 같습니다:
- 새 프로젝트 만들기: Apidog 클라이언트를 열고 Apidog에서 새 프로젝트를 만듭니다.

2 엔드포인트 추가: 생성한 엔드포인트(/items/
, /items/{item_id}
등)를 프로젝트에 추가합니다.

3. 요청 보내기: 도구를 사용하여 엔드포인트에 GET, POST, PUT 및 DELETE 요청을 보내고 응답을 관찰합니다.

4. 응답 검증하기: 응답이 예상 출력과 일치하는지 확인하고 상세 오류 메시지를 사용하여 문제를 수정합니다.

결론
이 튜토리얼에서는 FastAPI 애플리케이션을 MongoDB와 설정하는 기본 사항을 다루었습니다. 항목을 생성, 검색, 업데이트 및 삭제할 수 있는 간단한 재고 API를 만들었습니다. FastAPI의 속도와 사용의 용이성, MongoDB의 유연성과 확장성은 강력한 API를 구축하기 위한 완벽한 조합을 만들어 줍니다.
Apidog와 같은 도구를 활용하면 개발 및 테스트 과정을 간소화하여 API가 신뢰할 수 있고 성능이 뛰어나다는 것을 보장할 수 있습니다.
그럼, 무엇을 기다리고 있나요? FastAPI와 MongoDB에 뛰어들고 오늘 즉시 놀라운 API를 구축해 보세요!