Rails 기능 개발: GitHub Copilot vs. 인간 개발자

Senior developers versus AI coding

작성자
RoboRuby
발행일
2025년 07월 11일

핵심 요약

  • 1 이 비디오는 Rails 애플리케이션에서 메시지 구독자 수를 동적으로 표시하는 새로운 기능을 개발하는 과정을 다룹니다.
  • 2 ThoughtBot 개발팀은 Hotwire(Turbo/Stimulus)와 기존 Rails 기능을 활용하여 재사용 가능하고 유지보수하기 쉬운 솔루션을 구현했습니다.
  • 3 반면, 동일한 작업을 수행한 GitHub Copilot은 새로운 API 엔드포인트와 `fetch` API를 사용하는 등 덜 효율적이고 통합적이지 못한 접근 방식을 보여주었습니다.

도입

이 비디오는 ThoughtBot의 선임 개발자인 Thiago와 CEO Chad Pitel이 Rails 애플리케이션 'Hub'에 새로운 기능을 추가하는 과정을 실시간 스트리밍으로 보여줍니다. 이 기능은 사용자가 메시지를 작성할 때 해당 메시지를 수신할 구독자의 수를 실시간으로 표시하는 것입니다. 흥미로운 점은 이 작업을 GitHub Copilot에도 동시에 할당하여 두 접근 방식의 효율성과 결과물을 비교한다는 것입니다.

현재 ‘Hub’ 앱에서는 메시지 작성 시 해당 메시지를 받을 구독자 수가 표시되지 않아, 사용자가 메시지 전송 전 알림 대상을 확인할 수 없습니다. ThoughtBot 개발팀은 이 문제를 해결하기 위해 RSpec을 이용한 테스트 주도 개발 방식을 채택하고, Hotwire(Turbo/Stimulus) 프레임워크를 활용하여 동적인 업데이트를 구현하고자 했습니다. 그들은 기존 people_to_notify 메서드를 재사용하여 멘션된 사용자까지 포함한 정확한 구독자 수를 계산하고, 전체 폼 재렌더링 대신 Turbo Frame을 통해 특정 부분만 업데이트하는 방식을 사용했습니다. 개발 과정에서 본문(body)이 비어 있을 때 발생하는 오류나 텍스트 입력 필드(Tricks)의 비활성화 문제 등 여러 난관에 부딪혔으나, 기존 코드와 Rails의 HTML 프리미티브를 최대한 재활용하여 해결책을 모색했습니다. 특히, change 이벤트와 로컬 스토리지에 저장되는 드래프트 기능 간의 충돌 가능성을 파악하며 디버깅하는 모습은 실제 개발 환경의 복잡성을 잘 보여줍니다.

동일한 기능 개발 작업을 할당받은 GitHub Copilot은 자체적으로 코드베이스를 분석한 후 솔루션을 제시했습니다. Copilot은 새로운 API 엔드포인트(interest_subscriber_count)를 만들고, Stimulus 컨트롤러에서 fetch API를 사용하여 구독자 수를 가져오는 방식을 선택했습니다. 초기 구현에서는 멘션된 사용자를 고려하지 않았고, 통합 테스트(integration spec) 대신 API 요청 테스트만 작성했으며, CI(Continuous Integration) 테스트가 실패하는 문제도 발생했습니다. 개발팀의 피드백(기존 messages/new 엔드포인트와 Turbo Frame 재사용)을 받은 후 Copilot은 HTML 부분 업데이트 방식으로 리팩토링했지만, 여전히 별도의 비-RESTful 엔드포인트와 fetch를 사용하는 등 개발팀이 의도한 Hotwire 기반의 Rails 친화적인 방식과는 차이가 있었습니다.

ThoughtBot 개발팀의 솔루션은 기존 Rails 컨벤션과 코드 재사용을 통해 더 견고하고 유지보수가 용이한 결과를 낳았습니다. 반면 Copilot의 솔루션은 기능 구현에는 성공했으나, 코드의 효율성, 재사용성, 테스트 커버리지 측면에서 한계를 보였습니다. 이는 Copilot이 코드베이스의 전체적인 맥락과 Rails/Hotwire의 철학을 완전히 이해하여 최적의 솔루션을 제시하는 데는 아직 부족함이 있음을 시사합니다. 특히 복잡한 기능 개발보다는 독립적인 버그 수정(flaky spec)에 더 강점을 보인다는 점이 강조되었습니다.

결론

이 비디오는 AI 기반 코드 도구인 GitHub Copilot이 복잡한 기능 개발에서 인간 개발자와 어떻게 협력하고 경쟁할 수 있는지를 실질적으로 보여줍니다. Copilot은 코드베이스 분석 능력과 빠른 초기 구현 속도를 보여주었지만, 기존 시스템과의 통합, 코드의 유지보수성, 그리고 Rails/Hotwire와 같은 특정 프레임워크의 관용적인(idiomatic) 사용 측면에서는 인간 개발자의 깊이 있는 이해와 경험이 여전히 중요함을 입증했습니다. 결국, 현재로서는 Copilot이 개발자의 생산성을 보조하는 강력한 도구이지만, 복잡하고 맥락 의존적인 개발 작업에서는 인간의 비판적 사고와 설계 능력이 필수적이라는 결론을 내릴 수 있습니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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