OpenAI 하니스 엔지니어링: Codex를 활용한 무수동 코드 개발

OpenAI는 약 백만 줄의 코드를 포함하는 내부 소프트웨어 제품을 성공적으로 구축하고 배포했으며, 인간이 수동으로 작성한 코드는 단 한 줄도 없었습니다. Codex 에이전트를 활용함으로써 팀은 전통적인 수동 코딩에 비해 개발 시간을 대략 1/10 수준으로 줄였으며, 인간의 역할을 코드를 작성하는 것에서 에이전트 자율성을 가능하게 하는 환경, 사양 및 피드백 루프를 설계하는 것으로 전환했습니다.

"수동으로 작성된 코드 없음" 실험

2025년 8월부터, 소규모 엔지니어 팀이 Codex(GPT-5가 가이드) 를 사용해 초기 리포지토리 스캐폴드와 CI 구성부터 애플리케이션 로직, 문서, 내부 도구까지 모든 것을 생성했습니다. 5개월 동안 팀은 3명에서 7명으로 성장했으며, 약 1,500개의 병합된 풀 리퀘스트(PR)를 관리했습니다.

  • High Throughput: 엔지니어당 하루 평균 3.5개의 PR.
  • Comprehensive Generation: 에이전트는 제품 코드와 테스트뿐만 아니라 프로덕션 대시보드 정의, 평가 하네스, 그리고 리포지토리를 관리하는 스크립트까지 생성했습니다.
  • Human-in-the-Loop Steering: 인간은 작업 우선순위 지정, 사용자 피드백을 수용 기준으로 변환, 결과 검증에 관여했지만 코드를 직접 기여하지는 않았습니다.

엔지니어링 역할 재정의: 코딩에서 스캐폴딩으로

에이전트 우선 워크플로우에서는 주요 엔지니어링 병목이 에이전트의 능력이 아니라 환경 사양에 있습니다. OpenAI는 환경이 충분히 명시되지 않을 경우 진행이 정체되는 것을 발견했으며, 이로 인해 인간은 "깊이 우선" 작업에 집중했습니다: 고수준 목표를 더 작은 구성 요소로 나누고 에이전트의 작업을 가시화하고 강제할 수 있는 도구를 만드는 것입니다.

에이전트 간 워크플로우

인간은 주로 프롬프트를 통해 시스템과 상호작용합니다. PR을 완료하기 위해 Codex에게 다음과 같이 지시합니다:

  1. 자신의 변경 사항을 로컬에서 검토한다.
  2. 로컬 및 클라우드에서 추가 에이전트 리뷰를 요청한다.
  3. 모든 에이전트 리뷰어가 만족할 때까지 피드백을 기반으로 반복한다.

시간이 지나면서 팀은 거의 모든 리뷰 작업을 에이전트 간 상호작용으로 전환하여 인간의 PR 리뷰 필요성을 최소화했습니다.

에이전트를 위한 애플리케이션 가시성 향상

인간 QA의 부담을 줄이기 위해 OpenAI는 애플리케이션의 내부 상태를 Codex가 직접 읽을 수 있도록 하는 데 집중했습니다. 이를 통해 에이전트는 인간 개입 없이 시스템을 추론할 수 있습니다.

  • Runtime Access: 앱은 git worktree당 부팅 가능하며, Codex가 각 변경에 대해 격리된 인스턴스를 실행할 수 있습니다.
  • UI Validation: Chrome DevTools Protocol을 에이전트 런타임에 연결함으로써 Codex는 DOM 스냅샷과 스크린샷을 사용해 버그를 재현하고 UI 동작을 검증할 수 있습니다.
  • Observability: 에이전트는 로컬 관측 스택에 접근할 수 있어 LogQL을 통해 로그를, PromQL을 통해 메트릭을 조회하여 특정 성능 목표(예: 서비스 시작이 800ms 이하로 완료되도록 보장)를 충족합니다.

레코드 시스템으로서의 리포지토리 지식

OpenAI는 단일 매뉴얼이 에이전트에게 비효율적이라는 것을 발견했는데, 이는 작업 컨텍스트를 가리고 빠르게 오래되기 때문입니다. 대신에 그들은 "맵" 접근 방식을 구현했습니다:

  • AGENTS.md as a Table of Contents: 짧은 파일(약 100줄)이 더 깊은 진실 소스에 대한 포인터를 제공합니다.
  • Structured Documentation: docs/ 디렉터리는 레코드 시스템으로서 역할하며, 색인된 설계 문서, 아키텍처 맵, 제품 도메인에 대한 품질 등급을 포함합니다.
  • Execution Plans: 복잡한 작업은 버전 관리된 실행 계획에 기록되며, 의사결정 로그가 리포지토리에 체크인됩니다.
  • Mechanical Enforcement: 전용 린터와 "doc-gardening" 에이전트가 문서가 실제 코드 동작과 동기화되도록 보장합니다.

아키텍처 및 "맛" 강제

완전한 에이전트 생성 코드베이스에서 아키텍처 변화를 방지하기 위해 OpenAI는 구현 세부 사항을 미세 관리하기보다 엄격한 기계적 제약을 적용합니다.

경직된 아키텍처 모델

각 비즈니스 도메인은 고정된 레이어링 시스템을 따르며, 의존성 방향이 엄격히 검증됩니다: Types $\rightarrow$ Config $\rightarrow$ Repo $\rightarrow$ Service $\rightarrow$ Runtime $\rightarrow$ UI. 교차 관심사(예: 인증, 텔레메트리)는 명시적인 "Providers"를 통해서만 들어갑니다.

맛 불변식

맞춤형 린터는 "맛"과 신뢰성 요구사항을 강제합니다, 예를 들어:

  • 스키마/타입에 대한 구조화된 로깅 및 명명 규칙.
  • 파일 크기 제한.
  • 경계 파싱(예: Zod 사용)으로 "YOLO 스타일" 데이터 탐색을 방지.

엔트로피 및 "AI 슬롭" 관리

완전한 자율성은 최적이 아닌 패턴의 복제를 초래할 수 있습니다. OpenAI는 지속적인 "가비지 컬렉션" 프로세스를 통해 이를 관리합니다:

  • Golden Principles: 의견이 반영된 기계적 규칙이 리포지토리에 인코딩됩니다.
  • Automated Cleanup: 백그라운드 Codex 작업이 정기적으로 이러한 원칙에서 벗어난 부분을 스캔하고 리팩토링 PR을 열며, 이는 짧은 인간 리뷰 후 자동 병합되는 경우가 많습니다.

현재 역량 및 미래 미지수

시스템은 Codex가 새로운 기능을 엔드투엔드로 구동할 수 있는 임계점에 도달했습니다. 단일 프롬프트만으로 에이전트는 코드베이스를 검증하고, 버그를 재현(실패 영상을 기록)하며, 수정 사항을 구현·검증(해결 영상을 기록)하고, 피드백에 응답한 후 변경을 병합할 수 있습니다.

OpenAI는 이것이 내부 출시에서는 성공했지만, 몇 년에 걸쳐 아키텍처 일관성이 어떻게 진화할지, 모델이 더 강력해짐에 따라 시스템이 어떻게 적응할지는 아직 알 수 없다고 언급합니다.

Sources