컨텐츠 바로가기

11.29 (금)

“다재다능 코딩 도우미” 깃허브 코파일럿 완전 분석

댓글 첫 댓글을 작성해보세요
주소복사가 완료되었습니다
깃허브 코파일럿은 AI 보조 프로그래밍의 수준을 코드 생성과 코드 채팅 이상으로 끌어올렸으며, 새로운 기능도 빠른 속도로 출시되고 있다.
ITWorld

ⓒ Getty Images Bank

<이미지를 클릭하시면 크게 보실 수 있습니다>



마이크로소프트 리서치는 2014년 비주얼 스튜디오와 웹을 위한 실험적인 빙 코드 서치(Bing Code Search) 애드온을 출시했다. C#용 코드 조각 검색 툴인 빙 코드 서치는 자연어 인터페이스를 갖추고 스택 오버플로우와 MSDN, 닷넷펄(Dotnetperls), C샤프411(CSharp411)의 코드 인덱스를 사용했으며, 빙을 기반으로 애저에서 실행됐다. 이 툴에는 조각의 변수 이름을 자신의 코드에 있는 변수 이름으로 변경하기 위한 기능도 있었는데, 그다지 잘 작동하지는 않았다. 대체할 변수가 하나일 때 정확도는 70~80%였으며 이름을 바꿔야 하는 변수가 늘어날수록 정확도도 급격히 떨어졌다.

2014년에 나온 이 실험적인 마이크로소프트 빙 코드 서치 애드온이 더 진화한 결과가 바로 ‘깃허브 코파일럿’이다. 필자가 2021년 깃허브 코파일럿의 프리뷰 버전을 리뷰할 당시 생성되는 코드의 품질과 정확성은 오락가락했고 실행이 되지 않는 경우도 더러 있었지만, 어느정도 효용성은 있는 정도였다. 당시 깃허브 코파일럿의 엔진은 GPT-3.5 LLM을 기반으로 하는 오픈AI 코덱스(Codex)였고 코파일럿은 컨텍스트에서 현재 파일만 고려했다.

2년 후인 2023년, 필자는 채팅과 터미널 인터페이스, 풀 요청 지원, 그리고 오픈 AI GPT-4의 조기 도입을 통해 기존 깃허브 코파일럿을 더 확장한 기술 프리뷰 기능 모음인 깃허브 코파일럿 X를 리뷰했다. 깃허브 코파일럿 X 프리뷰는 원래의 깃허브 코파일럿에 비해 대폭 개선됐다. 사람의 도움을 많이 받지 않고도 올바른 함수와 테스트 모음을 곧잘 생성했다. 실수와 환각(가짜 정보 생성)도 여전히 발생했지만 예전만큼 심하지는 않았다.

그 이후에도 깃허브 코파일럿은 계속 발전했다. 정확성과 안정성이 더 높아졌고 명령줄 지원, 코드 편집, 코드 리뷰, 풀 요청에서 변경 사항에 대한 설명을 생성하는 기능 등 새로운 기능이 추가됐다. 또한 오픈 AI GPT 모델 외의 다른 모델도 지원하기 시작했다.

깃허브 코파일럿 기능

현재의 깃허브 코파일럿 기능에는 IDE 입력 시 코드 제안 생성, 알고리즘이나 데이터 구조와 같은 코드 및 관련 주제에 대한 채팅, 명령줄 사용 지원 등이 포함된다. 엔터프라이즈 구독을 사용 중인 경우 코파일럿이 풀 요청에서 변경 사항 설명을 생성하고 채팅을 위한 컨텍스트로 사용할 지식 기반을 관리할 수 있다. 또한 코파일럿 워크스페이스(Workspace)를 위한 여러 기능도 프리뷰 버전으로 포함돼 있으며, 잠시 후 이 부분에 대해서도 다룰 것이다.

사용 중인 IDE(integrated development environment)가 지원된다면(지원 목록은 다음 섹션 참조) 지금 바로 IDE에서 깃허브 코파일럿을 사용할 수 있다. 안드로이드, iOS, 아이패드OS용 깃허브 모바일에서는 채팅 인터페이스로 코파일럿을 사용할 수 있다. 또한 깃허브 웹사이트에서 채팅 인터페이스를 통해서도 사용 가능하며, 현재 ‘베타’로 표시돼 있다. 비즈니스 또는 엔터프라이즈 구독을 이용 중이라면 관리자에게 부가적인 제어 기능과 로그, 보고서가 제공된다.

