software-testing

6 개의 포스트

line

레거시 프로젝트에서 AI 드리븐 프로젝트로 전환, AX 로드맵 (새 탭에서 열림)

AX는 AI 도구를 개별적으로 사용하는 데서 그치지 않고, 개발 사이클 전체를 AI 중심으로 재설계하는 전환 과정이다. 성공적인 전환을 위해서는 보안·컴플라이언스 기반을 먼저 마련하고, 팀 차원의 활용 표준화와 명세 기반 개발 자동화를 단계적으로 추진해야 한다. 특히 SDD와 사람의 승인 게이트를 결합하면 AI의 생산성을 활용하면서도 품질과 통제력을 유지할 수 있다. ## AI 드리븐 프로젝트와 SDD - AI 드리븐 프로젝트는 AI를 스펙 작성, 코드 생성, 테스트, 리뷰, 머지 등 개발 전 과정에 통합하는 방식이다. - 사람은 세부 구현보다 요구사항과 방향 설정, 품질 판단에 집중한다. - 핵심 방법론은 명세 주도 개발(SDD)이다. - 요구사항, 구현 범위, 예외 상황, 검증 기준을 먼저 정의한다. - AI는 명세를 바탕으로 계획을 세우고 코드를 생성·검증한다. - AI는 패턴 완성에는 강하지만 추상적인 의도 파악에는 한계가 있으므로, 명확한 스펙이 결과 품질을 좌우한다. ## 1단계: AI-Ready — 보안과 컴플라이언스 기반 AI 도입 전 민감 정보와 핵심 자산이 외부 모델에 노출되지 않도록 안전한 사용 환경을 구축한다. - API 키, DB 비밀번호, 내부 IP 등의 하드코딩을 제거한다. - Secrets Manager 같은 전용 서비스를 사용하고 런타임에 시크릿을 주입한다. - 이름, 이메일, 전화번호 등 PII는 AI에 전달하기 전에 마스킹하거나 토큰화한다. - 핵심 알고리즘과 경쟁력 있는 아키텍처는 별도 저장소에서 관리하거나 AI 접근 권한을 제한한다. - 초기에는 모든 시스템을 한 번에 이관하기보다 다음을 우선 적용한다. - 핵심 컴플라이언스 요건 선별 - 파일 시스템·네트워크 격리를 통한 샌드박싱 - 격리 상태에서 실제 정보가 노출되지 않는지 검증 - 기대 효과: - 코드와 프로젝트 맥락을 AI에 안전하게 제공 - 디버깅, 문서화, 반복 코드 작성 속도 향상 - 팀원들이 AI를 안전하게 활용하는 경험 축적 ## 2단계: AI-Assist — 팀 단위 활용 표준화 개인별로 제각각인 AI 사용 방식을 프로젝트 공통 워크플로로 통합한다. 이 단계에서 AI는 코드를 직접 작성하기보다 사람이 작성한 코드를 검토하고 보조한다. - 프로젝트 루트에 AI용 가이드라인을 작성한다. - 프로젝트 개요 - 코딩 컨벤션 - 아키텍처 원칙 - 도메인 용어집 - 코드 리뷰, 브레인스토밍, 작업 계획 수립 등에 사용할 표준 프롬프트와 스킬을 구축한다. - `superpowers`와 같은 플러그인을 활용해 다음 작업을 표준화할 수 있다. - `brainstorming` - `writing-plans` - `subagent-driven-development` - CI/CD와 AI를 연동해 PR 생성 시 자동 코드 리뷰를 수행한다. - 스타일 위반 탐지 - 잠재적 버그 확인 - 보안 취약점 점검 - 사람 리뷰어는 반복적인 지적보다 복잡한 비즈니스 로직과 정책 판단에 집중한다. - 측정 가능한 KPI: - 사람이 직접 남기는 반복 리뷰 코멘트 수 - 테스트 커버리지 변화 - 배포 안정성 및 테스트 통과율 - 기대 효과: - 팀 전체의 AI 활용 수준 상향 평준화 - 리뷰어의 인지 부하 감소 - 코드 품질과 컨벤션의 일관성 확보 ## 3단계: AI-Development — 명세 기반 개발 자동화 사람이 작성한 스펙이 AI를 통해 구현 계획, 테스트 계획, 코드, PR로 이어지는 자동화 파이프라인을 구축한다. - 전체 흐름은 다음과 같다. 1. 사람이 요구사항과 범위, 엣지 케이스, 검증 기준을 스펙으로 정의 2. AI가 구현 계획과 테스트 계획 작성 3. AI 서브 에이전트가 계획에 따라 작업을 순차적으로 수행 4. 코드 리뷰 후 PR 생성 및 머지 - 세 개의 Human Gate를 둔다. - **Human Gate 1:** 스펙 검토 및 승인 - **Human Gate 2:** 구현 계획과 테스트 계획 검토 및 승인 - **Human Gate 3:** 최종 코드 검토 및 승인 - AI가 프로젝트에 맞는 코드를 만들 수 있도록 도메인 지식을 구조화한다. - 아키텍처 원칙 - 비즈니스 로직의 예외와 특이사항 - 시스템 구성도 - 기존 스펙 및 기술 문서 - 지식은 전용 디렉터리, AI 커스텀 스킬, RAG 시스템 등을 통해 AI가 필요할 때 조회하도록 구성한다. - `/specs` 같은 디렉터리에 새 스펙 파일이 추가되면 CI가 이를 감지해 다음 단계를 실행하도록 이벤트 트리거를 설정한다. - CI 내부에 Approval Step을 배치해 사람의 승인 없이는 AI가 다음 단계로 진행하지 못하게 한다. - 초기에는 핵심 비즈니스 로직보다 테스트 코드나 보일러플레이트처럼 위험도가 낮은 영역부터 자동화를 적용하고, 신뢰가 쌓이면 AI의 담당 범위를 확대한다. ## 단계적 도입이 필요한 이유 - AI 활용 효과는 팀의 문서화 수준, 테스트 품질, 도메인 복잡도에 크게 좌우된다. - 처음부터 모든 구현을 AI에 맡기면 프로젝트 맥락을 이해하지 못한 코드가 생성될 수 있다. - 낮은 위험도의 테스트와 반복 코드부터 시작하면 품질을 검증하면서 팀의 신뢰를 확보할 수 있다. - 각 단계는 독립적으로도 효과가 있으므로 모든 단계를 한 번에 완료할 필요는 없다. 보안 기반을 먼저 확보한 뒤 프로젝트 규칙과 지식을 문서화하고, 자동 리뷰와 테스트 생성부터 시작하는 접근이 현실적이다. 이후 명확한 스펙과 사람의 승인 게이트를 중심으로 코드 생성 범위를 점진적으로 넓히는 것이 안전한 AX 전략이다.

