1. LLM의 한계와 결정론적 검사의 필요성
LLM은 이전 세션의 경험을 학습하지 못하는 ‘전향성 건망증’ 상태와 유사하며, 동일한 요청에도 매번 다른 결과를 내놓는 비결정론적 특성을 가집니다. 따라서 AI가 작성한 코드가 실제로 작동하는지 확인하기 위해서는 다음과 같은 결정론적 검사(Deterministic Checks) 도구들을 로컬 CI에 통합해야 합니다. - Rubocop: 정적 코드 분석 및 린팅을 통해 일관된 스타일 유지 및 자동 수정 기능을 제공합니다. - Prettier: ERB, CSS, JS 파일의 포맷팅을 관리하여 코드의 가독성을 높입니다. - Brakeman: 정적 분석을 통해 보안 취약점을 사전에 탐지합니다. - RSpec & SimpleCov: 테스트 프레임워크와 커버리지 보고서를 통해 기능의 정확성을 검증합니다. - Undercover: Git diff와 커버리지 데이터를 분석하여 테스트되지 않은 변경 사항이 있는지 엄격하게 감시합니다.
2. Rails 8 기반의 로컬 CI 워크플로우
Rails 8.1부터는 프레임워크 내에 로컬 CI 기능이 내장되어 있으며, 이전 버전에서도 이를 포팅하여 사용할 수 있습니다. AI 에이전트에게 코드를 작성하게 한 뒤, bin/ci 명령어를 실행하여 모든 검사가 통과(Green)될 때까지 스스로 수정하도록 지시합니다. 이 과정에서 발생하는 모든 실패는 에이전트의 책임이며, 이를 통해 런타임 오류를 사전에 방지하고 코드의 신뢰성을 획기적으로 개선할 수 있습니다. 이는 과거 개발자가 수동으로 확인하던 과정을 자동화된 시스템으로 대체하는 핵심 단계입니다.
3. 체계적인 3단계 코드 리뷰 프로세스
결정론적 검사를 통과한 후에는 인간 개발자가 수행하던 코드 리뷰 업무를 AI 에이전트가 수행하도록 설계합니다. 리뷰는 다음의 3가지 단계로 구성됩니다. - 기능 명세 준수(Spec Compliance): 요청된 기능이 누락 없이 정확하게 구현되었는지 라인별로 대조하며 확인합니다. - Rails 및 프로젝트 컨벤션 확인: 멱등성(Idempotent)을 가진 Job 설계, View Component 활용 여부 등 특정 라이브러리와 패턴의 준수 여부를 체크리스트 기반으로 검토합니다. - 종합적인 코드 품질 검토: 아키텍처, 설계, 문서화, 유지보수성 측면에서 코드의 질을 평가하고 개선이 필요한 부분을 구체적으로 리포트합니다. 각 리뷰 단계는 편향을 방지하기 위해 코드를 작성한 에이전트가 아닌, 신선한 시각을 가진 별도의 에이전트가 수행하도록 하여 객관성을 확보합니다.
4. AI 시대의 개발자 역할: 관리와 검증
AI 에이전트 기반 개발에서 개발자의 역할은 ‘마이크로매니저’가 아닌 ‘전략적 관리자’가 되는 것입니다. 코드 한 줄 한 줄의 작성에 간섭하기보다는 명확한 규칙(Rules)과 이를 강제할 수 있는 도구(Tools)를 제공하는 데 집중해야 합니다. 만약 결과물이 만족스럽지 않다면 코드를 직접 수정하기보다 규칙을 정교하게 조정하고 다시 실행하게 함으로써 시스템 전체의 효율성을 높여야 합니다. 이러한 ‘신뢰하되 검증하는’ 접근 방식은 개발자가 제품 설계나 프로젝트 관리와 같은 상위 수준의 업무에 더 많은 시간을 할애할 수 있게 해줍니다.