깃허브 코파일럿은 일반적으로 월별로 업데이트되지만 업데이트마다 항상 개선되는 것은 아니다. 벤치마크로 측정한 효용성이 역으로 떨어지는 경우도 여러 번 있었다. 이 같은 현상은 모델이 더 많은 프로그래밍 언어 또는 프레임워크로 학습될 때, 그리고 정상 궤도에서 벗어나는 일부 경로를 제거하도록 학습될 때 발생하는 것으로 보인다. 업데이트에 따른 변화가 일상적인 사용에서 인지할 정도인 경우도 있고 그렇지 않은 경우도 있다. 가끔은 큰 개선이 이뤄지기도 한다. 예를 들어 컨텍스트에 원래 활성 파일만 포함하다가 열려 있는 모든 IDE 파일을 포함하도록 변경됐을 때, 오픈AI가 새로운 세대의 GPT로 기반 모델을 업그레이드했을 때 큰 개선이 이뤄졌다.

깃허브 코파일럿과 편집기 통합

깃허브 코파일럿은 애저 데이터 스튜디오, 젯브레인스 IDE, 빔(Vim)/네오빔(Neovim), 비주얼 스튜디오, 비주얼 스튜디오 코드와 통합되고 공식 지원된다. 이맥스(Emacs), 이클립스, 엑스코드의 경우 비공식적으로 지원된다. 애플 엑스코드에 대한 공식 지원은 2024년 10월 깃허브 유니버스에서 발표됐다.

깃허브 코파일럿은 여러 방식으로 인라인 코드를 제안할 수 있다. 설명적인 함수 이름을 부여하면 적어도 일부 경우에는 실제 작동하는 함수를 생성해준다. 활용할 컨텍스트가 별로 없을 때는 잘 작동하지 않고, 열려 있는 파일이나 학습 말뭉치에서 사용할 만한 비슷한 코드가 많은 경우에는 대체로 잘 작동한다.

인라인 주석에서 코드 블록을 생성할 때도 같은 조건이 적용된다. 또한 원하는 것을 구체적으로 표현하면 꽤 도움이 된다. “목록을 정렬해”와 같이 모호하게 말하면 버블 정렬 등 알려진 아무 정렬 알고리즘이나 선택해 사용한다. “짧은 실행 구간에서는 삽입 정렬로 전환되고 무작위 피벗 포인트가 있는 퀵소트 알고리즘을 사용해서 메모리 내에서 목록을 정렬해”라고 말하면 요청한 대로 정확히 실행될 가능성이 높고, 버블 정렬보다 훨씬 더 효율적일 것이다.

테스트 생성은 일반적으로 초기 코드 생성보다 자동화하기 쉽다. 깃허브 코파일럿은 특히 기존 테스트 모음을 편집기의 다른 곳에 열어둔 경우 “테스트” 단어가 포함된 모호한 주석에서 한두 번의 시도만으로 쓸만한 단위 테스트 모음을 곧잘 생성한다. 또한 일반적으로 추가 단위 테스트에 대한 힌트도 받는다. 다만 리팩터링해야 하는 반복적인 코드가 많이 나온다. 리팩터링은 코파일럿 챗에서 더 잘 작동하는 경우가 많다. 또한 코파일럿은 통합 테스트도 생성할 수 있지만 이를 위해서는 범위, 모의 객체, 테스트할 특정 함수, 필요한 검증에 대한 힌트를 제공해야 할 수 있다.

깃허브 코파일럿을 사용해 코드나 테스트를 생성할 때의 단점은 일관성 또는 신뢰성의 부족이다. 코파일럿(또는 다른 모든 LLM)이 생성하는 코드는 모르는 프로그래머의 풀 요청, 또는 음주 습관에 문제가 있는 신참 프로그래머의 체크인을 볼 때와 같이 꼼꼼한 검사가 필요하며, 많은 코드 리뷰와 테스트도 계획해야 한다.

최신 오픈AI 모델인 o1 제품군은 기존 GPT 제품군에 비해 이 부분에서 훨씬 더 낫지만 환각이 아주 없지는 않다.

깃허브 코파일럿 챗

편집기의 깃허브 코파일럿 챗은 코드를 제안하고 코드를 설명하고 단위 테스트를 생성하고 코드 수정을 제안할 수 있다. 또한 실제 페어 프로그래머처럼 함께 반복할 수도 있다.

