우리는 2주 만에 Enzyme에서 마이그레이션했습니다. 5년이 걸렸어야 했습니다.

Asana 엔지니어링 팀Engineering Team
2026년 8월 7일
facebookx-twitterlinkedin
Asana 엔지니어링 스포트라이트

최근에 우리는 AI를 사용하여 한 번의 스프린트에서 수년간의 엔지니어링 작업을 완료했습니다. 그 방법과 이것이 가능성에 대한 우리의 생각을 변화시킨 이유를 소개합니다.

5년 문제

2022년에 우리는 Asana의 프런트엔드 테스트 스위트를 오래된 테스트 라이브러리인 Enzyme에서 React Testing Library(RTL)로 마이그레이션하기 시작했습니다. Enzyme은 커뮤니티 지원을 잃었고, React의 최신 버전과 잘 호환되지 않았으며, 사용자가 실제로 보고 실행하는 것보다 구현 세부 정보와 밀접하게 연계된 테스트를 장려했습니다. RTL은 내부 구조가 아닌 테스트 동작이라는 더 나은 모델로 우리를 이끌었습니다.

마이그레이션은 수년 동안 꾸준히 진행되었습니다. 이를 위해 여러 명의 엔지니어가 1년 동안 진행하는 여러 프로젝트에 인력이 배정되었습니다. 제품팀은 각자 담당하는 부분을 조금씩 처리했습니다. 이 모든 작업이 중요했습니다. 하지만 그때의 속도로는 완료까지 아직 약 5년이 더 걸릴 것이었습니다.

그래서 우리는 의도적으로 비합리적인 목표를 설정했습니다. 일주일 안에 전체 마이그레이션을 완료하면 어떨까요?

거의 해냈습니다. 엔지니어링에 약 1주 반이 걸렸습니다. 이제 Enzyme이 코드베이스에서 완전히 사라졌습니다.

실제 진행 방식

접근 방식은 거의 부끄럽게 간단했습니다. 우리는 OpenAI의 Codex를 사용하고, 초고급 추론을 위한 최첨단 모델을 사용했으며, 한 번에 최대 4개의 에이전트를 실행하고, 각각 다른 디렉터리를 가리키도록 했습니다. 기계를 계속 작동 상태로 유지하고, 에이전트를 낮과 밤 내내 실행했으며, 매일 아침과 저녁에 확인하여 진행 상황을 검토하고 진행 중인 끌어오기 요청을 열었습니다.

전체 프롬프트는 다음과 같습니다.

/목표 리포지토리를 Enzyme 테스트에서 React Testing Library 스타일 테스트로 마이그레이션하고자 합니다. 코드베이스의 기존 표준 및 모범 사례를 따르세요. /directory에 있는 Enzyme을 사용하는 모든 파일을 React Testing Library를 사용하도록 마이그레이션하세요. [test command] (으)로 변경 사항을 테스트하세요. 일반적으로 변환하기 쉬운 파일을 먼저 마이그레이션하는 경향이 있습니다.

다섯 문장. 그게 다였습니다.

우리는 또한 더 멋진 설정을 시도했습니다. 작업을 추적되는 티켓으로 나누고, 에이전트가 실행 중인 메모 파일을 유지하도록 하고, 하위 에이전트를 생성하여 더 병렬화하도록 요청하고, RTL 규칙에 대해 훨씬 더 상세한 프롬프트를 작성했습니다. 거의 모든 것이 상황을 악화시켰습니다. 단순성이 승리했습니다.

5문장 프롬프트로 충분했던 이유

이것이 가장 중요한 부분이며, OpenAI가 최근 Harness engineering 에서 언급한 것과 동일한 아이디어입니다. 에이전트의 결과물의 품질은 에이전트에 제공하는 환경의 품질에 크게 좌우됩니다.

당사의 코드베이스에는 RTL 채택에 대한 원래 결정, 잘 설계된 테스트 헬퍼, 명확한 규칙, 참고할 수 있는 실제 예 등 수년간의 훌륭한 경험이 이미 반영되어 있었습니다. 모델은 우리가 그 어떤 것도 설명할 필요가 없었습니다. 이미 읽을 수 있는 상태였습니다. 우리는 그저 목표를 제공하고 에이전트가 실행되도록 했습니다.

작업 자체도 이것이 효과를 발휘할 수 있는 적절한 형태를 갖추고 있었습니다. 깔끔하고 검증 가능한 완료 정의(더 이상 Enzyme이 필요 없음)와 실수를 즉시 발견할 수 있는 빠른 피드백 루프(타입 검사, 린팅, 테스트, CI)가 있었습니다. 좋은 하네스, 잘 정의된 문제, 최소한의 수동 작업이 필요합니다.

