카테고리 없음

Copilot 사용 리뷰

jmMaster 2023. 6. 6. 17:31


Copilot이란?

Copilot은 MicroSoft에선 개발한 Github 오픈소스학습 기반 AI 코드추천 플러그인입니다. 개발자는 IDE 상에서 AI가 추천해주는 소스코드를 실시간으로 확인할 수 있습니다. 이 글에선 약 3개월간 Copilot을 학습, 개인 프로젝트 등에 활용해보고 이에 대한 결과를 정리해 보았습니다.

목차

  1. 테스트 환경 및 설치
  2. Copilot 기본 사용법
  3. Copilot 테스트
  4. Copilot 테스트를 진행하며 발견한 이슈
  5. Copilot 개인적인 견해 및 총평

1. 테스트 환경 및 설치

테스트 환경

Front-end

  • IDE: Visual Studio Code
  • Programming Language: JavaScript
  • Framework: React

Back-end

  • IDE: IntelliJ
  • Programming Language: JAVA
  • Framework: Spring boot

설치(Visual Studio Code 기준)

  1. 먼저 화면 좌측에 보이는 확장(Ctrl+Shift+X)을 누르고 마켓플레이스에서 'github copilot'을 검색합니다. 그리고 검색 결과의 상단에 있는 Github Copilot을 눌러 설치합니다.
  1. 그 후 코파일럿을 이용하기 위해서 Github에 로그인을 해야 하는데, 아래의 화면에서 'Sign in to Github'을 눌러 로그인한 후에 권한 허가 요청 페이지가 등장하면 허가를 누르시기 바랍니다. 그리고 '확장으로 URI를 열 수 있도록 허용하시겠습니까?'라는 창이 나타나면 열기 혹은 허용을 누르면 됩니다.
  1. 아래와 같이 텔레메트리 관련 조항에 동의하냐는 메시지가 보이면 '동의(Agree)'를 누르시기 바랍니다. 텔레메트리 조항은 IDE와 코파일럿이 상호 작용 시 발생하는 이벤트(코파일럿 성능, 사용하고 있는 기능, 사용자가 수락, 수정, 거절한 제안 등)에 대한 정보를 Github에서 수집하는 것을 의미합니다.
  1. 설치가 끝나면 Visual Studio Code 창 하단에 있는 상태 패널에서 코파일럿 아이콘을 확인할 수 있습니다. 이 상태 아이콘을 눌러 코파일럿을 전체적으로 비활성화 시킬 것인지 현재 사용하고 있는 언어만 비활성화 시킬 것인지 설정합니다.

2. Copilot 기본 사용법

1) 여러가지 코드 스니펫 추천 기능

Code Edit 창에 "const TodoList" 를 입력합니다.
"Ctrl + Enter"를 입력하면 오른쪽에 최대 10가지의 코드 스니펫을 추천합니다.
코드 스니펫들 중 개발자가 원하는 코드를 복사하여 붙여넣기를 하면 됩니다.

2) 주석 명령 코드 추천 기능

주석 명령으로 "TodoList"를 입력 시 아래와 같이 관련된 코드를 자동으로 추천합니다.

3) 이미 작성된 코드를 파악하여 자동 추천 기능

코드와 주석을 입력하지 않아도 커서 이동 시 작성된 코드를 자동으로 인식하여 코드 추천합니다.

4) 변수명을 인식하여 자동 추천 기능

선언된 변수명을 인식하여 해당 변수명에 널리 사용되는 소스 코드를 추천합니다.

5) 프로젝트 내의 다른 모듈 파일 인식하여 자동 추천 기능

프로젝트 내의 다른 모듈 파일을 인식하여 변수명 추천합니다.

3. Copilot 테스트

(Front-end) React App Component 코드 비교

Copilot 소스 코드


기존 소스 코드

정상적으로 동작한 부분

  1. 전체적인 코드 형식은 예상한 것과 크게 다르지 않게 추천되었습니다.

비정상적으로 동작한 부분

  1. 모듈 시스템
  • 잘못된 모듈이 import 됩니다.
    • composeWithDevTools 같이 현재 프로젝트 상에서 설치되지 않은 모듈이 import 되고 있습니다.
  • import할 모듈에 대한 경로 파악이 정상적으로 되지 않습니다.
    • 현재 프로젝트에선 Confluence.tsx가 ./view/statistics 폴더에 존재하지만 틀린 경로를 추천합니다.
  1. 라이브러리 버전 에러
  • 현재 프로젝트에서 react-router-dom의 버전은 7버전이지만, Copilot은 이보다 하위 버전에서 사용된 Switch 모듈을 import 하도록 추천합니다.
    또한 Route 컴포넌트의 매개변수로 사용된 exact는 현재 사용 중인 7버전에서는 더 이상 지원되지 않습니다.

(Front-end) React Pagination Component 코드 비교

Copilot 소스 코드


기존 소스 코드

정상적으로 동작한 부분

  1. 전체적인 코드 형식 및 세부적인 로직은 예상한 것과 비슷하게 추천되었습니다. (Pagination 컴포넌트가 웹 개발에서 자주 사용되는 모듈이므로 간단한 주석 명령에도 코드 완성도가 높은 것으로 예상됩니다)

비정상적으로 동작한 부분

  1. 모듈 시스템
    프로젝트 내에 존재하지 않은 모듈이 import 되어 에러가 발생합니다.

(Front-end) CSS 코드 비교

Copilot 소스 코드


기존 소스 코드

정상적으로 동작한 부분

  1. tailwind를 styled-component로 사용하도록 지원하는 라이브러리인 tw.macro를 import 한 뒤 명령에 스타일 옵션을 해당 문법에 맞춰 상세하게 입력하면 정상적으로 추천됩니다.

