‘깃허브 코파일럿’이 언제나 적절하고 정확하며 실행 가능한 코드를 생성하는 건 아니지만 어느 정도 유용하다는 점은 부인할 수 없다.
컴퓨터 프로그래밍의 종말은 한두 해 된 이야기가 아니다. 하지만 여러 이유로 종말은 아직 오지 않았다. 가장 중요한 이유를 들자면 프로그래밍이 과학이나 공학이기도 하지만 그만큼이나 예술이기도 하다는 것이다.
‘AI 동료 프로그래머(AI pair programmer)’라고도 부르는 ‘깃허브 코파일럿(GitHub Copilot)’은 인텔리센스(IntelliSense) 등이 제공할 수 있는 수준을 약간 능가하는 프로그래밍 자동화를 지원하고자 한다.
물론 완전히 자율적이진 않다. 코파일럿이 유의미한 코드를 생성하려면 (개발자가) 먼저 의도를 선언(입력)해야 하고, 또한 코파일럿이 불가피하게 궤도를 이탈하면 이를 정상 궤도로 되돌릴 수 있도록 감독해야 한다.
코파일럿은 비주얼 스튜디오 코드(Visual Studio Code), 젯브레인 IDE(예: 인텔리제이 IDEA(IntelliJ IDEA)), 네오빔(Neovim) 인터페이스를 갖춘 클라우드 서비스다(사용자의 컴퓨터에서 실행되거나 깃허브 코드스페이스의 클라우드에서 실행).
그리고 이 클라우드 서비스는 수십억 줄의 공개된 코드를 학습한 언어 모델 ‘오픈AI 코덱스(OpenAI Codex)’로 구동되는 코드 예측 엔진이다.
여기서 코덱스와 코파일럿에 대한 논란이 있었다. 하지만 코파일럿의 잠재적인 저작권 및 프라이버시 침해에 관해 열변을 토하기 전에, 코덱스가 머신러닝 커뮤니티 내에서 공정 이용(fair use)이라고 간주되는 방식에 따라 공개적으로 사용 가능한 코드를 학습했다는 점을 이해해야 한다.
아울러 코덱스는 검색 엔진이 아니라 코드 합성기(code synthesizer)라는 점도 이해해야 한다.
이와 관련해 코파일럿 개발팀은 “이는 새로운 공간이다. (깃허브는) 이에 관해 개발자들과 토론하고 싶으며, AI 모델 학습의 적절한 표준 확립을 주도하고 싶다”라고 밝힌 바 있다.
깃허브 코파일럿의 작동 방식
깃허브에 따르면 오픈AI 코덱스는 공개적으로 사용할 수 있는 소스 코드와 자연어를 학습했다. 따라서 사람과 프로그래밍 언어를 모두 이해한다. 이를 통해 깃허브 코파일럿 편집기 확장 프로그램은 주석과 코드를 깃허브 코파일럿 서비스로 보내고, 오픈AI 코덱스를 사용해 개별 행과 전체 함수를 합성하여 제안한다. 나아가 서비스는 사용자의 선택을 바탕으로 향후 제안을 개선한다.
비주얼 스튜디오 코드에서의 깃허브 코파일럿 테스트
현재 코파일럿은 제한적인 테크니컬 프리뷰 상태다. 이를 설치하려면 프리뷰 프로그램 대기자 명단에 등록해야 한다.
등록 이메일을 받았다면 비주얼 스튜디오 코드 마켓플레이스의 깃허브 코파일럿 확장 프로그램 페이지로 가서 이를 설치할 수 있다. 그다음 비주얼 스튜디오 코드에서 해당 확장 프로그램을 승인해야 한다.
시작하기 페이지에는 직접 해볼 수 있는 튜토리얼이 있다(2번부터 시작). 이 튜토리얼에서 .JS 파일을 생성하고 아래의 예문을 입력한다.
function calculateDaysBetweenDates(begin, end) {
예문을 입력하면 함수 이름에서 추론한 완성형 코드를 얻을 수 있다. 다음 튜토리얼에서는 함수가 수행해야 할 작업을 요약한 주석을 입력하면 된다. 이를 통해 해당 주석에서 추론한 완성형 코드를 얻을 수 있다(함수 이름이 너무 막연하더라도 상관없다).
깃허브 코파일럿 기능
함수 이름과 요약 설명에서 함수 본문을 추론하는 것 외에도, 코파일럿은 편집 중인 파일의 다른 코드와 변수 이름에서 힌트를 얻을 수 있다. 예를 들면 타입스크립트에서 변수 이름 뒤에 콜론을 입력하면 코파일럿은 해당 유형을 채우려고 할 것이다.
가령 ‘var test1 =’을 입력하면 코파일럿이 ‘test’라는 단어에서 힌트를 얻어 이전 함수에서 실행 가능한 테스트를 생성할 것이다. 반복적인 패턴을 형성하는 여러 줄을 입력하면 코파일럿은 동일한 패턴의 더 많은 예를 생성한다.
코파일럿은 다양한 프레임워크 및 언어와 함께 작동한다. 파이썬, 자바스크립트, 타입스크립트, 루비, 고 언어(그리고 최근에는 자바)를 지원하며, C 계열 언어(C, C++, C#)는 향후 제공될 예정이다. 리액트(React) 등의 인기 자바스크립트 프레임워크도 매우 원활하게 작동한다고 한다.
깃허브 코파일럿의 한계
우선, 코파일럿이 언제나 적절한 코드, 정확한 코드, 실행 가능한 코드를 생성하는 건 아니다(테스트에서 3가지 경우를 모두 발견했다). 따라서 코파일럿이 생성한 코드를 반드시 검토해야 한다. 이를 구글 검색은 잘하지만 세심한 관리감독이 필요한 초보 프로그래머가 쓴 코드라고 생각하는 게 좋다.
코파일럿이 제공하는 첫 번째 코드 조각을 수락하지 않는 방법은 컨텍스트 메뉴에서 ‘코파일럿 열기(Open Copilot)’ 옵션을 사용하거나 ‘Ctrl-Enter’ 키 조합으로 별도 탭에 코파일럿 제안 창을 띄우는 것이다.
제안된 10가지 솔루션을 모두 살펴보고, 원하는 것과 가장 가까운 코드를 수락하라. 이렇게 하면 생성된 코드를 약간 편집해 탄탄하게 만들 수 있다.
한편 깃허브는 코파일럿 코드 생성에 관한 벤치마크를 실시했다. 그 결과는 다음과 같다.
“오픈소스 리포지토리에서 테스트 범위가 넓은 파이썬 함수 세트로 벤치마크를 진행했다. 함수 본문을 비우고 이를 깃허브 코파일럿이 완성하도록 했다. 첫 번째 시도의 성공률은 43%였고, 10번의 시도를 허용했을 때는 57%였다.”
‘43%’는 분명히 실무에 사용하기에는 그다지 좋은(또는 허용 가능한) 정확도가 아니지만 새로운 코드 생성 기술치고는 인상적인 수치다.
그럼에도 불구하고 유능한 코드 리뷰어라면 처음부터 직접 작성하는 것보다 코파일럿이 생성한 코드를 편집하는 것이 훨씬 더 빠르게 정확하고 견고한 코드를 얻을 수 있다. 생소한 라이브러리나 프레임워크로 작업하는 경우라면 특히 그렇다.
깃허브 코파일럿 예제
2021년 11월 5일을 기준으로 (코파일럿) 홈페이지에는 일반 코드 생성 예제 25개 그리고 코파일럿 갤러리에는 동영상 예제 4개가 제공되고 있다. 계속해서 다양한 프로그래밍 언어로 된 예제가 게시되리라 예상한다. 예제에 포함된 애니메이션과 갤러리의 MP4 영상은 볼만한 가치가 충분하다.
전반적으로 봤을 때 깃허브 코파일럿은 어느 정도 유용하다. 또한 현재의 성능은 (코파일럿이) 미래에 훨씬 더 많은 시간을 절약해줄 수 있으리라는 희망을 준다. 물론 이것이 출시됐을 때 구매할 가치가 있을지는 성능 발전 여부뿐만 아니라 개발자 본인의 스킬 및 역할에 달려 있다.
한편 깃허브 코파일럿과 경쟁하는 여러 제품이 있다. 가장 유망한 제품은 ‘탭나인(Tabnine)’이다. 탭나인은 인텔리센스를 강화한 버전처럼 보인다. 오픈소스 코드뿐만 아니라 개발자 본인이 만든 코드를 선택적으로 학습시킬 수 있다. 다른 대안 제품 몇 가지는 스택오버플로우에서 관련 코드를 검색한다는 점에서 다소 염려스러운 방식이 아닌가 싶다.
깃허브 코파일럿을 사용해보고, 시간 경과에 따른 발전 상황을 추적하는 일은 확실히 가치가 있을 것이다.
* Martin Heller는 인포월드의 기고 편집자이자 리뷰어다. 최근에는 알파 소프트웨어(Alpha Software)의 기술 및 교육 부문 부사장과 투비파이(Tubifi)의 회장 겸 CEO를 역임했다. ciokr@idg.co.kr