dropbox

코드 생성을 넘어: AI 에이전트 시대의 엔지니어링 생산성을 다시 생각하다 (새 탭에서 열림)

Dropbox는 AI 코딩 도구가 코드 작성 속도는 높였지만, 리뷰·CI·테스트·배포·운영을 새로운 병목으로 만들었다고 설명합니다. 따라서 생산성의 핵심은 코드 생성량이 아니라 전체 개발 생명주기가 더 많은 변경을 안정적으로 흡수하고 고객 가치로 전환하는 능력입니다. Dropbox는 코딩 에이전트 플랫폼, 새로운 생산성 지표, 교육과 가드레일을 통해 AI 중심의 개발 운영 모델을 구축하고 있습니다. ## 코파일럿에서 자율형 에이전트로 - 초기 AI 코딩 도구는 코드 설명, 스니펫 생성, 질의응답 등으로 엔지니어 옆에서 작업을 보조하는 코파일럿 역할을 했습니다. - 에이전트는 범위가 정해진 작업을 받아 다음 과정을 수행할 수 있습니다. - 코드베이스 조사 - 파일 수정 - 테스트 실행 - 실패 원인 분석과 재시도 - 사람이 검토할 수 있는 결과물 생성 - 엔지니어는 여전히 요구사항, 아키텍처, 품질, 배포에 대한 최종 책임을 집니다. - 에이전트 도입으로 여러 작업을 병렬로 진행하고, 반복적인 구현 업무를 위임할 수 있게 됐습니다. - 반면 코드와 풀 리퀘스트가 빠르게 증가하면서 코드 리뷰, 테스트 인프라, 검증, 릴리스 조정, 운영 시스템에 부담이 커졌습니다. ## Nova: Dropbox의 에이전트 플랫폼 - Nova는 자연어로 작업을 설명하면 통제된 환경에서 AI 코딩 에이전트를 실행할 수 있는 Dropbox의 내부 플랫폼입니다. - Nova의 핵심 가치는 모델 자체보다 다음과 같은 주변 시스템에 있습니다. - 코드베이스와 내부 개발 관행에 대한 컨텍스트 - 안전한 실행 환경 - 기존 개발 워크플로와의 통합 - 검증 절차와 사람의 최종 리뷰 - Nova가 생성한 변경은 작업 정의, 에이전트 실행, 결과 검증, 사람의 승인이라는 구조화된 흐름을 거칩니다. - 현재 Dropbox 풀 리퀘스트의 약 12분의 1이 Nova를 통해 생성되고 있습니다. - 기능 개발뿐 아니라 다음과 같은 고수고 작업에도 활용됩니다. - 마이그레이션 - 불안정한 테스트 수정 - 버그 조사 - 의존성 업데이트 - 시스템 유지보수 작업 ## 코드량이 아닌 제품 전달 속도 측정 - AI로 PR 생성량이 늘어나면 단순한 PR 처리량은 생산성을 충분히 설명하지 못합니다. - 함께 측정해야 할 지표는 다음과 같습니다. - 코드 리뷰 대기 및 처리 시간 - CI 비용과 처리 지연 - 재작업 비율 - 결함 비율 - 테스트의 첫 실행 성공률 - 최종적으로 고객에게 전달되는 가치 - Dropbox는 생산성을 네 단계로 나눠 측정합니다. - **Fuel**: AI 도구가 실제로 사용되는 정도 - **Adoption**: 팀의 개발 워크플로가 얼마나 변화했는지 - **Output**: AI가 실제 프로덕션 작업에 기여한 정도 - **Impact**: 아이디어가 고객 가치로 전환되는 시간과 제품 전달 속도의 개선 - 생산성 향상은 속도만으로 판단할 수 없으며, 품질과 신뢰성을 유지하는지가 중요합니다. - 코드 생성이 빨라져도 결함과 재작업이 늘어난다면 실질적인 생산성 향상으로 볼 수 없습니다. ## 엔지니어링 업무 방식의 변화 - 에이전트가 구현을 더 많이 담당하면서 엔지니어의 역할은 다음 영역으로 이동합니다. - 문제와 의도 정의 - 요구사항과 코드베이스 맥락 정리 - 생성된 변경 검토 - 아키텍처 및 품질 판단 - 최종 결과에 대한 책임 - 도구만 배포한다고 에이전트 방식이 정착되지는 않습니다. - Dropbox는 실습 교육, 해커톤, 부트캠프, 워크플로 사례 공유, 동료 주도 학습 등을 활용해 팀의 적응을 지원합니다. - 팀마다 도입 속도와 필요한 안전장치가 다릅니다. - 고위험 시스템은 더 강한 검증과 명확한 가드레일이 필요합니다. - 격리되거나 위험도가 낮은 코드 영역은 더 빠르게 자동화할 수 있습니다. - 모든 작업을 에이전트로 처리하는 것이 목표가 아니라, 효과가 큰 영역에서 안전하고 반복 가능한 방식으로 사용하는 것이 목표입니다. ## AI가 옮겨 놓은 병목 - AI는 소프트웨어 개발의 병목을 제거하기보다 다른 단계로 이동시킵니다. - 코드 생성이 빨라질수록 다음 영역이 새로운 제약이 됩니다. - 리뷰 처리 용량 - 테스트와 검증 - 릴리스 조정 - 운영 및 장애 대응 - 따라서 조직은 모델이나 코드 생성 기능만 강화할 것이 아니라 다음 시스템에 투자해야 합니다. - 풍부한 코드베이스 컨텍스트 - 에이전트 오케스트레이션 - 품질 관리와 거버넌스 - 개발 워크플로 통합 - 결과와 고객 영향을 측정하는 체계 - 경쟁력은 누구나 접근할 수 있는 기반 모델보다, 그 모델을 실제 조직의 개발 과정에 연결하는 내부 시스템에서 나온다는 것이 글의 결론입니다. 실무적으로는 AI 도구 도입량보다 리뷰 지연, 테스트 성공률, 결함·재작업, 배포 리드타임, 고객 가치 전달 속도를 함께 추적하는 것이 중요합니다. 작은 범위의 반복 업무부터 에이전트를 적용하고, 사람의 승인과 명확한 안전장치를 포함한 워크플로로 확장하는 접근이 적절합니다.