최신 깃허브 코파일럿 챗 버전에서는 @workspace와 같이 앞에 @가 있는 키워드와 #file과 같이 #이 있는 변수를 사용해서 채팅 “참가자”를 지정할 수 있다. 쿼리를 제출할 때 “코파일럿에 묻기(Ask Copilot)” 상자에서 코파일럿 챗에서 사용할 모델을 선택할 수 있다. 현재 옵션은 GPT 4o, o1-mini(프리뷰), o1-preview(프리뷰)이며 모두 오픈AI의 모델이다. 설명서에는 앤트로픽의 클로드 3.5 소네트(Claude 3.5 Sonnet)도 언급돼 있는데, 이 기사를 쓰는 도중에 프리뷰로 나왔다. “개발자 선택”이라는 슬로건으로 새로운 모델에 대해 논의한 깃허브 유니버스 2024(Universe 2024) 행사에서 발표자는 구글의 제미나이 1.5 프로(Gemini 1.5 Pro)도 몇 주 내에 추가될 것이라고 말했다.

비주얼 스튜디오 코드 버전 1.95를 기준으로 깃허브 코파일럿 챗 사이드바의 위치는 왼쪽에서 오른쪽 보조 사이드바로 이동됐다. 왼쪽에 있을 때는 흔히 사용되는 다른 많은 기능과 공간을 공유해야 했다. 또한 인라인, 빠른 채팅 드롭다운 메뉴, 컨텍스트 메뉴의 스마트 작업에서도 코파일럿 챗을 호출할 수 있다.

코파일럿 챗에 /help 슬래시 명령을 요청하면 현재 다음과 같은 응답을 받는다.
깃허브 코파일럿

일반적인 프로그래밍 관련 질문을 하거나, 전문 지식을 갖추고 작업을 수행할 수 있는 다음 참가자와 채팅할 수 있습니다.
  • @workspace – 워크스페이스에 대해 질문
    • /explain – 활성 편집기의 코드가 어떻게 작동하는지 설명
    • /tests – 선택한 코드의 단위 테스트 생성
    • /fix – 선택한 코드의 문제에 대한 수정 제안
    • /new – 워크스페이스의 새 파일 또는 프로젝트를 위한 코드 스캐폴드
    • /newNotebook – 새 주피터 노트북 생성
    • /fixTestFailure – 실패한 테스트를 위한 수정 제안
    • /setupTests – 프로젝트에 테스트 설정(실험)
  • @vscode – VS 코드에 대해 질문
    • /search – 워크스페이스 검색을 위한 쿼리 매개변수 생성
    • /runCommand – VS 코드에서 명령 검색 및 실행
    • /startDebugging – 시작 구성을 생성하고 VS 코드에서 디버깅 시작(실험)
  • @terminal – 터미널의 작업 방법에 대해 질문
    • /explain – 터미널의 무엇인가에 대해 설명
  • @github – 웹 검색, 코드 검색, 기업의 지식 기반에 근거를 둔 대답 받기

다음 변수를 사용하여 부가적인 컨텍스트를 제공해서 질문에 대한 이해를 도울 수 있습니다.
  • #selection – 활성 편집기의 현재 선택 항목
  • #codebase – 코드베이스를 검색해서 쿼리 관련 정보 가져오기
  • #editor – 활성 편집기에 보이는 소스 코드
  • #terminalLastCommand – 활성 터미널의 마지막 실행 명령
  • #terminalSelection – 활성 터미널의 선택 항목
  • #file – 워크스페이스의 파일 선택

유익한 대화를 진행하려면 저를 실제 프로그래머라고 생각하고 질문하세요.
  • 파일을 열고 가장 중요한 라인을 선택해서 대화를 하고자 하는 코드를 보여주세요.
  • 후속 질문을 하고 설명을 추가하고 오류를 제공하는 등의 방법으로 대화를 다듬어 나가세요.
  • 제가 제안한 코드를 검토하고 문제점이나 개선해야 할 점을 알려주시면 다시 생성할 수 있습니다.

인라인 채팅 세션(⌘K I)을 시작하는 방법으로도 편집기 선택에 대해 질문할 수 있습니다.

비주얼 스튜디오 코드에서 깃허브 코파일럿에 대해 자세히 알아보세요.

깃허브 코파일럿 에딧(프리뷰)

필자의 비주얼 스튜디오 코드에는(스탠다드 버전과 인사이더 버전 모두) 깃허브 코파일럿 에딧(GitHub Copilot Edits)이 있지만 설명서에는 나와 있지 않다. 이 기능은 깃허브 유니버스 2024 기조 연설에서 시연됐다.

