레거시 GPU에서 BERT 서빙을 단계적으로 최적화한 방법
네이버 검색 엔진 Noir 팀이 AutoGen 기반 멀티 에이전트로 API 문서에서 E2E 테스트를 자동 생성하는 MAFT를 만들어, 6개 API에 60개 이상 테스트 케이스 + 15개 이상 버그 발견.
요약
네이버 Noir 검색 엔진 팀이 만든 사이드 프로젝트 MAFT(Multi Agents For Testing). API 문서만 입력하면 테스트 코드와 GitHub PR까지 자동 생성하는 것이 목표. AutoGen 위에 5스텝 파이프라인(요약 문서 → API 의존성 문서 → 시나리오 → 코드 생성 → 검증)을 짜고 각 스텝을 시작·비평·수정 3종 에이전트로 분리. Noir의 6개 API에 적용해 60개 이상 테스트 케이스, 15개 이상 버그 발견. 비용 + 코드 형식 일관성 문제로 CI 통합은 보류.
내용
Noir는 네이버 메일·메시지 검색에 쓰이는 사내 검색 엔진. 검색 엔진 특성상 API끼리 의존성이 강해, 새 API를 하나 추가할 때마다 그것이 의존하는 API들과 그 너머 API들까지 시나리오 케이스가 가지치기로 늘어남. 사람이 일일이 시나리오 설계 + 테스트 코드 작성을 따라가기 어려운 구조라 운영 API 다수에서 테스트 공백이 누적된 상태였음.
해결 후보로 LLM 멀티 에이전트 접근을 검토. 후보 프레임워크는 AutoGen / MetaGPT / LangGraph 셋. AutoGen은 도구 기반(에이전트가 가진 도구 = 그 에이전트의 역할), MetaGPT는 역할 기반(ProductManager 같은 추상 Role) 차이가 있고, 도구 기반이 더 직관적이라 AutoGen 채택. 한 LLM 호출에 큰 작업을 한 번에 시키는 것보다 작은 스텝으로 쪼개 시킬 때 결과가 더 정확하다는 경험에 따라 스텝 고정.
해결 / 접근
5스텝 파이프라인
요약 문서 → API 의존성 문서 → 테스트 시나리오 → E2E 테스트 코드 → 코드 검증.
각 스텝의 중간 결과물은 다음 스텝의 입력. 사람이 쓴 API 문서는 형식이 들쭉날쭉하고 테스트 작성에 불필요한 정보까지 섞여 있어, 1번 스텝에서 apiName / endpoint / body parameters / success response / limitations 같은 표준 JSON 구조로 요약 문서 생성. 2번 스텝은 요약 문서를 보고 테스트 대상 API에 영향을 줄 수 있는 다른 API를 requiredBefore 리스트로 정리하면서 그렇게 정리한 이유까지 명시. 3번 스텝은 시나리오·선행 호출 API·검증 방법·사이드 이펙트·cleanup을 한 시나리오 객체에 담음.
스텝 내부 3종 에이전트 분리
각 스텝은 시작 · 비평 · 수정 세 종류 에이전트로 구성. 시작 에이전트는 1차 작업물을 만들고, 비평 에이전트는 잘못된 점·부족한 점을 피드백하고, 수정 에이전트가 그 피드백을 반영. 시작과 수정을 같은 에이전트에 합치지 않은 이유 — 두 역할 프롬프트가 미세하게 다르고(수정은 피드백을 봐야 하지만 시작은 그렇지 않음) 한 에이전트에 두 역할을 다 시키면 자기 역할을 혼동. 결과물 만드는 시작·수정 에이전트는 좋은 모델, 비평 에이전트는 가벼운 모델로도 충분.
GitHub Action 통합
Action 실행기가 API 문서 디렉터리·테스트 코드 디렉터리를 docker 컨테이너에 마운트하고 MAFT 이미지 실행 → 테스트 코드 생성 → 저장소에 PR. 개발자는 PR을 검증하고 머지.
코드 검증 스텝
JSON 형식 검증, 네이밍 컨벤션, API 파라미터 이름 유효성 같은 사소한 검증만 수행. 실제 코드 실행 디버깅은 도입하지 않음 — 검증을 통과한 뒤에도 발생하는 버그는 문서 부족 또는 이전 스텝 결과물 결함이 원인이라 도메인 지식 갖춘 개발자 개입이 필요하다는 판단.
결과 / 참고
- 적용 결과: Noir 6개 API → 60개 이상 테스트 케이스 + 15개 이상 버그 발견 (3개월 개발)
- 발견 버그 유형: API 파라미터 조건·기본값·응답 상태 코드가 문서와 다름 / 배치 입력 시 일부 문서 부재로 오류 / 입력 공백·특수문자 오류 / 케이스별 응답 형식 차이 / 장시간 호출 시 오류
- API 1개당 생성 시간 약 10분, 비용 약 $1. Noir 6개 API 1시간·$7
- 보류 사유 3가지: 비용, 생성 코드 형식 비일관성, 개발자 검증 여전히 필요
- 향후 방향: 범용에서 Noir·Dot 특화 파이프라인으로 좁혀 입력 문서·스텝 수·비용 축소
- 인용: "LLM을 더 잘 이해시키려 하니 사용자 문서를 더 잘 작성하게 되었습니다"
- 출처: NAVER D2, "AI로 E2E 테스트를 찍어내다: MAFT"