github

에이전트 풀 리퀘스트가 도처에 있습니다. 이를 검토하는 방법을 소개합니다. (새 탭에서 열림)

에이전트가 작성한 풀 리퀘스트(PR)는 빠르게 늘고 있지만, 테스트 통과와 깔끔한 코드만으로 품질을 보장할 수 없다. 연구에 따르면 에이전트 코드는 인간 작성 코드보다 중복과 기술 부채가 많을 수 있으며, 리뷰어는 오히려 더 쉽게 승인하는 경향이 있다. 따라서 리뷰어는 코드의 표면적 완성도보다 CI 조작, 중복 구현, 경계 조건, 권한 및 보안 문제를 중심으로 의도적으로 검토해야 한다. ## 에이전트 PR 증가와 리뷰 한계 - GitHub Copilot 코드 리뷰는 6천만 건 이상 처리됐고, 1년이 안 되는 기간에 10배 성장했다. - GitHub의 코드 리뷰 5건 중 1건 이상에 에이전트가 관여한다. - 개발자 한 명이 짧은 시간에 여러 에이전트 세션을 실행하면서 PR 생성 속도는 크게 늘었지만, 인간의 리뷰 처리 능력은 그만큼 증가하지 않았다. - 기존의 “리뷰 요청 → 코드 소유자 대기 → 병합” 방식만으로는 증가한 물량을 감당하기 어렵다. ## 에이전트 코드를 바라보는 관점 - 코딩 에이전트는 저장소의 패턴을 잘 따르지만 다음과 같은 맥락은 알지 못한다. - 과거 장애와 사고 이력 - 팀이 경험한 특수한 엣지 케이스 - 문서화되지 않은 운영 제약 - 에이전트는 실제로 완전하지 않은 구현도 완성된 것처럼 보이게 만들 수 있다. - 리뷰어의 핵심 역할은 자동화하기 어려운 판단과 맥락 이해다. - 따라서 diff를 단순히 읽기보다, 변경이 시스템의 운영 현실과 맞는지 검증해야 한다. ## CI를 약화시키는 변경 - 에이전트가 CI 실패를 해결하기 위해 다음과 같은 편법을 사용할 수 있다. - 테스트 삭제 - 린트 단계 건너뛰기 - 테스트 명령에 `|| true` 추가 - 테스트나 워크플로 실행 조건 완화 - 다음 항목이 변경됐다면 명확한 근거 없이는 병합하지 않아야 한다. - 코드 커버리지 기준 하향 - 테스트 삭제, 이름 변경 또는 skip 처리 - fork나 PR에서 워크플로가 실행되지 않도록 변경 - 기존에 항상 실행되던 CI 단계에 조건 추가 - CI를 약화하는 변경은 에이전트 PR에서 즉시 차단해야 할 대표적인 신호다. ## 기존 코드 재사용 여부 - 에이전트는 저장소 전체의 설계 의도보다 눈앞의 코드 패턴을 복제하는 경향이 있다. - 다음과 같은 중복이 생길 수 있다. - 기존 유틸리티와 기능이 같은 새 헬퍼 - 여러 위치에 반복 구현된 검증 로직 - 공유 모듈에 이미 있는 미들웨어의 재작성 - 이름만 다르고 동작은 거의 같은 함수 - 새 유틸리티가 추가될 때마다 저장소에서 동등한 기능을 검색해야 한다. - 중복 구현을 발견하면 단순 코멘트가 아니라 병합 전 통합을 요구하는 편이 낫다. - 새로운 유틸리티를 추가할 경우, 일정 규모 이상의 PR에서는 추가 이유를 설명하도록 요구하면 중복을 조기에 발견할 수 있다. ## 테스트를 통과해도 틀릴 수 있는 코드 - 명백한 API 오용이나 컴파일 오류는 CI에서 잡히지만, 다음과 같은 논리 오류는 통과할 수 있다. - 페이지네이션의 off-by-one 오류 - 테스트되지 않은 분기의 권한 검사 누락 - 특정 입력에서만 검증이 조기에 종료되는 문제 - 대규모 환경이나 경쟁 상태에서만 발생하는 오류 - 중요한 변경 경로를 입력부터 출력까지 직접 추적해야 한다. - 특히 다음 경계를 확인해야 한다. - `0`, 최댓값, 빈 값 - 외부에서 들어오는 값에 대한 검증 - 모든 분기의 권한 확인 - 예상하기 어려운 조건문과 조기 반환 - 수정 전에는 실패하고 수정 후에는 통과하는 회귀 테스트를 요구해야 한다. - 에이전트가 수정하려는 버그를 재현하는 테스트를 작성하지 못한다면, 문제에 대한 이해나 수정 자체가 불완전할 가능성이 높다. ## 계획 없는 대규모 PR과 에이전트 이탈 - 크고 범위가 불명확한 PR은 에이전트가 리뷰 피드백을 제대로 반영하지 못하거나 작업을 중단할 가능성이 높다. - 깊이 있는 리뷰를 시작하기 전에 다음을 확인해야 한다. - 이전 리뷰 라운드에 에이전트가 적절히 응답했는가 - 구현 계획이 구조적으로 제시돼 있는가 - 변경이 작은 단위로 나뉘어 있는가 - 계획이 없다면 상세한 코드 리뷰보다 먼저 작업을 분할하거나 각 부분의 목적과 구조를 설명하도록 요구하는 것이 효율적이다. - 이렇게 하면 리뷰어가 방향을 잃은 대규모 변경에 시간을 낭비하는 일을 줄일 수 있다. ## 워크플로의 신뢰할 수 없는 입력과 프롬프트 인젝션 LLM을 호출하는 GitHub Actions나 CI 워크플로는 일반 PR보다 더 엄격하게 검토해야 한다. - 위험한 흐름은 다음과 같다. - PR 본문, 이슈 본문, 커밋 메시지를 읽음 - 해당 내용을 프롬프트에 삽입 - 모델 출력을 셸 명령으로 전달 - `GITHUB_TOKEN` 권한으로 실행 - 다음 항목은 병합을 막아야 하는 보안 신호다. - 사용자 입력을 정제·인용 없이 프롬프트에 삽입 - 필요한 범위보다 넓은 쓰기 권한의 `GITHUB_TOKEN` - 모델 출력을 검증 없이 셸 명령으로 실행 - 에이전트 단계에서 시크릿에 접근하거나 로그에 출력 - 요구할 수 있는 방어책은 다음과 같다. - 워크플로에 최소 권한을 설정하고 `permissions: read-all`을 기본값으로 고려 - 신뢰할 수 없는 입력을 프롬프트에 넣기 전에 정제하고 명확히 인용 - 분석 단계와 실행 단계를 분리 - 운영 환경에 영향을 주는 작업에는 사람의 승인 단계 추가 - 모델 출력을 직접 실행하거나 `eval`하지 않고 검증된 형식으로 제한 에이전트 PR은 느리게 검토해야 하는 대상이 아니라, 다르게 검토해야 하는 대상이다. CI가 약화되지 않았는지, 기존 코드와 중복되지 않는지, 핵심 경로와 경계 조건이 검증됐는지, 워크플로 권한과 입력이 안전한지를 우선 확인하면 리뷰 시간을 줄이면서도 조용한 기술 부채와 보안 위험을 효과적으로 잡을 수 있다.

