Use Cases

Claude Code로 Python 개발 효율 높이기

FastAPI 앱, 데이터 처리 스크립트, pytest 테스트까지 Claude Code로 Python 개발을 가속하는 실전 가이드입니다.

Python 개발에서 Claude Code 활용하기

Claude Code는 TypeScript뿐 아니라 Python 개발에서도 위력을 발휘합니다. FastAPI 기반 웹 개발, 데이터 처리 스크립트, 테스트 생성까지 폭넓게 대응할 수 있습니다.

FastAPI 애플리케이션 구축

> FastAPI로 사용자 관리 API를 만들어줘.
> - Pydantic으로 유효성 검사
> - SQLAlchemy + asyncpg로 DB 연결
> - CRUD 엔드포인트
> - JWT 인증
from fastapi import FastAPI, HTTPException, Depends
from pydantic import BaseModel, EmailStr
from sqlalchemy.ext.asyncio import AsyncSession
from datetime import datetime

app = FastAPI(title="User Management API")

class UserCreate(BaseModel):
    email: EmailStr
    name: str
    password: str

    class Config:
        json_schema_extra = {
            "example": {
                "email": "user@example.com",
                "name": "홍길동",
                "password": "securepassword123",
            }
        }

class UserResponse(BaseModel):
    id: str
    email: str
    name: str
    is_active: bool
    created_at: datetime

    class Config:
        from_attributes = True

@app.post("/users", response_model=UserResponse, status_code=201)
async def create_user(
    user_data: UserCreate,
    db: AsyncSession = Depends(get_db),
):
    existing = await get_user_by_email(db, user_data.email)
    if existing:
        raise HTTPException(status_code=409, detail="Email address is already registered")

    hashed = hash_password(user_data.password)
    user = await create_user_in_db(db, user_data, hashed)
    return user

@app.get("/users/{user_id}", response_model=UserResponse)
async def get_user(
    user_id: str,
    db: AsyncSession = Depends(get_db),
):
    user = await get_user_by_id(db, user_id)
    if not user:
        raise HTTPException(status_code=404, detail="User not found")
    return user

데이터 처리 스크립트 생성

pandas나 polars를 사용한 데이터 처리도 Claude Code로 빠르게 작성할 수 있습니다.

> CSV 파일을 읽어 다음 처리를 수행하는 스크립트를 만들어줘.
> - 결측치 보완(숫자는 중앙값, 문자열은 "불명")
> - 날짜 컬럼 파싱
> - 매출을 월 단위로 집계
> - 결과를 Excel로 출력
import polars as pl
from pathlib import Path

def process_sales_data(input_path: str, output_path: str) -> None:
    df = pl.read_csv(input_path)

    # 결측치 보완
    numeric_cols = [c for c in df.columns if df[c].dtype in [pl.Float64, pl.Int64]]
    string_cols = [c for c in df.columns if df[c].dtype == pl.Utf8]

    for col in numeric_cols:
        median_val = df[col].median()
        df = df.with_columns(pl.col(col).fill_null(median_val))

    for col in string_cols:
        df = df.with_columns(pl.col(col).fill_null("불명"))

    # 날짜 파싱 및 월 단위 집계
    df = df.with_columns(
        pl.col("date").str.to_date("%Y-%m-%d").alias("date_parsed")
    )

    monthly = (
        df.group_by(pl.col("date_parsed").dt.truncate("1mo"))
        .agg([
            pl.col("amount").sum().alias("total_sales"),
            pl.col("amount").mean().alias("avg_sales"),
            pl.col("amount").count().alias("transaction_count"),
        ])
        .sort("date_parsed")
    )

    monthly.write_excel(output_path)
    print(f"처리 완료: {len(monthly)}개월 분량의 데이터를 출력했습니다")

if __name__ == "__main__":
    process_sales_data("sales.csv", "monthly_report.xlsx")

pytest 테스트 생성

> process_sales_data 함수의 테스트를 pytest로 만들어줘.
> 픽스처로 임시 CSV를 생성하는 패턴으로.
import pytest
import polars as pl
from pathlib import Path
from process_sales import process_sales_data

@pytest.fixture
def sample_csv(tmp_path: Path) -> Path:
    csv_path = tmp_path / "test_sales.csv"
    csv_path.write_text(
        "date,product,amount\n"
        "2026-01-15,상품A,1000\n"
        "2026-01-20,상품B,2000\n"
        "2026-02-10,상품A,1500\n"
        "2026-02-15,,\n"
    )
    return csv_path

def test_process_creates_output(sample_csv: Path, tmp_path: Path):
    output = tmp_path / "output.xlsx"
    process_sales_data(str(sample_csv), str(output))
    assert output.exists()

def test_monthly_aggregation(sample_csv: Path, tmp_path: Path):
    output = tmp_path / "output.xlsx"
    process_sales_data(str(sample_csv), str(output))
    result = pl.read_excel(output)
    assert len(result) == 2  # 1월과 2월

def test_null_handling(sample_csv: Path, tmp_path: Path):
    output = tmp_path / "output.xlsx"
    process_sales_data(str(sample_csv), str(output))
    result = pl.read_excel(output)
    # 결측치가 보완되어 집계에 포함되어 있음
    assert result["transaction_count"].sum() == 4

테스트 전체 설계에 대해서는 테스트 전략 완전 가이드에서 다루고 있습니다.

타입 힌트 추가

기존 Python 코드에 타입 힌트를 추가하게 할 수도 있습니다.

> src/ 아래 Python 파일에 타입 힌트를 추가해줘.
> mypy --strict 체크가 통과되도록.

CLAUDE.md에 Python 규칙 설정

## Python 개발 규칙
- Python 3.12 이상 대상
- 타입 힌트는 반드시 작성
- 포매터는 ruff format, 린터는 ruff check
- 테스트는 pytest, 커버리지 80% 이상

API 개발 패턴은 API 개발 가속 가이드, CLAUDE.md 작성법은 CLAUDE.md 작성 가이드도 함께 참고하세요.

정리

Claude Code는 Python 개발에서도 높은 생산성을 발휘합니다. FastAPI 앱, 데이터 처리, 테스트 생성까지 스펙을 명확하게 전달하면 품질 높은 코드가 만들어집니다.

자세한 내용은 Python 공식 문서Anthropic 공식 문서를 참고하세요.

#Claude Code #Python #FastAPI #데이터 처리 #backend

Claude Code 워크플로우를 한 단계 업그레이드하세요

지금 바로 Claude Code에 복사해 쓸 수 있는 검증된 프롬프트 템플릿 50선.

무료 제공

무료 PDF: 5분 완성 Claude Code 치트시트

주요 명령어, 단축키, 프롬프트 예시를 A4 한 장에 정리했습니다.

PDF 다운로드
M

이 글을 작성한 사람

Masa

Claude Code를 적극 활용하는 엔지니어. 10개 언어, 2,000페이지 이상의 테크 미디어 claudecode-lab.com을 운영 중.