AI 에이전트를 활용한 Ruby on Rails 불안정한(Flaky) 테스트 해결 전략

Can AI fix flaky Rails tests?

작성자
Short Ruby
발행일
2025년 06월 13일

핵심 요약

  • 1 Ruby on Rails 애플리케이션에서 발생하는 불안정한(flaky) 테스트를 진단하고 해결하는 과정을 다룹니다.
  • 2 수동 방식과 GitHub Copilot, Cursor와 같은 AI 에이전트를 활용한 해결 방법을 비교 시연합니다.
  • 3 테스트의 비결정적 순서 문제, 데이터베이스 쿼리 문제 등 다양한 원인과 그에 따른 테스트 및 코드 개선 방안을 제시합니다.

도입

이 영상은 Ruby on Rails 기반 애플리케이션에서 지속적으로 발생하는 '불안정한(flaky) 테스트'를 식별하고 해결하는 과정을 심층적으로 다룹니다. 호스트인 Chad Pitel은 개발자이자 THBOT의 CEO 겸 창립자로서, CI 서버에서 수개월간 무시되어 온 불안정한 테스트를 수동으로 수정하는 방법과 GitHub Copilot, Cursor(Claude 모델 활용)와 같은 AI 에이전트의 도움을 받아 해결하는 과정을 상세히 시연합니다. 이 과정을 통해 불안정한 테스트의 근본 원인을 파악하고, 코드 또는 테스트 자체를 개선하여 안정성을 확보하는 전략을 제시합니다.

첫 번째 불안정한 테스트 사례는 페이지에 표시되는 ‘land’와 ‘sea’ 팀 이름의 순서가 비결정적으로 나타나 테스트가 실패하는 문제였습니다. 이는 formatted_teams_helper에서 기본 팀(primary team)이 명시적으로 설정되지 않아 발생하는 순서 문제였습니다. Chad는 초기에는 헬퍼 코드 자체를 수정하여 정렬을 강제하는 방안을 고려했으나, 기본 팀이 먼저 표시되어야 하는 비즈니스 로직을 보존하기 위해 테스트를 더 견고하게 작성하는 방향으로 선회했습니다. 즉, primary_team 속성을 명확히 설정하도록 테스트를 개선함으로써 순서 문제를 해결했습니다. 이 과정에서 AI 에이전트들은 처음에는 헬퍼 함수의 정렬을 제안했지만, 기본 팀의 순서 보존이라는 추가적인 맥락을 제공하자 테스트 수정 방향으로 전환하여 동일한 해결책에 도달했습니다.

두 번째 사례는 동일한 시작 시간을 가진 이벤트들의 표시 순서가 비결정적이어서 발생하는 불안정한 테스트였습니다. SummitPresenter#schedule 메서드에서 order_by_start_time만으로는 동일 시간대 이벤트의 순서를 보장할 수 없다는 것이 문제의 핵심이었습니다. 해결책은 쿼리에 id와 같은 보조 정렬 기준을 추가하여 항상 결정적인 순서를 보장하도록 하는 것이었습니다. 이 사례는 AI 에이전트가 초기 진단에서 정확한 원인(동일 시작 시간)을 파악했음에도, 화면 스크롤 문제로 인해 사용자가 이를 즉시 인지하지 못했던 흥미로운 상황을 보여주며, AI의 진단이 때로는 사용자보다 정확할 수 있음을 시사했습니다.

세 번째 사례는 백그라운드 작업 큐잉과 관련된 불안정한 테스트였습니다. 이 테스트는 특정 조건(Freshworks account ID, 도메인 존재, 스팸 아님, 일정 기간 이전에 처리됨)을 만족하는 기회(opportunity)에 대해서만 작업이 큐에 추가되어야 함을 검증했습니다. 문제는 distinct on 절과 데이터베이스의 자동 증가 ID가 결합되어, 테스트에서 예상한 특정 기회 객체가 아닌 다른 기회 객체가 큐에 추가될 수 있다는 점이었습니다. 해결책은 큐에 추가된 작업의 인수를 검사하여 Freshworks account ID를 기준으로 일치 여부를 확인하는 방식으로 테스트를 개선하는 것이었습니다. 이는 객체 참조 대신 실제 비즈니스 속성을 기반으로 검증하는 것이 불안정한 테스트를 방지하는 데 효과적임을 보여줍니다.

결론

이 영상은 불안정한 테스트를 해결하는 데 있어 수동 분석과 AI 에이전트의 협업이 얼마나 중요한지를 명확하게 보여줍니다. AI는 문제의 초기 진단과 해결책 제안에 탁월한 능력을 보이지만, 코드의 비즈니스 로직에 대한 깊은 이해와 테스트의 목적을 명확하게 전달하는 것은 여전히 개발자의 역할임을 강조합니다. 특히, 기존에 명시적인 테스트가 없던 비즈니스 로직(예: 기본 팀 우선순위)에 대한 새로운 테스트를 추가함으로써 AI 에이전트가 더욱 정확하고 의도에 부합하는 해결책을 제시하도록 유도할 수 있음을 입증했습니다. 궁극적으로 이 영상은 견고한 테스트 스위트가 안정적인 애플리케이션 개발에 필수적이며, AI 도구는 이를 달성하기 위한 강력한 보조 수단이 될 수 있음을 시사합니다.

댓글 0

댓글 작성

0/1000
정중하고 건설적인 댓글을 작성해 주세요.

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!