github

“정답”이 결정적이지 않을 때 에이전트 행동 검증 (새 탭에서 열림)

자율 에이전트의 실행 과정은 환경, 타이밍, UI 상태에 따라 달라지므로 기존의 결정론적 테스트 방식만으로는 올바른 동작을 안정적으로 검증하기 어렵다. 에이전트가 실제 작업을 성공했는데도 실행 경로가 예상과 다르다는 이유로 테스트가 실패하는 ‘거짓 음성(false negative)’이 발생할 수 있다. 글은 고정된 스크립트 대신 필수 결과와 경로의 구조를 검증하는 독립적인 ‘Trust Layer’를 제안하며, 이를 통해 설명 가능하고 CI에 적합한 에이전트 검증을 구현할 수 있다고 주장한다. ## 에이전트 기반 검증에서 발생하는 문제 - Copilot Coding Agent가 UI, 브라우저, IDE 같은 실제 환경을 조작하면 실행 결과가 매번 동일하지 않다. - 네트워크 지연으로 로딩 화면이 오래 표시되거나, 반대로 즉시 화면이 나타날 수 있다. - 에이전트가 상황에 맞게 대기하고 작업을 완료했더라도, 테스트가 특정 시점이나 순서를 기대하면 실패한다. - 주요 문제는 다음과 같다. - **거짓 음성:** 작업은 성공했지만 테스트가 실패로 판정한다. - **취약한 인프라:** 렌더링, 타이밍, 네트워크 같은 환경 잡음이 결과에 영향을 준다. - **컴플라이언스 함정:** 올바른 결과를 냈어도 사전에 기록된 에이전트 행동과 다르면 회귀로 오인된다. - 에이전트의 정확성은 정해진 단계를 그대로 따르는 것이 아니라, 필수적인 결과를 안정적으로 달성하는지로 판단해야 한다. ## 기존 테스트 방식이 자율 에이전트에 맞지 않는 이유 - **Assertion 기반 테스트** - 모든 검증 조건을 사람이 직접 작성해야 한다. - 가능한 모든 대체 경로를 명세하기 어렵다. - **Record-and-replay** - 실행을 녹화된 순서와 비교하므로 사소한 타이밍·렌더링 변화에도 실패한다. - **시각적 회귀 테스트** - 스크린샷 차이는 감지하지만, 해당 변화가 작업의 의미나 최종 결과에 영향을 주는지는 이해하지 못한다. - **ML 오라클** - 많은 학습 사례가 필요하다. - 실패 판정의 근거를 설명하기 어려운 블랙박스가 되기 쉽다. - 이 방식들은 모두 “정확성은 특정한 관찰 상태와 순서를 재현하는 것”이라는 공통 가정을 갖는다. - 하지만 에이전트 시스템에서는 서로 다른 실행 경로가 동일한 올바른 결과로 이어질 수 있다. ## 필수 상태와 선택적 변형의 구분 에이전트 동작을 검증하려면 모든 상태를 동일하게 취급하지 말고, 성공에 반드시 필요한 요소와 환경에 따라 달라지는 요소를 분리해야 한다. - **필수 상태(Essential states)** - 성공을 위해 반드시 도달해야 하는 상태다. - 예를 들어 VS Code 검색 작업에서는 최종적으로 ‘검색 결과’ 화면에 도달해야 한다. - **선택적 변형(Optional variations)** - 로딩 스피너, 일시적인 로딩 화면, 장식적 UI 변화처럼 성공 여부와 직접 관련 없는 상태다. - **수렴 경로(Convergent paths)** - 단축키 사용, 메뉴 선택 등 서로 다른 절차가 동일한 최종 상태로 합쳐지는 경우다. - 로딩 화면이 나타났는지는 중요하지 않지만, 검색 결과가 표시되었는지는 작업의 성공을 결정한다. - 따라서 검증 대상은 실행 과정 전체가 아니라 성공을 보장하는 논리적 구조여야 한다. ## Dominator 분석을 활용한 필수 행동 추출 필수 상태와 부수적 상태를 자동으로 구분하기 위해 컴파일러 이론의 **Dominator 관계**를 활용할 수 있다. - 제어 흐름 그래프에서 노드 A가 노드 B를 지배(dominates)한다는 것은 시작점에서 B로 가는 모든 경로가 A를 거쳐야 한다는 뜻이다. - 에이전트의 실행 기록을 그래프로 표현하면 다음을 식별할 수 있다. - 모든 성공 경로에 공통으로 나타나는 필수 상태 - 일부 경로에만 등장하는 선택적 상태 - 서로 다른 실행 경로가 다시 합쳐지는 지점 - 이 분석을 통해 테스트가 확인해야 할 최소한의 성공 조건을 추출할 수 있다. - 또한 “왜 이 실행을 성공 또는 실패로 판단했는가”를 그래프 구조로 설명할 수 있어, 단순한 블랙박스 판정보다 신뢰성이 높다. ## 스크립트가 아닌 실행 그래프로 모델링 - 자율 에이전트의 행동은 고정된 1차원 스크립트보다 여러 분기와 수렴 지점을 가진 그래프로 보는 편이 적합하다. - 그래프 기반 모델은 특정 순서를 강제하지 않고, 서로 다른 행동 경로가 같은 필수 결과에 도달했는지를 평가할 수 있다. - 이 접근은 에이전트의 자유로운 문제 해결 능력을 유지하면서도, CI 파이프라인에서는 반드시 충족되어야 할 결과를 엄격하게 검증할 수 있는 기반이 된다. - 글에서 제안하는 Trust Layer는 이러한 실행 그래프를 바탕으로 우연한 환경 차이와 실제 기능 실패를 구분하는 역할을 한다. ## 실용적인 적용 방향 - 에이전트 테스트를 작성할 때 모든 중간 화면과 클릭 순서를 고정하지 않는다. - 대신 다음을 명확히 정의한다. - 반드시 도달해야 하는 최종 상태 - 작업 성공을 입증하는 핵심 데이터나 UI 상태 - 무시할 수 있는 로딩·렌더링 변화 - 허용 가능한 대체 실행 경로 - CI에서는 기록된 경로의 일치 여부보다 필수 상태의 도달 여부와 상태 간 논리적 관계를 검증하는 것이 적절하다. - 이를 적용하면 환경 변화로 인한 불필요한 실패를 줄이고, 에이전트가 실제로 작업에 실패한 경우에는 더 정확하게 감지할 수 있다.

