Loading...

바이브코딩

MCP를 사용하여 기술적 부채가 없는 코드 작성하기

페이지 정보

작성자 바이브입니다만
작성일 2025.10.16 12:21
260 조회
0 추천
0 비추천

본문

AI 도구 claude, cursor, context7

개발자라면 다들 비슷한 경험을 하는 분들이 많을 것입니다.

"몇 달 전까지 개발망에서 완벽하게 작동하던 코드가 라이브러리 업데이트 후 갑자기 deprecated 경고를 뿜어내기 시작합니다."

어느순간 전체 코드베이스를 리팩토링해야 하는 상황이 필요합니다. 특히 Python이나 Spring 처럼 빠르게 발전하는 라이브러리를 사용할 때는 더욱 그렇습니다.

똑똑한 AI가 오히려 멍청해지는 순간

최근 개발 현장에서 AI 코드 어시스턴트들이 급속히 보급되고 있습니다. ChatGPT, Claude, GitHub Copilot 등이 개발자의 일상을 바꿔놓고 있죠. 하지만 여기에는 치명적인 함정이 하나 있습니다. AI는 똑똑하지만 최신 정보를 모른다는 것입니다.

이를 해결하기 위해 Rag이나 기타 검색엔진이 연동된 Agent를 통해서 일부 해결하지만 실제 개발에 특화된 검색이 필요한 경우가 많습니다.

아래는 실제 Python으로 간단하게 테스트해본 결과입니다

사용하는 모델 및 AI 도구 및 시스템 프롬프트에 따라 중간 출력값과 결과는 다를수 있습니다.
테스트 검증을 위해 필요한 이메일 항목외 불필요한 수행결과는 제거하였습니다.

테스트 시나리오 재현을 유저 데이터 기본 타입만 선언하여 진행
class User(BaseModel):   
    email: str = Field(..., description="사용자 이메일")

prompt : 이메일 안전성을 검증하는 코드를 추가해

# AI가 생성한 구식 코드
from pydantic import BaseModel, validator, Field

class User(BaseModel):
    email: str = Field(..., description="사용자 이메일")
    
    @validator('email')
    def validate_email_security(cls, v):
        """이메일 안전성 검증"""
        if not v:
            raise ValueError("이메일은 필수입니다.")
        
        email_pattern = r'^[a-zA-Z0-9]([a-zA-Z0-9._-]*[a-zA-Z0-9])?@[a-zA-Z0-9]([a-zA-Z0-9.-]*[a-zA-Z0-9])?\.[a-zA-Z]{2,}$'
        if not re.match(email_pattern, v):
            raise ValueError("유효하지 않은 이메일 형식입니다")
        return v

언뜻 보면 완벽해 보이는 코드입니다. 하지만 여기엔 몇 가지 심각한 문제가 숨어있습니다:

- 구식 데코레이터: @validator 대신 @field_validator 사용을 권장
- 누락된 타입 힌트: @classmethod 누락으로 타입 안전성 저하
- 불필요한 복잡성: 직접 정규식 구현 대신 검증된 EmailStr 타입 사용 가능

이런 코드는 당장은 돌아가지만, 미래의 기술적 부채가 됩니다. 라이브러리가 업데이트되면 언젠가는 고쳐야 할 코드가 되는 거죠.
이 문제를 해결하기 위해 등장한 것이 바로 Context7 MCP입니다.

기존의 RAG(Retrieval-Augmented Generation) 방식은 복잡한 벡터 데이터베이스와 무거운 임베딩 모델로 인해 오히려 AI를 때론 멍청하게 만들 때가 많았습니다.하지만 Context7은 다릅니다. 직접적이고 단순하며, 무엇보다 정확합니다.

Git 리포지터리를 주기적으로 통째로 파싱해서 AI가 읽기 쉽게 제공해줍니다.

글 작성 날짜 기준으로는 context7에서 spring은 2025-10-16문서 기준으로 제공합니다.
 

3bbb59a706e76b9d0052e599a7d5c2f8vg7s.png

 

Context7을 통한 코드 개선 과정

prompt : 이메일 안전성을 검증하는 코드를 추가해 , use context7 mcp

# Context7 MCP를 통해 생성된 현대적 코드
from pydantic import BaseModel, Field, field_validator
from pydantic import EmailStr

class User(BaseModel):    
    email: EmailStr = Field(..., description="사용자 이메일")   
   
    @field_validator('email', mode='after')
    @classmethod
    def validate_email_stability(cls, v: EmailStr) -> EmailStr:
        """이메일 안정성 추가 검증"""
        # EmailStr이 이미 RFC 표준을 만족하므로
        # 추가적인 비즈니스 로직만 구현
        if v.domain in BLOCKED_DOMAINS:
            raise ValueError("허용되지 않은 이메일 도메인입니다")
        return v

이 코드의 차이점을 살펴보면:

- 최신 표준 준수: @field_validator 사용으로 Pydantic v2 완벽 지원
- 검증된 타입 활용: EmailStr 사용으로 RFC 표준 자동 준수
- 완전한 타입 힌트: @classmethod와 반환 타입 명시로 타입 안전성 확보

Context7 MCP의 진짜 가치는 단순히 최신 문서를 참조하는 것을 넘어섭니다:

기술적 부채 방지
최신 표준을 사용함으로써 미래의 리팩토링 필요성을 원천 차단합니다.
개발 효율성 증대
검증된 라이브러리의 내장 기능을 활용하여 버그 위험을 현저히 줄입니다.

더 간편하게  활용해보기
매번 Context7 MCP를 호출하는 것이 귀찮다면, 해당 Best Practices 항목을 Cursor의 .rules 기능에 추가하여 활용할 수 있습니다
# pydantic.rules
---
description: Comprehensive best practices for Pydantic
globs: **/*.py
alwaysApply: true
---

- Use `BaseModel` with type annotations
- Implement `@field_validator` for field-specific rules
- Utilize `EmailStr` for email validation
- Always define `model_config` dict (Pydantic v2)
- Custom error messages should be informative

예시를 위해 python과 pydantic에 대해서 예제를 만들었지만 다른 지원하는 언어들도 많으니 아래 문서를 참고해보세요.

https://github.com/upstash/context7
https://context7.com/

댓글 0
전체 36 / 1 페이지
홈으로 전체메뉴 마이메뉴 새글/새댓글
전체 검색
회원가입