3분
Github Copilot
Your AI pair programmer - Github Copilot
Github Copilot은 2021년 6월 29일부터 미리보기 버전으로 출시된 지 8개월이 지났습니다. 처음 런칭 발표 당시, 그리 큰 기대를 갖고 있지 않았습니다. 선입견과 의구심이 있는 가운데, Copilot이 제대로 원하는 코드를 작성해 줄 것인지, 아니면 오히려 방해가 될 것인지 불확실했습니다.
그러나, Github Copilot 리뷰 영상들이 올라오고 후기들이 나오면서 대부분의 인상이 "매우 놀랍다"라는 것이었습니다. 저도 궁금증이 더 커지기도 하고 해서 preview waitlist에 이름을 올리게 되었습니다. 대략 2~3달 후에 이용 승인을 받았고, 이후로 계속해서 Github Copilot을 사용해 오고 있습니다.
Github Copilot이란 무엇인가?
Github Copilot은 GPT-3 모델을 기반으로 하는 OpenAI Codex를 이용하여 만든 프로그램입니다. 학습 데이터로는 Github에 오픈된 모든 코드가 사용되었습니다. 이를 AI Pair 프로그래머라고 소개하며, 주석과 코드의 컨텍스트를 이용해 개별 라인과 전체 함수에 대한 실시간 제안을 합니다. 현재 Visual Studio Code, Neovim, JetBrains IDE에서 사용 가능합니다.
Github Copilot은 어떻게 작동하는가?
변수, 함수 이름, 주석 등을 기반으로 Github Copilot이 다음에 작성할 코드를 예측하고 제안합니다.
프로젝트에 이미 작성한 코드를 컨텍스트로 삼아 최대한 일치하는 코드를 생성하려고 시도합니다.
IDE Copilot 플러그인을 통해 사용자의 주석이나 코드가 서비스로 전송되며, OpenAI Codex를 활용해 코드를 합성하고 제안합니다.
작성 중인 파일의 다른 코드와 변수 이름과의 상호작용도 가능합니다.
Github Copilot이 개발자를 대체할 것인가?
Github Copilot이 개발자를 대체하거나 위협할 것이라고 생각하기 보다는, 개발자의 도우미 역할을 할 수 있다고 볼 수 있습니다.
Copilot은 엔지니어가 아닌, 자동화 도구일 뿐입니다. 프로그램은 간단하지 않으며 항상 컨텍스트를 고려해야 합니다.
개발에 있어서 자동화는 항상 따라다니는 수식어 같습니다.
Copilot은 적절한 해결책을 제안해주는 능력이 있지만, 그것이 해당 프로그램에서 가장 적절한 방법이라고는 확신할 수 없습니다.
제약사항과 프로젝트의 전반적인 요구사항을 파악하는 능력은 개발자에게만 있습니다. Copilot은 누군가의 코드를 기반으로 생성된 AI이기 때문에, 버그와 문제에 더 주의해야 합니다. 사용하면서 느낀 것 중 하나는, Copilot이 제공한 코드가 항상 완벽하지는 않다는 것입니다. 따라서 개발자는 이 부분을 항상 주의하며 코드를 검토해야 합니다.
결론적으로, Github Copilot은 개발자의 업무를 완전히 대체할 수 없습니다. 그러나 이 도구를 사용함으로써 개발자는 반복적이고 지루한 작업에서 벗어나 더 창의적이고 전략적인 문제 해결에 집중할 수 있게 됩니다. Copilot은 개발자의 도우미로서의 역할을 잘 수행하며, 개발 과정을 더욱 효율적이고 즐거운 경험으로 바꿔줄 것입니다. 그렇기에 개발자들은 Copilot과 협력하여 더 나은 결과물을 만들어낼 수 있을 것입니다.
이슈
라이센스 문제가 가장 큰 이슈입니다. GitHub Copilot는 오픈 소스 코드를 학습했지만, 이로 인해 라이센스 문제가 발생할 수 있습니다.
- GPL 라이센스로 학습한 모델이 생성한 코드는 GPL 라이센스를 따라야 하는가?
- 학습에 사용된 라이센스가 있는 코드를 생성한 코드는 누가 소유하는가?
- 등등
이외에도 보안 문제, 악의적인 코드, 버그 포함 가능성, parroting(학습 데이터가 그대로 나오는 현상) 등의 문제가 있을 수 있습니다. 이를 해결하기 위해 현재 preview를 진행하고 있다고 합니다.
Review
Amazing
첫 인상은 "매우 놀라운"이었습니다.
누군가가 코딩을 옆에서 누가 도와주는 느낌이었습니다. 내가 다음에 무엇을 할지 알고 있는 듯한 느낌이 들었던 적도 있습니다. AI Pair 프로그래밍에 걸맞게, 정말로 누군가와 페어 프로그래밍을 한다면 이런 느낌일까? 라는 생각도 들게 되었습니다.
1. 컨텍스트 유지
GitHub Copilot는 정확한 제안을 통해 사용자의 컨텍스트를 유지할 수 있게 도와줍니다.
종종 쓰이는 문법이나 함수들에 대해서 항상 기억하지 못하기에 매번 구글링을 통해서 진행한적이 있지 않으신가요? 저는 그런 경우가 꽤 있습니다. 언어를 바꾸어 사용하거나 서버 프로그램, 클라이언트 프로그램을 동시에 작업을 하거나 이런 경우 그렇게 되는 것 같습니다.
- 이 언어에서는 이 syntax는 어떻게 작성하지?
- 이 프레임워크에서는 라우트 설정은 어떻게 진행하더라?
- 등등
머리가 부족해서 이런 경우가 꽤 되는데 그럴 때마다 구글링을 하고 오면(시간이 꽤 걸리기도 하고) "음... 내가 무엇을 하고 있었더라?" 라는 컨텍스트 유지가 어렵습니다.
Copilot은 꽤 정확도가 높은 제안을 통해서 제 컨텍스트를 유지할 수 있게 도와주는 점에서 좋았습니다.
2. 번거로운 작업 해결
번거러운 설정파일, 실행 문법, 도커 설정, DB 설정 등
웹팩이나 바벨 같은 설정이나 config파일, yaml 문법 등 다양한 곳에서도 Copilot의 도움을 받을 수 있어서 좋았습니다.
매 번 설정할 때마다 100을 모두 다 검색했다면, 50정도는 Copilot을 통해서 "아 맞다 이거였지?" 하며 부드럽게 넘어갈 수 있었던 게 좋았습니다.
3. 코드 컨벤션
누가 읽어도 이해가능한 변수명, 함수명, 클래스명 등 가독성 있는 코드를 작성하는 규칙
Copilot이 제 머리속을 뒤지지 않는 이상 제 코드에서 분석할 수 있는 요건은 정해져있습니다.
파일명, 모듈병, 변수명, 클래스명, 함수명, 주석 등이 Copilot에게 제공되는 INPUT
입니다.
그래서 누구라도 읽어서 이해할만한 convention으로 작성해야만 정확한 Copilot 제안을 OUTPUT
으로 얻을 수 있습니다.
이런 점이 code convention을 자연스럽게 익히고 연습하도록 하는 점이 좋았습니다.
4. 최소한의 안내
Copilot이 늘 정확한 제안을 하는 것은 아닙니다. 위에도 작성했듯이 프로그램 내에서 이 코드가 적절한 것 까지는 판단해주진 않습니다.
그러나 최소한 어느 길로 가야하는지, 즉 어떤 함수나 로직들이 사용되는지에 대한 최소한의 안내는 받을 수 있었던 것 같습니다. 그래서 검색할 때 시간을 줄여 빠르게 코드로 돌아올 수 있도록 해주었던 것 같습니다.
5. 학습 도구
Array range를 얻기 위한 함수를 작성하려 했는데 위와 같은 제안을 해주었습니다. 이전에 알지 못한 문법으로도 배열을 만들 수 있구나 라는 것을 배울 수 있었습니다.
postgres db를 처음 사용했는데 db command는 전혀 모르는 상태였습니다. 그러나 위와 같이 주석을 달고 Copilot에게 제안을 받아 무리없이 사용했습니다.
6. 단점
인터넷에서 Copilot의 결과를 가져오기 때문에 입력을 시작하고 실제로 제안을 받는 데는 딜레이가 있습니다. 간단한 코딩을 짜는데 Copilot의 결과를 기다리느라 시간을 낭비하지 않아야 합니다.
tab 단축키가 제안을 적용하는 키로 설정되어있는데, 종종 짜증(?)나게 하는 경우가 있습니다. 내가 지금 누른 tab키는 indent tab으로 쓴건데 종종 Copilot 적용이 되어버려 고통을 겪었던 적이 몇 번 있습니다.
위에도 작성되어 있지만 라이센스 문제가 아직 완전하게 해결된 것 같지는 않습니다. 기업에서 사용해야 될 때 항상 라이센스 문제를 생각해야 합니다.
현재 Preview 단계이기 때문에 많이 사용해보고 많이 피드백하여 쓰는 것이 좋을 것 같습니다.
마무리
저는 주로 javascript, typescript 언어를 쓰며 react, node 등을 사용합니다. docker를 쓰기도 하며, nginx, db, ci/cd 설정도 작성할 경우도 있습니다. 자주 쓰지 않거나 전혀 모르는 부분은 항상 구글링을 하며 시간을 많이 사용했었는데, Copilot을 통해서 그 시간이 조금은 준 것 같습니다.
Github Copilot이 완벽한 것도 아니며 프로그래머를 대체할 것이라고 생각도 하지 않습니다. 오히려 우리의 프로그래밍 효율성을 더 높게 만들어 더 나은 경험을 제공해줄 것이라고 생각합니다. 저 또한 그랬구요. 말그대로 부조종사(co-pilot) 처럼 생각하면 좋을 것 같습니다.
github은 개발자들에게 더 나은 DX(개발자 경험)를 제공하기 위한 로드맵을 가지고 있습니다. github.blog에 그와 관련한 글들이 있으니 읽어보시는 것도 좋을 것 같습니다.
reference
- https://github.blog/2021-06-29-introducing-github-Copilot-ai-pair-programmer/
- https://copilot.github.com/
- https://unicorn-utterances.com/posts/github-copilot-wont-replace-devs
마지막 업데이트
2/19/2022