github

GitHub Copilot CLI, 세컨드 오피니언을 위해 여러 모델 제품군 결합 (새 탭에서 열림)

GitHub Copilot CLI가 주 모델과 다른 AI 계열의 모델을 활용해 작업을 검토하는 실험 기능 **Rubber Duck**을 공개했습니다. Rubber Duck은 계획 수립, 복잡한 구현, 테스트 작성 후처럼 오류를 조기에 발견하기 좋은 시점에 독립적인 피드백을 제공합니다. 평가 결과 Claude Sonnet과 GPT-5.4 기반 Rubber Duck 조합은 Sonnet과 Opus 단독 실행 성능 차이의 74.7%를 줄였습니다. ## 자신감 있는 실수가 누적되는 문제 - 코딩 에이전트는 일반적으로 다음 순서로 작업합니다. - 요구사항 분석 - 계획 수립 - 구현 - 테스트 - 문제 발생 시 반복 수정 - 초기 계획의 잘못된 가정이나 비효율은 이후 구현의 기반이 되어 오류를 연쇄적으로 키울 수 있습니다. - 에이전트가 자신의 결과를 스스로 검토하는 방식도 도움이 되지만, 동일한 모델은 같은 학습 데이터와 편향, 맹점을 공유합니다. - 따라서 자기 검토만으로는 발견하기 어려운 문제를 찾기 위해 다른 모델 계열의 관점이 필요합니다. ## 다른 모델 계열을 활용하는 Rubber Duck - Rubber Duck은 주 에이전트의 계획과 작업을 검토하는 전문 리뷰 에이전트입니다. - 현재 Claude 모델을 주 오케스트레이터로 선택하면 Rubber Duck은 GPT-5.4를 사용합니다. - 검토 결과는 다음과 같은 고가치 우려 사항을 짧고 집중적으로 제시합니다. - 주 에이전트가 놓친 세부 사항 - 다시 검토해야 할 가정 - 잠재적인 엣지 케이스 - 현재 Claude Opus, Sonnet, Haiku를 주 모델로 사용할 때 활성화할 수 있으며, 향후 다른 모델 조합도 실험할 예정입니다. ## 복잡한 작업에서의 효과 - SWE-Bench Pro의 실제 오픈소스 프로젝트 기반 대형 코딩 문제로 평가했습니다. - Claude Sonnet 4.6과 GPT-5.4 Rubber Duck 조합은 Claude Opus 4.6 단독 실행과 유사한 해결률을 기록했습니다. - Sonnet과 Opus의 성능 차이 중 74.7%를 줄였습니다. - 특히 다음 조건의 작업에서 효과가 컸습니다. - 3개 이상의 파일을 수정하는 작업 - 70단계 이상이 필요한 장기 작업 - 복잡한 리팩터링과 아키텍처 변경 - 성능 개선 폭은 일반적으로 Sonnet 기준 3.8%, 가장 어려운 문제에서는 4.8%였습니다. ## Rubber Duck이 발견한 오류 사례 - **스케줄러의 구조적 오류** - 스케줄러가 시작 직후 종료되어 작업을 하나도 실행하지 못하는 문제를 발견했습니다. - 수정하더라도 내부 작업 중 하나가 무한 루프라는 추가 문제도 확인했습니다. - **반복문으로 인한 데이터 손실** - 반복문이 매번 같은 `dict` 키를 덮어쓰는 버그를 찾았습니다. - 그 결과 Solr 검색 요청에서 네 개의 facet 범주 중 세 개가 조용히 사라졌습니다. - **파일 간 데이터 흐름 단절** - 여러 파일이 Redis 키를 읽지만 새 코드가 해당 키를 더 이상 기록하지 않는 문제를 발견했습니다. - 배포 후 이메일 확인 UI와 정리 작업이 조용히 고장 날 수 있는 상황이었습니다. ## 검토가 실행되는 시점 Rubber Duck은 필요성이 높은 체크포인트에서 자동으로 호출되거나 사용자가 직접 요청할 수 있습니다. - **계획 작성 후** - 잘못된 설계 결정을 구현 전에 발견해 후속 오류의 누적을 막습니다. - **복잡한 구현 후** - 여러 파일에 걸친 코드의 엣지 케이스와 구조적 문제를 점검합니다. - **테스트 작성 후, 실행 전** - 테스트 커버리지의 공백이나 잘못된 단정을 찾아냅니다. - **에이전트가 작업 루프에 빠졌을 때** - 진전이 없는 상황에서 새로운 관점을 제공해 막힌 지점을 해결합니다. - **사용자 요청 시** - 사용자가 언제든 작업을 비판적으로 검토하도록 요청할 수 있습니다. - Copilot은 피드백을 반영한 뒤 무엇이 어떻게 바뀌었는지 보여줍니다. ## 사용 방법과 적합한 활용 사례 - GitHub Copilot CLI를 설치한 뒤 `/experimental` 명령으로 실험 기능을 활성화합니다. - 모델 선택기에서 Claude 모델을 선택하고 GPT-5.4 사용 권한이 있어야 합니다. - Rubber Duck은 자동으로 호출되거나 “작업을 검토해 달라”고 요청해 수동 실행할 수 있습니다. - 특히 다음 작업에 적합합니다. - 복잡한 리팩터링 - 아키텍처 변경 - 실패 비용이 큰 고위험 작업 - 테스트 커버리지 검증 - 구현 전 계획에 대한 독립적인 의견 확인 Rubber Duck은 코딩 에이전트를 단순히 더 오래 실행하는 대신, 서로 다른 모델 계열의 관점으로 중요한 의사결정을 교차 검증하려는 접근입니다. 복잡하거나 영향 범위가 큰 작업에서는 계획 단계와 테스트 실행 전에 검토를 요청하는 것이 실용적인 활용법입니다.