방해가 된 것

대부분의 마찰은 모델의 잘못이 아니라 우리 잘못이었습니다.

  • 최근 작성된 일부 내부 문서와 에이전트 지침은 여전히 Enzyme을 선호하는 패턴으로 지목하여 에이전트를 잘못된 방향으로 적극적으로 유도했습니다. 오래된 문서는 더 이상 사소한 성가심에 그치지 않습니다. 이를 읽는 모든 상담원에게 오해의 소지가 있는 교육 자료입니다.

  • 느리고 불안정한 도구(때때로 10분 이상 걸리는 lint 단계, CI와 로컬 검사 간의 불일치)는 우리가 가장 많이 개입해야 하는 부분이었습니다. 병목 현상의 원인이 에이전트인 경우는 거의 없었습니다. 병목 현상의 원인은 우리 자체 인프라였습니다.

이제 하네스가 제품입니다

이 프로젝트에서 얻은 더 명확한 교훈 중 하나는 AI가 엔지니어링에 대한 감각의 필요성을 없애지 않고 오히려 증폭시킨다는 것입니다. 코드베이스의 깔끔한 예시와 명확한 규칙은 깔끔하고 잘 구성된 아웃풋을 생성했습니다. 어색한 패턴도 복사되었습니다. 당사의 문서도 마찬가지였습니다. 오래된 지침은 인간이 읽을 때와는 전혀 다른 방식으로 부담이 되었습니다.

반대로, 이것이 다른 방향으로도 복합적으로 작용한다는 점은 고무적인 측면입니다. 좋은 예시가 퍼집니다. 명확한 문서는 에이전트를 올바르게 안내합니다. 코드와 관련된 설명서, 규칙, 피드백 루프 등 '하네스'에 투자하면 이번 마이그레이션뿐만 아니라 향후 모든 마이그레이션에서 효과를 볼 수 있습니다.

다음 단계

저희는 이것이 Asana에 어떤 의미가 있을지에 대해 낙관적입니다. 한편, 불안감을 느낄 수도 있다는 것을 알고 있습니다. 엔지니어링의 정체성은 수작업으로 코드를 작성하는 것과 밀접하게 연결되어 있기 때문입니다. 저는 이를 통해 기술에 대한 관심이 줄어드는 것이 아니라 오히려 더 커지고, 오랫동안 진행 중인 마이그레이션, 재작성, 그리고 항상 수년이 걸릴 것이라고 암묵적으로 생각했던 성능 문제의 백로그에 대해 더 야심차게 접근할 수 있기를 바랍니다.

이러한 모든 문제가 몇 년에서 일주일로 줄어드는 것은 아닙니다. 하지만 일부는 그럴 것입니다. 물어볼 가치가 있는 질문은 단순히 "여기서 AI를 사용하고 있나요?"가 아닙니다. "주말 동안 실제로 에이전트를 이 작업에 투입하고 월요일에 어떤 결과가 나왔는지 살펴봤는가?"입니다.


궁금한 분들을 위해 몇 가지 추가 세부 정보:

  • 전체 마이그레이션에는 약 1주 반의 엔지니어링 시간이 소요되었으며, 이는 캘린더 기준 2주에 걸쳐 진행되었습니다.

  • 모델 사용 비용은 약 11,000달러이며, 인프라 비용은 1,000달러입니다.

  • 12,000달러를 비교해 보기 위해 대략적으로 계산해보면, 이 작업은 궁극적으로 원래 프레임워크 마이그레이션 자체를 넘어서는 이점을 제공했습니다. 이 과정에서 테스트 범위도 개선하고, 불량 테스트를 수정하고, 기존 테스트 인프라를 정리했습니다. 해당 범위 전체를 수동으로 완료하는 데는 전체 엔지니어링 작업량으로 약 6백만 달러가 소요되었을 것으로 추정됩니다.

  • 그 과정에서 몇 가지 부수적인 성과를 거두었습니다. 예를 들어, 코드베이스의 일부에 여전히 남아 있는 것을 잊고 있던 훨씬 더 오래된 Enzyme 이전 테스트 프레임워크를 정리하는 작업이 있었습니다.

이 게시물은 Codex가 더 크고 더 야심찬 엔지니어링 작업을 어떻게 수행할 수 있는지 탐구하는 Asana와 OpenAI 간의 지속적인 협업 및 파트너십의 일환입니다.