기본적으로 깃허브 코파일럿 에딧은 작업하고자 하는 파일 집합을 정의한 다음 원하는 변경 사항을 정의하도록 요청한다. 코파일럿 에딧은 코파일럿 챗과 마찬가지로 오른쪽 사이드바에서 실행된다. 둘의 가장 큰 차이는 코파일럿 에딧의 경우 여러 파일을 변경할 수 있고 코파일럿 챗은 그렇지 않다는 점이다. 다만 코파일럿 챗은 컨텍스트에 여러 파일을 사용할 수 있다.

깃허브 코파일럿 코드 리뷰(프리뷰)

깃허브 코파일럿 코드 리뷰(GitHub Copilot Code Reviews)는 두 가지 방법으로 코드를 검토할 수 있으며, 검토 후 피드백을 제공한다. 하나는 선택된 코드를 검토하는 방법이고(비주얼 스튜디오 코드 전용, 개방된 공개 프리뷰, 모든 프로그래밍 언어), 다른 하나는 모든 변경 사항을 더 심층적으로 검토하는 방법이다(VS 코드 및 깃허브 웹사이트, 대기자 목록이 있는 공개 프리뷰). 심층 검토에서는 맞춤형 코딩 가이드라인을 사용할 수 있다. 또한 지금은 C#, 고, 자바, 자바스크립트, 마크다운, 파이썬, 루비, 타입스크립트로만 제한된다.

CLI의 깃허브 코파일럿

깃허브 CLI와 함께 깃허브 코파일럿을 사용해서 셸 명령에 도움을 받을 수 있다. 단, gh 명령이 설치돼 있고 최신 상태여야 한다. 이 명령에 도움을 요청하면 다음과 같은 내용이 반환된다.
% gh copilot --help
Your AI command line copilot.

Usage:
copilot [command]

Examples:

$ gh copilot suggest "Install git"
$ gh copilot explain "traceroute github.com"

Available Commands:
alias Generate shell-specific aliases for convenience
config Configure options
explain Explain a command
suggest Suggest a command

Flags:
-h, --help help for copilot
--hostname string The GitHub host to use for authentication
-v, --version version for copilot

Use "copilot [command] --help" for more information about a command.

깃허브 코파일럿 프로그래밍 언어 지원

깃허브 코파일럿의 제안 기능은 많은 프로그래밍 언어와 프레임워크를 지원하지만 가장 잘 지원되는 언어는 파이썬, 자바스크립트, 타입스크립트, 루비, 고, C#, C++다. 학습 말뭉치에서 가장 많이 볼 수 있는 언어이기 때문이다. 또한 깃허브 코파일럿은 데이터베이스에 대한 쿼리 생성, API와 프레임워크, 코드형 인프라를 위한 제안 생성에도 도움을 줄 수 있다.

깃허브 코파일럿 확장 프로그램(공개 프리뷰)

현재 계정에 추가하고 깃허브 코파일럿 챗에서 앞에 @이 붙은 이름(예를 들어 @models@perplexityai)을 사용해서 호출할 수 있는 깃허브 코파일럿 확장 프로그램(GitHub Copilot Extensions)은 27개다. 필자는 이 두 개의 확장과 다른 몇 개를 설치하고 인증하는데 성공하긴 했지만 아직까지 그다지 유용한 부분은 발견하지 못했다.

원한다면 새 확장 프로그램을 만들 수 있다. 깃허브 코파일럿 확장 프로그램은 기본적으로 깃허브 앱이며, 깃허브 코파일럿 챗에 대한 부가적인 읽기 액세스 권한을 갖고 깃허브 코파일럿 API와 통합되고 다른 LLM과 선택적으로 통합된다. 확장 프로그램은 소유자가 검증된 크리에이터(Verified Creator) 자격을 갖춘 조직 계정이어야만 게시가 가능하다. 앱의 유료 요금제를 깃허브 마켓플레이스에 게시하려면 검증된 게시자인 조직이 소유해야 한다.

깃허브 코파일럿 워크스페이스(비공개 기술 프리뷰)

