소개

전세계의 개발자들은 오늘도 비슷한 구조의 코드를 작성하는데 많은 시간을 보내고 있습니다. 코드 편집기에서는 이를 보조하기 위해서 편의성 단축키와 스니펫, 자동 완성 등과 같이 다양한 기능들을 지원합니다. 물론 이런 기능들이 많은 도움이 되기는 하지만, 여전히 반복되는 구조의 코드를 작성하는데 많은 시간이 들어가는 것이 사실입니다. 하지만 코드의 맥락을 읽고 그 뒤에 이어질 수 있는 여러 코드들을 제안할 수 있다면 얼마나 좋을까요? 바로 Github Copilot(이하 코파일럿)이 그런 기능을 제공합니다.

또한 코파일럿은 수십억 줄에 달하는 공용 저장소의 코드를 훈련 데이터로 사용해서 코드의 맥락을 읽고 적절한 코드를 제시함으로써 개발자의 시간을 절약하고 집중력을 유지할 수 있도록 도와줍니다. 그리고 정말 다양한 프레임워크와 언어에서 코파일럿을 사용할 수 있습니다. 특히 자주 사용되는 언어인 Python, JavaScript, TypeScript, Ruby, Java, Go 위에서 더 잘 동작하지만 이외의 언어를 사용하더라도 코파일럿이 충분히 보조할 수 있습니다.

기능 살펴보기

이 코파일럿은 개발자가 사용하는 코딩 스타일에 적응할 수 있으며 다른 AI 기반의 코드 자동 완성 도구와는 다르게 정말 다양한 코드 문맥에서 유용한 코드를 제시합니다. 여기서 문맥은 현재 편집하고 있는 파일, 근처에 있는 파일이나 관련 파일 등을 종합적으로 고려합니다. 예를 들어, 주석을 작성하는 것만으로도 이를 기반으로 적합한 코드를 제안할 수 있습니다.

주석을 코드로 변환하기

그리고 당연하게도 반복되고 진부한 코드들을 빠르게 작성하고 싶을 때도 많은 도움을 줍니다.

코드 문맥을 읽어 전형적인 테스트 코드 작성하기

코파일럿이 제안한 코드가 마음에 들지 않으면 다른 제안을 받아볼 수도 있습니다.

다양한 코드 제안받기

그리고 이런 기능들은 개발자가 새로운 언어나 프레임워크를 접할 때 길잡이 역할을 해줄 수 있습니다. 프레임워크나 언어를 배울 때 별도의 문서를 빈번하게 찾아보지 않고 제안해준 코드를 참고할 수 있으며, 미처 생각하지 못한 로직이나 개발자의 실수 등을 조기에 잡아낼 수 있습니다. 물론 코파일럿이 제안하는 코드들은 완벽하진 않으며 언제까지나 코파일럿은 말 그대로 개발자를 보좌하는 역할을 하며 어디까지나 결정은 개발자가 내려야 합니다. 따로 테스트를 해주진 않으므로 개발자가 직접 작성한 코드와 마찬가지로 코드를 주의 깊게 테스트하고 리뷰해야 합니다. 코파일럿이 제안한 코드를 완벽하게 이해하지 못하면 오히려 독이 될 수 있으므로 항상 주의해야 합니다.

다운로드 하는 방법

Visual Studio Code, Visual Studio, JetBrains, Neovim의 확장 기능을 찾아보면 코파일럿을 찾아볼 수 있습니다. 아직은 버그가 많은 미개발 버전이라 향후 다양한 환경에서 코파일럿을 사용할 수 있도록 지원할 것 같습니다. 여기서는 자주 사용되는 Visual Studio Code와 JetBrains의 Intellij IDEA를 기준으로 설명하도록 하겠습니다.

Visual Studio Code

먼저 화면 좌측에 보이는 확장(Ctrl+Shift+X)을 누르고 마켓플레이스에서 'github copilot'을 검색합니다. 그리고 검색 결과의 상단에 있는 'Github Copilot'을 눌러 설치합니다.

그 후 코파일럿 테크니컬 프리뷰를 이용하기 위해서 Github에 로그인을 해야 하는데, 아래의 화면에서 'Sign in to Github'을 눌러 로그인한 후에 권한 허가 요청 페이지가 등장하면 허가를 누르시기 바랍니다. 그리고 '확장으로 URI를 열 수 있도록 허용하시겠습니까?'라는 창이 나타나면 열기 혹은 허용을 누르시면 됩니다.

만약에 아래의 경고 메시지가 나타난다면 Github Copilot의 테크니컬 프리뷰 대기자 명단에 아직 추가되지 않은 것입니다. 테크니컬 프리뷰 기간 동안에는 대기자 명단에 들어가있는 선발된 테스터들만 사용할 수 있습니다. 대기자 명단에 등록하려면 이곳을 방문해야 합니다.

