GitHub Copilot?
Github Copilot은 코드 자동 완성을 통해 Visual Studio, Visual Studio Code, Neovim, JetBrains 등의 통합 개발 환경 사용자를 지원하기 위해 Github가 2021년 출시한 자동 코드 완성 AI(인공지능)입니다.
OpenAI의 GPT-3 모델을 이용하여 Github으 수많은 코드들을 학습시키는 방식으로 개발되었습니다.
Github Copilot은 주석이나 함수 이름에 담긴 의미를 파악하여 코드를 자동 완성해, 단순하고 번거로운 작업을 자동화한다는 것이 특징인데, AI 코더들의 등장으로 인해 수준 낮은 코더들이 사라지고 프로그래머는 더욱 높은 전문성을 요구할 것으로 예상됩니다.
2022년 6월에 유료로 전환되었는데 가격은 월 10$, 연 100$이고 60일간 무료체험을 할 수 있습니다.
다만 학생이거나, 어느 정도 규모가 있는 오픈소스 리포지토리의 관리자의 경우 12개월의 무료체험을 계속해서 갱신하는 형태로 지속적으로 무료로 이용 가능하다고 합니다.
GitHub Copilot은 TypeScript, Google Go, Python, Ruby, Java, Javascript를 포함한 수십 가지 언어를 작성하는데 도움이 될 수 있습니다.
GitHub Copilot의 저작권 문제
GitHub Copilot은 처음 등장할 때부터 저작권 문제에 대한 의문이 있었습니다. GitHub가 게시된 코드들을 활용하여 Copilot을 훈련시키고 이를 통해 새로운 코드를 창작하는 것이 원 코드 제작자의 저작권을 침해하는가입니다.
실제로 GPL로 공개된 퀘이크 3의 Fast Inverse Square Root 구현 코드를 그대로 생성해 저작권 문제에서 결코 자유로울 수 없음을 보여줬습니다.(자료)
GPL은 오픈 소스 프로그램 개발자 또는 판매자를 위한 라이선스인데 무엇이 문제인가라는 생각이 들 수 있습니다.
이 의문을 해소하기 위해서는 GPL의 주요 조항을 봐야 하는데요. 다음과 같습니다.
- GPL 라이선스 프로그램을 어떠한 목적으로든지 사용할 수 있다.
- GPL 라이선스 프로그램의 소스 코드를 용도에 따라 변경할 수 있다. (개작 가능)
- GPL 라이선스 프로그램을 판매/배포 시 소스 코드도 요청하면 제공하여야 한다. (원본 배포 의무)
- 변경된 컴퓨터 프로그램 역시 프로그램의 소스 코드를 요청 시 제공해야 한다. (파생물 배포 의무)
- 변경된 컴퓨터 프로그램 역시 반드시 똑같은 GPL 라이선스를 취해야 한다. (파생물 라이선스 의무)
즉 GPL 라이선스를 이용한 코드도 GPL 라이선스를 따라야 한다는 문제가 생기는 것입니다.
GitHub Copilot IDE 설정 방법
1) copilot 홈페이지에 접속
2) Start my freeTrial 버튼 클릭
3) Get access to GitHub Copilot 버튼 클릭
4) 이름, 주소 입력 후 다음 버튼 클릭
5) 신용카드 또는 페이팔 정보 입력 후 Save payment information 버튼 클릭
6) 허용 여부 선택 후 Save and get started 버튼 클릭
7) 사용할 IDE 선택
8) 안내에 따라 연동
GitHub Copoliot 사용 방법
사용방법은 간단합니다.
정해진 규칙대로 주석 또는 코드를 작성하면 추천 코드(Suggestion)를 보여줍니다.
마음에 들면 `Tab`을 누르면 되고, 마음에 안 들면 `Alt + [` 또는 `Alt + ]`누르면 다른 추천 코드를 보여줍니다.
다른 추천코드를 하나씩 보는 게 답답해서 한 번에 보고 싶다면 `Ctrl + Enter`를 누르면 됩니다.
MacOS의 경우에는 아래 이미지처럼 입력하면 됩니다.
GitHub Copoliot의 가장 큰 장점은 한글도 인식한다는 점입니다.
물론 한글로 하면 영어로 입력했을 때보다 뭐가 잘 안 될 것 같기는 합니다.
1) 주석 입력
말 그대로 코드를 작성하고 싶은 내용을 주석으로 작성하고 enter key를 누르면 회색으로 추천 코드(Suggestion)를 보여줍니다.
다음은 주석으로 원하는 코드 내용을 입력 후 enter를 입력한 후 추천되는 코드입니다.
다음은 Restful API 예제입니다.
사용자 목록을 구하는 list method는 제가 미리 만들어놓은 것이고, 특정 사용자 정보를 구하는 method는 GitHub Copilot이 추천해준 것을 볼 수 있습니다.
@PathVariable이 없는 단점이 있지만 그것만 제외하면 문제없는 코드가 생성된 것을 볼 수 있습니다.
사용자 추가는 다음과 같습니다.
여기서 탭을 눌러 코드를 실제 적용해 주면 toEntity()가 없기 때문에 에러 표시가 나는 것을 볼 수 있습니다.
기존 UserParam은 아래와 같습니다.
이 상태에서 enter를 두 번 누르면 주석도, 함수 선언 부도 작성하지 않았음에도 불구하고 다음과 같이 코드 추천을 해줍니다.
완벽하게 제가 만들어야 할 method가 추천되는 것을 볼 수 있습니다.
2) 함수 선언부 입력
아래 이미지는 함수 선언부를 입력했을 때 자동 완성되는 코드 예시입니다.
보이는 바와 같이 같은 함수 명이어도 return 자료형이 무엇인지, 인자가 무엇인지에 따라 추천 코드가 달라집니다.
Reference