지금 해킹을 시작하세요: €XXM API 마이그레이션이 프로덕션 AI에 대해 가르쳐 준 것
Source: Dev.to
개요

이번 주 API Days Paris에서 나는 드문 광경을 목격했다: 클라이언트와 컨설턴트가 함께 실제로 프로덕션에 배포된 AI 프로젝트에 대해 발표하는 모습이었다.
Cyrille Martraire (Arolla CTO)와 Thomas Nansot (유럽 주요 모빌리티 플랫폼 엔지니어링 디렉터)는 수백만 건의 티켓을 연간 처리하는 중요한 API 마이그레이션을 검증하기 위해 AI를 활용한 여정을 공유했다. 무엇이 달랐을까? 그들은 실패한 시도와 막다른 길을 솔직히 밝히고, 최종 솔루션이 원래 계획과는 전혀 달랐다고 말했다.
문제
Thomas의 회사는 레거시 API에서 새로운 아키텍처로 마이그레이션해야 했다. 위험도가 높았다—어떤 회귀도 수백만 건의 거래에 영향을 미칠 수 있었다. 전통적인 테스트는 비용이 많이 들고 시간이 오래 걸렸으며, 계약이 바뀔 때마다 작업을 다시 해야 했다.
그들은 구조가 완전히 다른 두 API 간에 회귀가 없음을 보장할 방법이 필요했다.
6가지 핵심 교훈
1. 🔨 먼저 해킹, 절대 다듬지 않음
Thomas가 연락했을 때, Cyrille은 요구사항 문서를 요구하지 않았다. 그는 즉시 가짜 시스템을 이용해 개념을 증명할 수 있는 해킹 프로토타입을 만들었다.
교훈: AI 프로젝트에서는 학습 속도가 다듬음보다 중요하다. 불확실성을 계획으로 해결할 수 없으며, 프로토타입으로 해결한다.
# Quick prototype approach
legacy_response = fake_legacy_api()
new_response = fake_new_api()
ai_compares(legacy_response, new_response)
# Does it work? Kind of? Good enough to continue!
2. ⚡ AI가 코드를 생성 > AI가 테스트를 실행
그들의 첫 번째 프로덕션 시도는 우아했다: AI 에이전트가 엔드‑투‑엔드로 모든 작업을 수행한다. 하지만 다음과 같은 문제점이 있었다:
- 느림: 테스트당 2분 이상
- 비용: 테스트당 약 $1
- 불안정: 무작위 실패
돌파구: 테스트 코드를 생성하는 AI를 사용하고, 실제 테스트는 실행하지 않는다.
# ❌ Approach 1: Live AI (expensive, slow)
for each test:
result = ai.compare(legacy_api(), new_api()) # $$$
# ✅ Approach 2: Generated code (cheap, fast)
test_code = ai.generate_comparison_code() # Once
for each test:
result = test_code.run() # $0, deterministic
비용 비교
- 실시간 AI: $1 × 1000 테스트 = $1000
- 생성된 코드: $2 (생성 비용) + $0 × 1000 테스트 = $2
패턴: AI는 “오프라인”에서 도구를 만들고, 그 도구가 실제 작업을 수행한다.
3. 🗄️ MCP: JSON을 데이터베이스처럼 쿼리하기
API 스키마가 방대했다. 전체 JSON을 LLM 컨텍스트에 넣으면 어텐션 문제가 발생했고, 기술적으로 들어가더라도 품질이 떨어졌다.
해결책: Model Context Protocol (MCP)
전체 JSON을 보내는 대신:
prompt = f"Analyze this entire JSON: {10mb_schema}"
쿼리 인터페이스를 사용한다:
mcp = JSONMCPServer(huge_schema)
email = mcp.query_path("passenger.email")
keys = mcp.list_keys("journey.segments")
그들은 특히 “JSON‑to‑MCP” 도구를 추천했다.
왜 중요한가: MCP는 “전화번호부를 제공한다”에서 “검색 인터페이스를 제공한다”로 전환하는 것과 같아, LLM과의 상호작용을 확장 가능하게 만든다.
4. 🎲 놀라움을 받아들여라
“매니저로서 나는 무엇이 작동할지에 대한 명확한 비전을 기대했다. 해결책이 내가 상상한 것과 완전히 달랐다는 것을 인정해야 했고, 오히려 더 좋았다.” – Thomas
시도한 방법
- 전체 AI 접근 → 너무 느리고 비쌈
- 슬라이스 & 비교 → 너무 복잡함
- 생성된 코드 + MCP → 성공!
승리한 솔루션은 원래 계획에 없었다. 짧은 피드백 사이클과 전환 의지가 핵심이었다.
마인드셋: AI 프로젝트에 너무 많은 확신을 가지고 접근하면 스스로를 제한한다. 기술이 당신을 놀라게 하도록 두라.
5. 💾 오프라인 AI > 온라인 AI (때때로)
핵심 인사이트: “AI는 때때로 오프라인이 더 좋다.”
| 패턴 | 사용 사례 | 비용 | 속도 |
|---|---|---|---|
| 실시간 AI | 동적 의사결정, 개인화 | 사용당 높음 | 가변 |
| 생성된 AI | 반복 작업, 검증 | 일회성 | 빠름 |
오프라인 AI 예시
- ✅ AI가 테스트 스위트를 생성 → 1000번 실행
- ✅ AI가 Terraform 모듈을 작성 → 반복 적용
- ✅ AI가 검증 규칙을 생성 → 모든 데이터 검사
- ✅ AI가 문서 템플릿을 생성 → 영구 재사용
6. 🎓 지식 이전 > 전문가가 모든 것을 수행
기술 개념을 입증한 뒤, Cyrille의 역할은 “제작자”에서 “코치”로 바뀌었다.
진화 단계
- 외부 전문가가 솔루션을 구축
- 작동을 증명하고 승인을 얻음
- 전문가가 내부 팀에 실습 교육
- 팀이 독립적으로 운영
- 학습 내용이 다른 프로젝트에 적용
영향: AI에 회의적이던 엔지니어들조차도 이 기법에 흥미를 느꼈다. 진정한 가치는 문제 해결 + 내부 역량 구축에 있다.
실용적인 시사점
✅ 해야 할 일
- 해킹 프로토타입으로 시작
- 실시간 의사결정보다 생성된 산출물을 선호
- 대용량 데이터 구조에는 MCP 스타일 패턴 사용
- 짧은 피드백 사이클을 계획
- 솔루션만이 아니라 내부 역량을 구축
❌ 하지 말아야 할 일
- 완벽한 요구사항을 기다림
- “전체 AI”가 항상 정답이라고 가정
- 컨텍스트‑윈도우 제한에 맞서 싸움—우회책을 사용
- 모든 것을 사전에 계획
- 전문성을 외부에만 의존
혼란스러운 중간 단계가 핵심
가장 인상 깊었던 점은 그들의 솔직함이었다. 많은 AI 발표가 깔끔한 최종 결과만 보여주고 실패 과정을 생략한다. 실패 경험 자체가 이야기이며, 학습이 일어나는 곳이다. 그들은 완벽한 계획이 없었고, 가설과 반복 의지, 그리고 놀라움을 받아들이는 용기가 있었다. 이것이 가장 큰 교훈이다.
데모 코드
이 패턴들을 구현한 작업 데모를 만들었다: [GitHub link]
레포지토리에는 다음이 포함된다:
- JSON 쿼리를 위한 MCP 서버
- AI 코드‑생성 예시
- 빠른 프로토타이핑을 위한 가짜 API
- 생성된 코드 vs. 실시간 AI 비교
토론 질문
- 프로젝트에서 “AI가 코드를 생성” 패턴을 시도해 본 적이 있나요? 실시간 AI와 비교했을 때 어땠나요?
- LLM 컨텍스트 윈도우와 가장 큰 고민은 무엇인가요?
- AI 프로젝트에서 탐색과 계획 사이의 균형을 어떻게 맞추나요?
발표자
- Cyrille Martraire – Arolla CTO, Living Documentation 저자
- Thomas Nansot – 유럽 전역 수백만 명에게 서비스를 제공하는 모빌리티 배포 플랫폼의 엔지니어링 디렉터, 약 150명의 엔지니어 관리
연결