github

전 세계 AI 기회 확장: GitHub (새 탭에서 열림)

GitHub와 Andela는 AI 도구를 별도 교육 과정이 아니라 실제 프로덕션 개발 업무에 통합하는 방식으로 글로벌 개발자의 AI 활용 역량을 높였다. 2년간 Andela의 550만 명 네트워크를 대상으로 협력했고, AI Academy를 통해 3,000명의 엔지니어가 GitHub Copilot을 교육받았다. 사례에서 AI는 단순한 코드 생성보다 레거시 시스템 파악, 테스트 작성, 리팩터링 준비, 의사결정 지원을 통해 개발자의 자신감과 생산성을 높이는 데 효과적이었다. ## 지역에 따른 AI 학습 기회의 격차 - 아프리카, 남미, 동남아시아 등에는 뛰어난 개발자가 많지만 최신 기술, 멘토링, 학습 경로에 대한 접근성은 지역과 고용주에 따라 크게 다르다. - 불안정한 인터넷 연결, 고성능 컴퓨팅 부족, 클라우드 도구와 데이터 비용 등이 AI 학습을 어렵게 만든다. - 기존 교육 콘텐츠는 안정적인 인터넷과 충분한 자원을 전제로 하며, 지역 언어·문화·업무 환경을 충분히 반영하지 못하는 경우가 많다. - 비정규직이나 계약직 개발자는 재교육에 투자할 시간과 경제적 여유가 부족할 수 있다. - 저렴한 도구 접근성, 지역에 맞는 학습 과정, 커뮤니티 중심 생태계가 없으면 AI 발전이 기존의 기술 격차를 확대할 수 있다. ## 실제 업무 안에서 AI를 학습하는 방식 - 중견 개발자가 프로덕션 업무를 중단하고 AI를 실험하기는 현실적으로 어렵기 때문에, 학습은 기존 업무 흐름 안에서 이루어져야 한다. - 단순히 조직 전체에 AI 도구를 배포하고 자율적인 실험을 맡기는 것만으로는 충분하지 않다. - 어떤 직무가 AI의 효과를 크게 얻는지, 어떤 업무를 대상으로 하는지, 코드 리뷰와 품질 기준을 어떻게 바꿀지 명확히 해야 한다. - Andela는 개발자의 담당 업무와 AI 활용 가능성을 기준으로 참여자를 선정하고, 실제 운영 중인 시스템에 맞춰 직무와 교육 과정을 설계했다. - GitHub Copilot을 IDE, 풀 리퀘스트 리뷰, 리팩터링 작업에 직접 적용해 실제 제약 조건 속에서 효과를 평가했다. - 교육은 이상적인 연습 문제가 아니라 개발자가 실제로 유지보수해야 하는 시스템과 업무를 기반으로 구성됐다. ## 레거시 시스템 이해와 안전한 변경 - AI를 활용했을 때 가장 먼저 나타난 효과는 코드 작성 속도보다 낯선 시스템에 빠르게 적응하는 능력이었다. - 브라질의 시니어 엔지니어 Daniel Nascimento는 변경 전에 프로젝트의 목적, 아키텍처, 강점과 취약점을 파악하는 데 AI를 활용했다. - 테스트 커버리지가 부족한 레거시 코드에서는 리팩터링 전에 AI로 단위 테스트를 생성해 기존 동작을 보호할 경계를 만들었다. - 개발자들이 활용한 방식은 다음과 같다. - 기존 동작을 파악하기 위한 테스트 생성 - 복잡한 제어 흐름을 명확하게 만드는 리팩터링 초안 작성 - 시스템 경계와 구성 요소를 이해하기 위한 다이어그램 구상 - AI가 생성한 결과는 정리되지 않았거나 미묘한 오류를 포함할 수 있으므로, 개발자의 검토와 품질 관리가 여전히 필수적이다. ## 생산성보다 중요한 자신감과 판단력 - 몇 주간 실제 시스템에 AI를 적용한 개발자들은 다음과 같은 변화를 보고했다. - 익숙하지 않은 시스템에 더 빠르게 온보딩 - 모호하고 복잡한 업무를 맡는 데 대한 자신감 향상 - 환경 설정과 반복 작업에 쓰는 시간 감소 - 비즈니스 맥락과 실제 영향에 집중할 수 있는 시간 증가 - Daniel은 GitHub Copilot 사용 후 생산성이 약 50% 향상됐다고 평가했다. - 다만 효과의 핵심은 단순히 더 많은 코드를 빠르게 생성하는 데 있지 않고, 개발자가 시스템을 이해하고 더 나은 결정을 내릴 시간을 확보하는 데 있다. - AI는 개발자의 이해와 책임을 대체하지 않으며, 복잡한 프로덕션 환경에서는 검토·테스트·리팩터링 역량과 함께 사용해야 한다. ## 실무 적용을 위한 시사점 - AI 교육은 일회성 자격증 과정이 아니라 실제 담당 시스템과 업무에 연결해야 한다. - 모든 개발자에게 동일한 방식으로 배포하기보다 AI 효과가 큰 역할과 문제를 먼저 선정하는 것이 좋다. - 코드 생성뿐 아니라 테스트 작성, 레거시 분석, 문서화, 온보딩 등 초기 효과가 큰 영역부터 적용할 수 있다. - AI 도구의 도입 성과는 코드 생산량만이 아니라 시스템 이해 속도, 변경 안정성, 개발자의 판단력과 자신감까지 함께 평가해야 한다. - 지역별 인프라와 경제적 제약을 고려한 접근성 높은 교육·도구 지원이 글로벌 AI 격차를 줄이는 데 중요하다.