깃허브 코파일럿 워크스페이스는 “AI 네이티브” 개발 환경으로, 자연어와 통합 클라우드 컴퓨팅을 사용해서 리포지토리 전반의 코딩 작업에서 깃허브 코파일럿과 협업할 수 있게 해준다. 코파일럿 워크스페이스는 “작업 중심”이다. 즉, 깃허브 이슈, 코파일럿 워크스페이스 대시보드의 임시 작업, 또는 리포지토리 페이지의 임시 작업으로 시작할 수 있다. 깃허브 이슈의 경우 이미 정의되어 있으므로 “워크스페이스에서 열기(Open in Workspace)” 버튼을 사용해 코파일럿 워크스페이스가 문제 해결 방법을 찾도록 할 수 있다. 다른 두 가지의 경우 먼저 초안 이슈를 직접 정의한 다음 이를 코파일럿 워크스페이스에 전달해 해결하도록 해야 한다.

깃허브 코파일럿의 학습 방법

깃허브 코파일럿은 원래 오픈AI 코덱스 모델을 사용했다. 코덱스 모델은 기본적으로 GPT-3이며 여기에 깃허브 리포지토리의 많은 오픈소스 코드, 특히 파이썬 코드로 부가적인 학습을 거친 모델이다. 이후 버전에서는 GPT-4, 그 다음 GPT 4o를 사용했으며 지금은 다양한 방법식으로 학습된 여러 모델을 사용한다.

깃허브 코파일럿에 대한 우려

깃허브 코파일럿에 대한 초기 대중의 우려는 2022년에 일어난 집단 소송에서 잘 볼 수 있다. 원고측은 깃허브 코파일럿이 깃허브 사용자와의 계약 위반, 개인 식별 정보를 공유하는 프라이버시 침해에 해당한다고 주장했다. 2024년 7월 샌프란시스코 미국 지방 법원에서 기각됐지만, 판사가 모든 피고의 오픈소스 라이선스 계약 위반에 대한 원고의 소를 기각한 것은 아니다.

애플은 2024년 10월에 발표한 연구 보고서에서 LLM은 진정한 논리적 추론을 수행할 수 없다고 결론 내렸다. 프로그래밍을 위해서는 논리적 추론이 필요하므로 이 결론은 LLM이 코딩을 할 수 없음을 시사한다. LLM을 “확률적 앵무새”로 지칭하는 것과 같은 맥락이다. 또한 학생들이 오픈AI 코덱스 및 이와 비슷한 모델에 지나치게 의존하고 표절할 수 있다는 우려도 제기됐다. 모델을 사용한 프로그래밍으로 인해 프로그래머들이 바보가 될 것이라는 주장도 있다.

깃허브 코파일럿의 경쟁 상대

현재 10여 개의 깃허브 코파일럿 경쟁 솔루션이 있다. 코드 편집기에 내장된 모델로만 제한한다면 대표적으로 탭나인(Tabnine), 코디엄(Codeium), 코드지엑스(CodeGeeX), 리플릿 고스트라이터(Replit Ghostwriter), 데빈 AI(Devin AI), 젯브레인스 AI(JetBrains AI), 소스그래프 코디(Sourcegraph Cody), 아마존 Q 디벨로퍼(Amazon Q Developer)가 있다. 경쟁의 정의를 넓혀서 코드를 생성할 수 있는 채팅 모델까지 포함한다면 오픈AI, 앤트로픽, 구글, 미스트랄(Mistral), 메타 및 다른 여러 회사의 모델도 고려 대상이다. 또한 제드(Zed), 커서(Cursor)와 같은 비주얼 스튜디오 코드 대안, 그리고 솔버(Solver)나 젠코더(Zencoder)와 같은 “차세대” AI 코딩 제품도 있다.

깃허브 유니버스 2024 컨퍼런스 전까지 필자는 깃허브 코파일럿이 탭나인, 아마존 Q 디벨로퍼 또는 제드, 커서, 솔버, 젠코더를 비롯해 더 강력한 새로운 대안에 밀려나고 있는지 여부가 궁금했다. 지금은 이런 대안 중에서 VS 코드와 깃허브 코파일럿을 넘어설 수 있는 제품이 있는지가 궁금하다. 물론 경쟁 상대가 되지 않는다고 단정하는 것은 아니며, 앞으로도 계속 지켜봐야 할 것이다.
editor@itworld.co.kr

Martin Heller editor@itworld.co.kr
저작권자 한국IDG & ITWorld, 무단 전재 및 재배포 금지
기사가 속한 카테고리는 언론사가 분류합니다.
언론사는 한 기사를 두 개 이상의 카테고리로 분류할 수 있습니다.