Chapter 3-1 미팅 생성 API 스펙 만들기

2025. 5. 27. 10:00·Fastapi

✅ 미팅 생성 API 스펙 만들기

1. 🎯 목표: "미팅 생성" API 스펙 정의 및 더미 응답 제공

  • 프론트엔드가 빠르게 연동할 수 있도록 먼저 API 스펙 + 더미 데이터 반환부터 구성합니다.
  • 실무에서는 실제 로직 구현보다 먼저 스펙 정의가 중요합니다.

2. 🧱 기본 FastAPI 앱 구조 세팅

📁 디렉터리 구성

app/
  __init__.py
  apis/v1/meeting_router.py
  dtos/create_meeting_response.py
  dtos/frozen_config.py
asgi.py

📌 app/init.py

from fastapi import FastAPI
from fastapi.responses import ORJSONResponse
from app.apis.v1.meeting_router import edgedb_router, mysql_router

app = FastAPI(default_response_class=ORJSONResponse)
app.include_router(edgedb_router)
app.include_router(mysql_router)

▶️ asgi.py

from app import app

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

🧪 main.py는 삭제하여 불필요한 파일 정리.


3. ⚡ 왜 ORJSON? 

  • GitHub 저장소: https://github.com/ijl/orjsonPyPI+6yepcode.io+6GitHub+6
  • poetry add orjson==3.10.12 
  • FastAPI의 응답 속도 향상을 위해 orjson 적용.
  • orjson은 기본 json보다 최대 6배 이상 빠름.

🧪 성능 비교 테스트 코드

import timeit, json, orjson
TWITTER_JSON = """긴 JSON 문자열"""

print(timeit.timeit(lambda: json.dumps(TWITTER_JSON)))
print(timeit.timeit(lambda: orjson.dumps(TWITTER_JSON)))

✅ 실제 결과: 기본 json 18.64s vs orjson 3.29s (Mac 기준)


4. 🧩 DTO 정의 (응답 모델)

📄 app/dtos/frozen_config.py

from pydantic import ConfigDict
FROZEN_CONFIG = ConfigDict(frozen=True)

📄 app/dtos/create_meeting_response.py

from typing import Annotated
from pydantic import BaseModel, Field
from app.dtos.frozen_config import FROZEN_CONFIG

class CreateMeetingResponse(BaseModel):
    model_config = FROZEN_CONFIG
    url_code: Annotated[str, Field(description="회의 URL 코드. unique 합니다.")]

5. 🛠️ Router 정의

📄 app/apis/v1/meeting_router.py

from fastapi import APIRouter
from app.dtos.create_meeting_response import CreateMeetingResponse

edgedb_router = APIRouter(prefix="/v1/edgedb/meetings", tags=["Meeting"], redirect_slashes=False)
mysql_router = APIRouter(prefix="/v1/mysql/meetings", tags=["Meeting"], redirect_slashes=False)

@edgedb_router.post("", description="meeting 을 생성합니다.")
async def api_create_meeting_edgedb() -> CreateMeetingResponse:
    return CreateMeetingResponse(url_code="abc")

@mysql_router.post("", description="meeting 을 생성합니다.")
async def api_create_meeting_mysql() -> CreateMeetingResponse:
    return CreateMeetingResponse(url_code="abc")

💡 강의용 예제에서는 DB 이름을 URL에 명시했지만, 실제 서비스에서는 지양해야 합니다.


6. 🧪 Swagger로 확인

  • asgi.py 실행 후 http://localhost:8000/docs 접속
  • edgedb와 mysql용 meeting 생성 API 자동 문서화 확인 가능

🧠 정리

구성 요소 설명

FastAPI 웹 프레임워크
ORJSON 빠른 JSON 직렬화 도구
Router API 경로 분기 처리
DTO 응답 데이터 스키마 명시
Swagger 자동 문서화 확인 UI

👉 이렇게 스펙을 먼저 만들면 프론트엔드 작업 병행 가능하고, 실제 DB 구현 전 테스트도 용이합니다.

'Fastapi' 카테고리의 다른 글

Chapter 3-3 고유하고 짧은 alphanumeric 식별자 만들기 – Base62 접근 방식  (0) 2025.05.27
Chapter 3-4 Base62 디버깅과 디버깅 스킬의 중요성  (0) 2025.05.27
Chapter 2-6 Github Action 설정 및 캐싱 가이드  (0) 2025.05.23
Chapter 2-5 테스트 스크립트 작성 가이드  (0) 2025.05.23
Chapter 2-4 자동화 테스트가 필요한 이유  (0) 2025.05.23
'Fastapi' 카테고리의 다른 글
  • Chapter 3-3 고유하고 짧은 alphanumeric 식별자 만들기 – Base62 접근 방식
  • Chapter 3-4 Base62 디버깅과 디버깅 스킬의 중요성
  • Chapter 2-6 Github Action 설정 및 캐싱 가이드
  • Chapter 2-5 테스트 스크립트 작성 가이드
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (727) N
      • Python (32)
      • 프로젝트 (55) N
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41) N
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (153)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5) N
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (10) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    hotcoffeecase
    globaleconomy
    bts
    basalcellcarcinoma
    classaction
    chansmannewspick
    foodshortage
    japanricecrisis
    americaparty
    btsreunion
    urbantrends
    뷔제대
    chinanightlife
    lawsuitculture
    livebroadcast
    뷔전역
    뷔
    galaxys25ultra
    smartphonedurability
    titaniumcase
    newpoliticalparty
    homebartrend
    youngprofessionals
    americanlaw
    trumpmuskclash
    skincancerawareness
    RM
    militarydischarge
    evoo
    oliveoilhealth
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
Chapter 3-1 미팅 생성 API 스펙 만들기
상단으로

티스토리툴바