Apidog

올인원 협업 API 개발 플랫폼

API 설계

API 문서

API 디버깅

API 모킹

API 자동화 테스트

FastAPI와 MongoDB로 강력한 API 구축하기

FastAPI와 MongoDB를 사용하여 빠르고 효율적인 API를 구축하는 방법을 배우세요. 이 포괄적인 가이드는 환경 설정부터 엔드포인트 생성 및 테스트에 이르기까지 모든 것을 다루어 견고하고 확장 가능한 애플리케이션을 개발할 수 있도록 합니다.

Young-jae

Young-jae

Updated on December 20, 2024

오늘날의 기술 중심 세계에서 빠르고 효율적이며 확장 가능한 API를 구축하는 것은 개발자에게 매우 중요합니다. 최근 인기를 얻고 있는 강력한 조합은 FastAPIMongoDB를 사용하는 것입니다. 이름에서 알 수 있듯이 FastAPI는 Python 3.7+로 API를 구축하기 위한 현대적이며 고성능의 웹 프레임워크로, 코딩과 실행이 빠릅니다. 그동안 MongoDB는 확장성과 유연성으로 알려진 NoSQL 데이터베이스입니다. 이 둘의 조합은 작은 프로젝트부터 대규모 애플리케이션까지 처리할 수 있는 강력한 API를 제공하는 솔루션을 제공합니다.

그렇다면 다음 프로젝트에 이 두 가지를 고려해야 하는 이유는 무엇일까요? 함께 알아보겠습니다!

시작하기: 환경 설정

API를 구축하기 전에 환경을 설정합시다. 시스템에 Python이 설치되어 있어야 하며 패키지 관리를 위해 pip도 필요합니다.

FastAPI 프레임워크, 높은 성능, 배우기 쉬움, 빠른 코딩, 프로덕션 준비 완료

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 애플리케이션을 설정합니다.

mongoDB 공식 웹사이트

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

  1. API에서 "프로세서 작업"을 클릭하고 "데이터베이스 작업"을 선택하세요.
API에서 "프로세서 작업" 클릭 후 "데이터베이스 작업" 선택

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

데이터베이스 연결 관리 클릭

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

MongoDB 데이터베이스 유형 선택
💡
Apidog은 데이터 보안을 중요하게 생각합니다. 데이터베이스 주소, 포트, 사용자 이름, 비밀번호, 데이터베이스 이름은 클라이언트에만 로컬로 저장되며 클라우드와 동기화되지 않습니다. 같은 팀 내에서도 데이터베이스 연결 정보가 팀원 간에 동기화되지 않습니다. 각 팀원은 데이터베이스 연결을 수동으로 설정해야 합니다.

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 형식으로 작성하면 됩니다.

예를 들어 위에서 언급한 쿼리 작업의 경우, 명령을 입력하고 "콘솔 로그"를 활성화하면 콘솔에서 조회된 문서를 볼 수 있습니다.

Apidog에서 "쿼리 조건"에 JSON으로 해당 내용을 작성

고급 명령

보다 고급 작업이 필요하다면 데이터베이스 명령을 직접 실행할 수도 있습니다. "작업 유형"에서 "데이터베이스 명령 실행"을 선택하고 데이터베이스 명령을 JSON 형식으로 입력하세요. 데이터베이스 명령은 db.collection.findOne()와 같은 메서드 호출을 참조하는 것이 아니라 특정 형식의 JSON 데이터를 참조합니다.

예를 들어 사용자의 컬렉션에 있는 문서 수를 쿼리하려면 count 데이터베이스 명령을 사용할 수 있습니다:

{    "count": "users"}

명령을 입력한 후 결과를 콘솔에서 확인할 수 있습니다.

데이터베이스 명령 실행

API 테스트하기

