대규모 언어 모델(LLM)을 활용한 코드 생성이 일반화되면서, 'AI가 생성한 코드의 품질을 어떻게 보장할 것인가'가 매우 중요한 주제가 되고 있습니다. AI는 한 번에 완벽한 코드를 작성하기 어렵기 때문에, 테스트가 실패하거나 사양과 다른 동작을 하는 경우가 빈번합니다.
본 글에서는 제가 개발에 참여하고 있는 멀티 에이전트 시스템 'NexusCore'의 Stage 2에서 구현된, 세 가지 에이전트(architect, debugger, guardian)를 활용한 협업 메커니즘인 '3계층 품질 보증 아키텍처'에 대해 설명합니다.
Phase 5(테스트)와 Phase 6(리뷰)의 구체적인 설계 사상과 함께, LLM 기반 개발 환경에서의 자율적 품질 보증 실천 방법을 쉽게 소개합니다.
NexusCore에서는 LLM 기반 개발 과정에서 품질 보증을 자동화 및 반자동화하기 위해, 개발 프로세스 안에 세 가지 역할을 가진 에이전트를 결합했습니다.
- architect (설계층): 개발 초기 단계에서 요구사항으로부터 '설계 방침'을 정의하고, 코딩을 담당하는 에이전트에게 지시를 전달합니다.
- debugger (자동 수정층): 작성된 코드를 샌드박스 환경에서 실행하여 오류가 발생하면 자동으로 원인을 특정하고 코드 수정을 시도합니다.
- guardian (최종 판단층): 자동 수정까지 마친 코드가 정말로 요구사항을 충족하는지 리뷰하며, 필요에 따라 인간의 판단을 구합니다.
이러한 '설계 → 자동 수정 → 인간의 판단' 흐름을 구성함으로써, AI가 자율적으로 코드를 작성하면서도 통제 불능 상태에 빠지지 않고 안전하게 개발을 진행할 수 있게 됩니다.
AI에게 코드 작성을 맡기기만 하고 테스트를 실행하지 않으면, 실행 시 오류로 인해 멈추는 위험한 코드가 실제 운영 환경에 들어갈 수 있습니다.
NexusCore의 Phase 5(Testing 페이즈)에서는 안전한 샌드박스 환경을 마련하고, 코드를 실제로 실행하여 테스트를 진행합니다. 만약 테스트가 실패할 경우, debugger 에이전트가 작동하여 오류 메시지를 읽고 코드 수정을 자동으로 수행합니다.
아래는 자동 수정 루프의 개념을 보여주는 Python 코드 예시입니다.
import os
def run_testing_phase(target_files):
...
이 메커니즘의 중요한 포인트는, 무한 루프에 빠지지 않도록 NEXUS_DEBUG_MAX_RETRIES와 같은 환경 변수로 리트라이 횟수의 상한을 설정했다는 점입니다. AI가 동일한 실수를 반복했을 때, 시스템이 영원히 멈추지 않도록 방지합니다.
자동 테스트를 통과한 코드라 하더라도, '사양을 올바르게 충족하는지', '보안상의 문제는 없는지'와 같은 측면은 AI만으로는 완전히 보장할 수 없습니다.
그래서 Phase 6(Review 페이즈)에서는 guardian 에이전트가 최종 리뷰를 수행합니다. 여기서 가장 큰 특징은, 단순한 '성공/실패'라는 두 가지 선택지가 아니라, 3가지 값의 종단 상태를 정의하고 있다는 것입니다.
- APPROVED: 코드가 요구사항을 충족하여 다음 프로세스(머지나 배포 등)로 자동 진행해도 되는 상태.
- NEEDS_HUMAN_REVIEW: 자동 테스트는 통과했지만, 설계의 복잡성이나 잠재적 위험이 있어 인간의 눈으로 최종 확인이 필요한 상태.
- REJECTED: 명백한 사양 위반이나 오류가 있어 재작성이 필요한 상태.
이러한 종단 상태를 시스템(CLI 등)의 종료 코드로 반영함으로써, CI/CD 파이프라인 등에서 '자동 머지'인지 '인간 검토 대기'인지를 시스템적으로 처리할 수 있게 됩니다.
def determine_terminal_state(review_result):
if review_result.has_critical_issues:
return "REJECTED"
...
NEEDS_HUMAN_REVIEW라는 상태를 설정함으로써, 'AI에게 모든 것을 맡기려는 위험성'을 줄이면서도, 인간은 '정말로 필요한 리뷰'에만 집중할 수 있게 됩니다.
NexusCore의 Stage 2에서 구현된 품질 루프를 통해, architect가 제시한 방침을 기반으로 debugger가 코드를 다듬고, 마지막으로 guardian가 인간의 판단을 위한 판단 자료를 제공하는 견고한 파이프라인이 완성되었습니다.
LLM 기반 개발을 진행함에 있어, AI 자동화를 어디까지 신뢰하고 어느 지점에서 인간이 개입할지(Human-in-the-Loop)를 설계하는 것이 매우 중요합니다. 단순한 작업은 AI에 맡기고, 복잡한 판단이나 최종 승인은 인간이 수행하는 균형을 잡음으로써, 개발 속도와 안전성을 모두 확보할 수 있습니다.
앞으로 멀티 에이전트 시스템 구축이나 LLM을 활용한 개발 프로세스 자동화를 검토하시는 분들께 도움이 되기를 바랍니다.
본 기사는 개인 Zenn에서도 공개하고 있습니다.