아래와 같이 텔레메트리 관련 조항에 동의하냐는 메시지가 보이면 '동의(Agree)'를 누르시기 바랍니다. 텔레메트리 관련 조항이 무엇인지 궁금하다면 이 글의 뒷부분에서 확인하실 수 있습니다.

설치가 끝나면 Visual Studio Code 창 하단에 있는 상태 패널에서 코파일럿 아이콘을 확인할 수 있습니다. 이 상태 아이콘을 눌러 코파일럿을 전체적으로 비활성화 시킬 것인지 현재 사용하고 있는 언어만 비활성화 시킬 것인지 정할 수 있습니다.

사용 방법은 아래에 별도로 설명해두었으니 참고하시면 됩니다. 코파일럿이 제안한 코드 위에 마우스를 올리면 커맨드 팔레트를 확인할 수 있습니다.

여기서 Ctrl+Enter를 누르면 분할된 화면에서 코파일럿이 제안한 코드를 최대 10개까지 한 눈에 살펴볼 수 있습니다. 'Accept Solution'을 누르면 해당 코드가 삽입됩니다.

GitHub Copilot Nightly

테스트가 충분히 이루어지지는 않았지만 최신 기능과 새롭고 실험적인 기능을 사용하고 싶다면 나이틀리 버전을 사용할 수 있습니다. 이 확장은 이곳에서 설치할 수 있습니다. 3월 28일에 실험을 위한 기능들이 기존의 Copilot Nightly와 분리되어 새로운 확장으로 마켓플레이스에 등록되었습니다. 해당 확장은 이곳에서 설치할 수 있습니다. 이 게시글이 작성된 2022년 3월 30일을 기준으로 이러한 기능은 Visual Studio Code에서만 사용할 수 있습니다.

예를 들어서, Github Copilot Labs 확장을 사용하면 위에서 보는 바와 같이 궁금한 코드를 선택하여 코파일럿에게 설명해달라고 요구할 수도 있습니다. 예시 코드를 생성하거나 선택한 코드를 다른 언어로 번역하는 기능도 있으나 아직 완전하지는 않은 것 같습니다.

JetBrains IntelliJ IDEA

JetBrains의 마켓플레이스로 들어가기 위해서 'File > Settings(Ctrl+Alt+S)'를 눌러 Plugins에서 'github copilot'을 검색합니다. 설치 버튼을 누른 뒤 설치가 완료되면 IDE를 재시작합니다. 만약에 '서드파티 플러그인 개인정보처리방침(Third-Party Plugins Privacy Notice)'이 나온다면 이에 동의해야 사용할 수 있습니다.

추가된 코파일럿은 'Tools > Github Copilot' 또는 창 하단에 있는 상태 패널에서 확인할 수 있습니다. 우선 코파일럿을 사용하기 위해서는 깃허브에 먼저 로그인을 해야하는데 우측 하단에 표시된 메시지에서 'Sign in to Github'를 누르거나, 상태 패널의 코파일럿 아이콘을 눌러 'Login to Github'을 누르시면 됩니다.

그러면 아래와 같은 창이 등장할 것입니다. Github 계정을 IDE에 연결하기 위해서 웹사이트에 들어가 디바이스 코드를 입력해야 합니다. '복사 후 열기(COPY AND OPEN)'을 눌러 Github 사이트에 들어갑니다. 디바이스 코드를 붙여넣은 뒤 'Continue' 버튼을 누릅니다. 그 후 코파일럿이 사용자를 대신해서 코드를 작성할 수 있도록 권한을 요청하는데 'Authorize Github Copilot Plugin' 버튼을 눌러 권한 요청을 허가합니다.

아래와 같은 창이 등장하면 '동의(AGREE)' 버튼을 눌러야 합니다. 텔레메트리 관련 조항이 무엇인지 궁금하다면 이 글의 뒷부분에서 확인하실 수 있습니다.

설치가 마무리되면 자유롭게 사용하시면 됩니다. 참고로, 창 하단에 있는 상태 패널에서 코파일럿 아이콘을 확인할 수 있습니다. 이 상태 아이콘을 눌러 코파일럿을 전체적으로 비활성화 시킬 것인지 현재 사용하고 있는 언어만 비활성화 시킬 것인지 정할 수 있습니다. 사용 방법은 아래를 참고하시기 바랍니다.

사용 방법

  • 코파일럿이 제안한 코드를 수락하기: Tab
  • 코파일럿이 제안한 모든 코드를 거절하기: Esc
  • 제안된 다른 코드를 확인하기:
    • 윈도우/리눅스의 경우: 'Alt + ]'나 'Alt + ['
    • 맥의 경우에는 'Option(⌥) + ] 혹은 Alt + ]'나 'Option(⌥) + [ 혹은 Alt + ['
  • 분할된 화면에서 여러 개의 제안(최대 10개)을 한눈에 보기: Ctrl + Enter

주의해야 할 점

개인 데이터 수집 문제

