AI 어시스턴트가 구식 FastAPI 코드를 작성하는 것을 막는 12가지 Cursor 규칙
요약
AI 코딩 어시스턴트가 구식 패턴을 사용하는 문제를 해결하기 위해 Cursor의 프로젝트 규칙(rule) 사용법과 12가지 최신 FastAPI 컨벤션을 제시합니다. Pydantic v2, 비동기 라우터 설계, 명확한 예외 처리 등 현대적인 개발 표준을 적용하는 것이 핵심입니다.
핵심 포인트
- Pydantic v2 API만 사용하여 구식 `.dict()` 사용 금지
- 라우터는 얇고 비동기여야 하며, 비즈니스 로직은 서비스 계층에 분리
- 테스트 시 SQLite 대신 실제 Postgres와 `httpx.AsyncClient`를 사용해야 함
AI 코딩 어시스턴트는 여전히 몇 년 전의 FastAPI 패턴을 사용합니다: .dict(), orm_mode, session.query(), 서비스 코드 깊은 곳에서 발생한 HTTPException, 테스트에서의 SQLite 등. 코드는 작동하지만, 오늘날 작성할 코드가 아닙니다.
Cursor의 프로젝트 규칙이 이 문제 대부분을 해결해 줍니다. 규칙(rule)이란 .cursor/rules/ 디렉터리에 있는 작은 .mdc 파일이며, glob 패턴을 사용하여 일치하는 파일을 편집할 때만 로드됩니다:
---
description: "FastAPI 라우터, 의존성 및 Pydantic v2 스키마"
globs: src/app/**/router.py,src/app/**/schemas.py,src/app/**/deps.py
...
이것들이 저에게 가장 큰 차이를 만든 12가지 컨벤션입니다.
라우터 및 스키마
-
Pydantic v2 API만 사용.
model_validate,model_dump,ConfigDict,field_validator를 사용합니다. 절대.dict(),parse_obj,orm_mode,class Config또는 v1의@validator데코레이터를 사용하지 마세요. -
라우터는 얇고 비동기(async)여야 합니다. 파싱하고, 서비스 함수를 호출하며, 스키마를 반환합니다. 라우터에는 SQL이나 비즈니스 규칙이 없어야 합니다.
-
항상
response_model(또는 반환 주석)과 명시적인status_code(생성 시 201, 삭제 시 204)를 선언해야 합니다. -
스키마는 이름이
XCreate/XUpdate/XRead여야 합니다. 입력 모델은ConfigDict(extra="forbid")을 사용하여 은밀한 ` -
서비스는
HTTPException대신 자체AppError서브클래스를 발생시키세요. 하나의 예외 핸들러가 이를{"error": {"code": ..., "message": ...}}로 매핑합니다. -
설정은 pydantic-settings 기반의 캐시된
get_settings()를 통해서만 하세요. 다른 곳에서 절대로os.environ을 읽지 말고, 비밀값은SecretStr로 유지하세요. -
f-string으로 SQL을 절대 구성하지 마세요. 바운드 파라미터(bound parameters)나
text(...).bindparams()를 사용하세요.
테스트
- **pytest + pytest-asyncio +
httpx.AsyncClient(transport=ASGITransport(app=app))**를 사용하여 실제 Postgres에 대해 테스트하고, 테스트마다 롤백을 수행하세요. 각 테스트 후에는app.dependency_overrides를 지우세요. SQLite 대체재는 사용하지 마세요.
사용하기
이러한 규칙들을 .cursor/rules/ 디렉토리에, 영역별로 하나의 파일씩, 레이아웃과 일치하는 glob을 사용하여 넣어주세요. Claude Code의 경우, 레포지토리 루트에 있는 짧은 CLAUDE.md와 동일한 관례를 따릅니다.
공개 고지: 저는 이러한 규칙들을 7개의 스코프가 지정된 .mdc 파일과 CLAUDE.md로 작성하여 FastAPI 규칙 패키지를 만들었고, codebaserules.com에서 $12에 판매하고 있습니다. 두 개의 파일은 이메일 주소 필요 없이 무료 다운로드입니다. 위에 언급된 모든 것은 아무것도 구매하지 않고도 작동합니다. 여러분이 이 중 무엇을 변경할지 듣고 싶습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기