Github에서 제공하는 AI 기반의 코드 자동완성 서비스인 Copilot을 사용해보자.
Copilot이란?
코드 완성을 위한 AI 기반의 도구로, Github에서 제공하는 서비스이다. 기본으로 영어도 지원하지만 다른 언어도 지원한다. 지금 이 글을 쓰는데에도 첫 번째 문장을 Copilot이 작성해주었다.
Copilot은 이렇게 코드를 작성할 때 뿐만 아니라 주석을 작성할 때도 도움을 준다. 아래는 주석을 작성할 때 Copilot이 제안해주는 내용이다.
1 | # 이 코드는 특정 폴더에 있는 파일들을 모두 읽어서 파일명을 출력하는 코드입니다. |
상기 주석을 작성할 때 Copilot이 제안해준 내용을 그대로 사용했다. 다음은 번역기의 결과와 Copilot이 제안해준 내용을 비교한 것이다.
먼저 한글의 경우 Copilot이 제안한 문장을 썼고, 영어는 “This”만 썼는데 나머지 자동완성된 내용이 바로 위의 문장의 번역한 결과와 같다. 추가 비교를 위해 일본어도 번역기를 통해 번역한 결과를 함께 보여줬다. Copilot이 제안해준 내용이 번역기의 결과와 같다.
그리고 바로 앞 문단의 문장을 작성할 때 “추가 비교를 위해”라는 문구만 썼을 뿐인데 “일본어”로 시작하는 문장을 제안해줬다. 이는 Copilot이 내가 작성한 문장을 분석하여 다음에 올 문장을 예측한 것이다.
또 작성하면서 어처구니 없는 생성 결과를 발견했는데 이는 다음과 같다.
물론 이런 문장 생성은 코드 작성대비 상대적으로 난이도가 쉬운 편이지만 이정도 생성이 된다는 것만 해도 굉장한 생산성을 기대할 수 있겠다.
Copilot 등록하기
깃허브의 Copilot 홈페이지에 접속하면 아래와 같은 화면을 볼 수 있다.
그리고 로그인한 상태에서 “Start your trial” 버튼을 누르면 아래와 같이 Copilot을 사용할 수 있는 화면이 나온다.
공개된 코드와 매칭을 할 것인지 여부를 묻고 내가 작성한 코드를 품질개선에 활용할 것인지 여부를 묻는다. 본인이 원하는대로 선택을 하고 이제 Copilot을 사용할 수 있다.
다음은 Copilot을 사용할 수 있는 프로그램을 보여준다.
VSCode에서 Copilot 활성화
VSCode에서 Copilot을 사용하기 위해서는 Copilot을 설치해야 한다. VSCode의 확장 프로그램을 설치하는 것과 같은 방식으로 설치하면 된다. 아래는 VSCode에서 Copilot 확장 프로그램을 설치하는 화면이다.
설치를 마치고 나면 다음과 같은 팝업창이 뜨면서 Copilot 활성화를 위한 깃허브 로그인 요청을 한다.
다음의 이미지를 참고하여 차례대로 진행하면 된다.
그리고 Copilot은 화면 오른쪽 하단의 버튼을 눌러 활성화/비활성화를 할 수 있다.
Copilot 사용 예시
앞에서도 많은 내용을 보여줬으나 이번에는 실제로 코드를 작성해보면서 Copilot을 사용해보자. 먼저 아래와 같이 코드를 작성하면서 Copilot이 제안해주는 내용을 보자.
상기 gif 파일에서 볼 수 있듯이 “preprocessing.py”라는 파이썬 스크립트 파일을 생성하고 나서 코드를 입력하는데 Copilot이 바로 preprocess()
라는 함수 정의 코드를 제안해주는 것을 볼 수 있다.
그리고 직접 코드를 수정하여 delete_numbers()
함수를 생성하려 하자 곧바로 해당 함수정의 코드 안에 정규표현식 코드를 제안해주는 것을 볼 수 있다. 이는 Copilot이 내가 작성한 코드를 분석하여 다음에 올 코드를 예측한 것이다.
다음 줄로 넘어가자 곧바로 Copilot은 delete_punctuation()
함수를 제안해주었다. 역시 내부의 정규표현식도 그 함수에 맞게 적절한 코드를 제안해주었다.
Copilot의 한계
이런 생성형 AI의 한계는 무엇일까? 먼저 Copilot은 내가 작성한 코드를 분석하여 다음에 올 코드를 예측한다. 그리고 그 예측된 코드를 제안해준다. 그러나 이는 내가 작성한 코드를 분석하여 예측하는 것이지 내가 작성할 코드를 분석하여 예측하는 것은 아니다. 즉, 내가 작성할 코드를 분석하여 예측하는 것은 아니라는 것이다.
그리고 생성형 AI 또한 데이터를 기반으로 학습한 결과이기 때문에 절대적으로 학습된 데이터에 의존하며 학습된 데이터에 없는 내용은 생성하기 어렵다. 즉, 내가 작성할 코드가 학습된 데이터에 없다면 Copilot은 그 내용을 생성하지 못한다는 것이다. 더 나아가서 초/중급 코드는 그 데이터가 많아 학습이 잘 되어 마치 만능처럼 보일 수 있으나 점점 고급으로 가고 난이도가 올라갈수록 학습 데이터가 부족해져 생성이 잘 안되는 경우가 많다. 그리고 지엽적이고 특정 도메인에 대한 코드는 학습 데이터가 부족해서 사용자의 기대를 만족하기는 어려운 것이 현실이다.