자세한 내용은 이곳을 눌러 텔레메트리 관련 조항을 살펴볼 수 있습니다. 간단히 말하면, 코파일럿은 더 나은 사용자 경험을 위해서 IDE와 코파일럿이 상호 작용 시 발생하는 이벤트(코파일럿 성능, 사용하고 있는 기능, 사용자가 수락, 수정, 거절한 제안 등)에 대한 정보를 수집합니다. 이런 정보에는 Github 프라이버시 정책에 나와있는 사용자의 개인정보를 포함한 개인 데이터(소스 코드 조각, 저장소나 파일의 경로 등)도 들어갑니다. 논란이 되고 있는 부분이지만 암호화를 통해 Github 시스템에 안전하게 저장되며 접근을 엄격하게 통제하고 있다고는 합니다. 따라서 이런 정보들은 코파일럿이 다른 사용자에게 제안할 때 사용되지 않을 것이라고 나와 있습니다.

하지만 여전히 해당 데이터는 깃허브 코파일럿 팀 혹은 깃허브 플랫폼의 상태를 관리하는 팀, 마이크로소프트의 Azure 및 깃허브 코파일럿 팀, 깃허브 코파일럿 관련 일을 하고 있는 OpenAI 직원이 접근할 수 있습니다. 마이크로소프트로 보내진 코드 조각이 임시로 저장되었다가 분석이 끝나면 폐기되는 것인지, 영구적으로 저장이 되는 것인지는 조항에도 나와있지 않습니다. Git 서버를 직접 운영하지 않고 아닌 깃허브의 개인 저장소를 이용 중이라면 코파일럿을 사용하지 않더라도 이미 이러한 문제에 노출된 셈입니다.

요즘은 이미지를 개선하려고 부단하게 노력하고 있지만 마이크로소프트가 사용했던 EEE 전략 등으로 마이크로소프트(그 외의 빅테크 기업도 마찬가지)에 반감을 갖고 있었던 개발자들도 많아서 이런 문제에 더 민감한 것 같습니다. 그러나 개인적으로는 마이크로소프트가 쌓아왔던 평판을 한 순간에 모두 무너뜨리고 대규모 소송으로 회사를 파멸로 내모는 길을 선택할지는 잘 모르겠습니다. 마이크로소프트를 신뢰하는 사람에게는 그리 큰 문제가 되지는 않을 것이라 생각하지만, 저는 기밀이 요구되는 프로젝트에는 가급적이면 사용하지 않을 거 같습니다.

라이선스 관련 문제

변호사가 아니기에 이 문제에 대해서 자세히 언급할 수는 없지만, 코파일럿이 제안한 코드에는 다른 사람이 작성한 코드가 들어갈 수 있으며 이는 라이선스 및 저작권의 대상이 될 수 있습니다. 코파일럿의 FAQ를 보면 아래와 같은 내용을 확인할 수 있습니다.

깃허브 코파일러는 검색 엔진이 아니라 코드 신시사이저입니다. 이 신시사이저가 제안하는 코드는 대부분 유일무이하게 만들어져 지금까지 볼 수 없었던 것입니다. 약 0.1%의 경우에는 제안한 코드에 훈련 데이터(training set)에서 나온 스니펫 코드가 글자 그대로 들어갈 수도 있습니다. 이곳에서 모델의 행동에 관한 심층 연구를 확인할 수 있습니다. 이런 케이스 대부분은 충분한 문맥(context)을 제공하지 않거나(특히 빈 파일을 편집할 때), 그 문제를 해결할 수 있는 일반적인 해결책이 있을 때 일어납니다. 저희는 깃허브의 공용 저장소에서 반복되는 보기 드문 사례를 발견하고 이를 억제하기 위하여 필터를 구축하고 있습니다.

말 그대로 정말 희박한 확률로 어떤 라이선스가 달려있는지도 모르는 코드 조각을 토씨 하나 안 틀리고 사용자에게 제안할 수 있다는 것입니다. 코드를 작성한 사람의 허가없이 라이선스를 제거한 코드를 제안하므로 이를 코드 세탁이라고 부르는 개발자들도 있습니다.

예를 들어서, 아래에서 플라스크를 개발한 아르민 로나허(Armin Ronacher)가 게시한 트윗을 살펴보면 코파일러가 퀘이크 3 아레나(퀘이크가 사용하는 라이선스는 GPLv2)에 쓰인 고속 역 제곱근 알고리즘 코드를 그대로 생성한 뒤, 이어서 잘못된 저작권자 이름이 들어간 BSD2 라이선스 정보를 그대로 붙여넣는 것을 볼 수 있습니다(아래 이미지를 누르면 해당 트윗으로 이동함).

이런 문제를 해결하려면 적어도 제안한 코드가 다른 프로젝트의 라이선스나 저작권을 위반할 수 있는지 확인할 수 있는 별도의 기능을 내장하고 있어야 할 것으로 보입니다.