API를 테스트하기 위해 Postman이나 Apidog와 같은 도구를 사용할 수 있습니다. 이러한 도구는 엔드포인트에 요청을 보내고 응답을 확인할 수 있게 하여 디버깅을 간편하게 하고 모든 것이 올바르게 작동하는지 확인합니다.

테스트를 위한 Apidog 사용하기

Apidog는 API를 생성하고 테스트하며 관리하는 과정을 간소화해주는 강력한 API 개발 및 테스트 도구입니다. FastAPI MongoDB 애플리케이션을 테스트하기 위해 Apidog을 사용하는 방법은 다음과 같습니다:

  1. 새 프로젝트 만들기: Apidog 클라이언트를 열고 Apidog에서 새 프로젝트를 만듭니다.
Apidog에서 새 프로젝트 만들기

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

Apidog에서 엔드포인트 추가

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

Apidog에서 요청 보내기

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

Apidog에서 응답 검증하기

결론

이 튜토리얼에서는 FastAPI 애플리케이션을 MongoDB와 설정하는 기본 사항을 다루었습니다. 항목을 생성, 검색, 업데이트 및 삭제할 수 있는 간단한 재고 API를 만들었습니다. FastAPI의 속도와 사용의 용이성, MongoDB의 유연성과 확장성은 강력한 API를 구축하기 위한 완벽한 조합을 만들어 줍니다.

Apidog와 같은 도구를 활용하면 개발 및 테스트 과정을 간소화하여 API가 신뢰할 수 있고 성능이 뛰어나다는 것을 보장할 수 있습니다.

그럼, 무엇을 기다리고 있나요? FastAPI와 MongoDB에 뛰어들고 오늘 즉시 놀라운 API를 구축해 보세요!

EXAONE 3.0 7.8B 모델을 로컬에서 실행하는 방법튜토리얼

EXAONE 3.0 7.8B 모델을 로컬에서 실행하는 방법

이 글에서는 EXAONE 3.0 7.8B 모델을 자신의 컴퓨터에서 설치하고 실행하는 방법을 단계별로 상세히 알아보겠습니다

Young-jae

March 25, 2025

Claude 3.7 소넷 API에 접근하고 Apidog을 사용하여 테스트하는 방법튜토리얼

Claude 3.7 소넷 API에 접근하고 Apidog을 사용하여 테스트하는 방법

Anthropic의 최신 출시인 Claude 3.7 Sonnet에 대해 기대하고 있으며, Apidog로 테스트하면서 API를 통한 기능을 탐색하고 싶다면, 올바른 장소에 오신 것입니다. 💡시작하기 전에 간단한 팁을 드리겠습니다: 오늘 Apidog를 무료로 다운로드하여 API 테스트 프로세스를 간소화하세요. 특히 Claude 3.7 Sonnet의 강력한 기능을 탐색하는 데 적합한 도구로, 최첨단 AI 모델을 테스트하려는 개발자에게 이상적입니다!버튼 Claude 3.7 Sonnet이 중요한 이유로 시작해봅시다. Anthropic은 최근 2025년 2월 24일에 이 모델을 공개했으며, 즉시 및 단계별 응답을 위한 하이브리드 추론 기능을 갖춘 가장 지능적인 창작물로 자리 잡았습니다. 이는 코딩, 추론 등 여러 부분에서 혁신적인 변화를 가져오며, 현재 e Anthropic API, Amazon Bedrock, Google Cloud의 Vertex AI를 통해 사용할 수 있습니다. 이 튜

Young-jae

February 25, 2025

GitHub Copilot 무료: 어떻게 시작하나요?튜토리얼

GitHub Copilot 무료: 어떻게 시작하나요?

GitHub Copilot 무료 사용법을 알아보세요. 이 AI 기반 코딩 도우미에 대한 이 가이드는 VS Code와 JetBrains와 같은 인기 IDE의 설정 단계를 다루며, 무료로 스마트한 코드 제안 및 완성을 통해 생산성을 높일 수 있도록 도와줍니다!

Young-jae

December 19, 2024