비정상적으로 동작한 부분

  1. 비효율성
    스타일 부여는 자연어로 입력하는 것 자체가 어려울뿐더러 Copilot도 인식하기 어렵습니다. 따라서 명령문에서도 Copilot이 이해할 수 있게 문장 안에 css 속성을 상세하게 입력해야 하므로 이는 실제 코드를 작성하는 것과 크게 다르지 않습니다.

(Back-end) Springboot CORS 모듈 코드 비교

Copilot 소스 코드


기존 소스 코드

정상적으로 동작한 부분

  1. 주석 명령이 없어도 CorsFilter 클래스 이름을 인식해서 웹 서버에서 자주 사용되는 소스코드가 추천됐습니다.
  2. 추천된 코드에서 preflight 요청에 대한 처리를 제공하므로 기존 소스 코드 보다 더 많은 기능을 지원합니다.

비정상적으로 동작한 부분

  1. 자동 import 기능 지원 안 함
    추천된 코드를 사용했을 때 관련된 객체를 import가 되지 않아 에러가 발생합니다.

(Back-end) Springboot Controller 코드 비교

Copilot 소스 코드


기존 소스 코드

정상적으로 동작한 부분

  1. 주석 명령을 인식하여 MVC 패턴에 기반한 기본적인 Controller 형식이 추천됐습니다.

비정상적으로 동작한 부분

  1. api 개발에 있어서 한계점
    주석 명령에 Controller의 경로, Request Parameter, 사용될 Response 속성에 대한 정보를 적어줘야 합니다. 그리고 세부 로직 또한 직접 작성해 줘야 합니다.

3. Copilot 테스트를 진행하며 발견한 이슈

  • MS(MicroSoft)사가 Github를 사용하는 개발자들의 소스코드를 무단으로 AI 학습 데이터로 활용하는 것에 대한 지적재산권 침해 혐의로 피소되었습니다. 이에 따라, 향후 서비스 정책이 달라질 수 있을 것 같습니다.
  • 현재 Copilot 기업 전용 Enterprise 버전 출시 및 음성인식 기능 추가 기능 탑재를 앞두고 있습니다. 지금까지의 개인 버전과 다른 가격 정책, 서비스가 적용될 것으로 예상됩니다.

4. Copilot 개인적인 견해 및 총평

기능적인 관점

1) 단순 코딩 시간 단축효과

  • 반복되는 코드 작업
    → 프로젝트 내에 여러 파일에서 반복적인 코드를 작성해야 할 경우나 개발자들 사이에서 많이 사용되는 코드 스니펫을 작성할 경우, 작성해야 할 코드의 양이 줄어듭니다.
    → 비교적 간단한 로직을 구현하는 함수(필터, 최대&최소 구하기, 유명한 알고리즘(그래프, dfs, 최단경로))를 자동으로 생성하여 불필요한 타이핑 작업을 줄일 수 있습니다.
  • 코드 리팩토링
    → 기존에 작성했던 코드를 가독성 좋게 수정할 경우, 기존 소스코드를 인식해서 추천해주므로 불필요한 타이핑을 줄일 수 있습니다.
  • 코드 추천 정확도
    → 주석문이 상세할 수록 코드 정확도가 높아졌습니다. 그 중에서도 특히 사용할 변수명을 입력하면 정확도가 많이 높아졌습니다.

2) Copilot을 통한 학습

→ Copilot이 추천하는 코드에서 로직은 같지만, 제가 작성한 코드보단 가독성이 좋은 코드를 추천하는 경우가 많았습니다.

3) 추천코드에 대한 피드백 없음

→ 코드 추천 시, 실행 환경을 고려한 에러 예측 기능이 없습니다. 예를 들어, 버전에 맞지 않은 라이브러리를 추천하거나 주석에 컴파일 에러가 발생하는 명령을 입력해도 별도의 경고 없이 코드를 추천합니다.

4) 비효율적인 Front-end 개발

→ 프론트엔드는 직접 사용자에게 보여지는 부분이기 때문에 디자인을 위한 코딩이 필요하므로 정형화된 코드가 많지 않습니다. 이뿐만 아니라 주석으로 스타일을 작성할 경우 CSS 문법으로 입력해야 Copilot이 인식할 수 있기 때문에 오히려 직접 코드를 입력하는게 시간이 적게 걸렸습니다.

정책적인 관점

1) 코드 책임은 개발자에게 있음

→ 코파일럿은 추천한 코드에 대한 책임을 지지 않습니다. 즉, 추천된 코드로 인해 발생되는 문제에 대해선 관여하지 않기 때문에 개인, 기업 모두 이 부분을 조심해서 사용해야 합니다. 예를 들어, 테스트 중 추천된 api 코드에 개인정보가 입력되는 경우도 있었습니다.

2) 비교적 저렴한 가격

→ 월 $10, 년 $100의 가격으로 이용할 수 있습니다. Copilot을 잘 사용할 수 있는 개발자에게는 코드 추천이 더욱 효율적으로 이뤄지므로 한화로 월 10,000원 대로 많은 편의성을 얻을 수 있을 것 같습니다.

총평

  • 세 달간 Copilot을 사용하면서 프로젝트 내의 다양한 요소를 인지하고 이를 고려하여 코드를 추천해준다는 느낌을 받았습니다. 그 중에서도 가장 좋았던 점은 코드 한 줄을 입력할 때마다, 다른 소스 코드를 인식해서 이와 관련된 코드를 추천하는 부분이 가장 사용가치가 높다고 느꼈습니다.
  • 하지만 주석 명령만으로 원하는 코드가 작성되도록 구현하기는 매우 어려웠습니다. 또한 개발자 입장에선 Copilot에서 사용중인 언어 이해도가 일정 수준 이상이어야 효용성이 높아질 것이라고 생각합니다.