Post

거대한 풀 리퀘스트를 어떻게 빠르게 보여줄 것인가—GitHub Copilot 앱이 택한 길

2,200개 파일, 100만 줄 이상의 변경을 다루는 초대형 풀 리퀘스트. GitHub Copilot 앱은 이를 빠르고 부드럽게 렌더링하기 위해 아키텍처를 재설계했다. 왜 이게 중요한가?

거대한 풀 리퀘스트를 어떻게 빠르게 보여줄 것인가—GitHub Copilot 앱이 택한 길

너무 커진 변경이 만드는 문제

원문을 확인해본 결과, GitHub이 공개한 가장 큰 풀 리퀘스트는 2,200개 파일에 100만 줄을 넘는 변경, 그리고 400개를 초과하는 인라인 리뷰 댓글을 담고 있었습니다.

이런 규모의 변경이 생기는 건 우연이 아닙니다. 원문에서 언급하듯 광범위한 리팩토링(broad refactors)이나 마이그레이션 같은 작업은 “하나의 변경으로 꼭 나뉘어야 할 때”가 있습니다. 스택된 풀 리퀘스트(stacked pull requests)로 쪼갤 수 없는 경우죠. 그렇게 되면 코드 리뷰 과정에서 댓글이 쌓이고, 화면에 표시해야 할 내용이 계속 늘어납니다.

문제는 이 거대한 변경을 다루는 화면이 여전히 “빠르고 부드러워야” 한다는 점입니다. 스크롤할 때 버벅거리거나, 댓글을 열었을 때 멈춘다면, 리뷰어의 작업 흐름이 깨집니다. 특히 1인 자동화 운영자나 시니어 창작자 입장에서는—GitHub Actions나 n8n 같은 도구로 대규모 코드 생성, 마이그레이션 작업을 자동화할 때 이런 대형 풀 리퀘스트가 자주 발생합니다. 그 때문에 이 문제는 단순한 UI 개선이 아니라 실제 업무 효율에 직결됩니다.

댓글이 가상화를 부러뜨린다

일반적으로 대형 diff를 빠르게 렌더링하려면 “가상화(virtualization)”라는 기법을 씁니다. 보이는 영역만 DOM에 마운트하고, 스크롤하면 필요한 부분만 그려내는 방식이죠. 이 방법은 코드 라인에 완벽하게 작동합니다. 모든 라인의 높이가 고정되어 있으니까요.

하지만 댓글은 다릅니다. 원문이 명확히 지적하는 세 가지 이유가 있습니다:

첫째, 마크다운이 어떻게 줄바꿈될지, 펼칠 수 있는 섹션이 있는지, 답글 상자가 있는지, 이미지가 로드되었는지—이 모든 게 렌더링 시점에야 알 수 있다는 것입니다. 높이를 미리 알 수 없으면 가상화 구조가 깨집니다.

둘째, 데이터 파이프라인이 중요합니다. 화면이 아무리 빨라도 데이터를 공급하는 과정에서 멈추거나, 이미 처리한 일을 버린다면 소용없다는 뜻입니다.

셋째(이게 핵심), 이런 문제들은 특정 엔진, 특정 스크롤 위치, 높은 부하 상황에서만 드러난다는 겁니다. 개발 환경에서는 작은 풀 리퀘스트로 테스트하니 발견하기 어렵습니다. GitHub이 시간을 들여 자동화된 측정 루프(change → measure → improve)를 돌린 이유가 이겁니다.

관찰 가능성이 해답이 되는 모습

원문에서 흥미로운 대목은 “우리가 실제로 버그를 찾은 방법(how we actually found the bugs)”입니다. 이건 단순히 “성능 최적화” 이야기가 아니라, 복잡한 시스템을 다루는 근본적인 접근법을 보여줍니다.

GitHub 팀은 “건강한 상태가 무엇인지 정의”하고, “표면(surface)에 계측(instrumentation)을 달아서” 측정했다고 명시합니다. 이는 대형 시스템을 다루는 실무자—특히 n8n 같은 자동화 인프라를 직접 구축한 사람들이 아는 접근법입니다. 로컬 환경에서 재현 불가능한 버그는 프로덕션 데이터와 관찰 도구로만 잡을 수 있다는 철학이 깔려 있거든요.

동시에 GitHub은 또 다른 네 가지 중요한 발표를 병행했습니다. Local sandboxing, OpenTelemetry 지원이 그것입니다. 이들은 모두 한 방향을 가리킵니다: 개발자가 자신의 도구와 워크플로우를 투명하게 관찰하고 제어하기를 원한다는 것입니다.

아직 진행 중인 질문들

흥미로운 점은 GitHub이 이 모든 기능을 “공개 미리보기(public preview)” 상태로 공개했다는 것입니다. Sandboxing도 그렇고, OpenTelemetry도 “subject to change”라고 명시되어 있습니다.

이는 “완성된 솔루션”이 아니라 “방향성을 함께 탐색하는 중”이라는 신호입니다. 예를 들어, 로컬 샌드박싱이 실제로 얼마나 개발 생산성을 해치지 않으면서도 보안을 지킬 수 있을지는 여전히 논쟁이 있는데, 이 부분은 계속 지켜봐야 할 지점입니다.

이 이슈는 다음 편에서 GitHub Copilot app의 에이전트 기능이 어떻게 이런 인프라 위에서 작동하는지, 그리고 1인 자동화 운영자가 실제로 이를 어떻게 활용할 수 있을지 이어서 다뤄보겠습니다.

This post is licensed under CC BY 4.0 by the author.