안녕하세요, SYF 컴퍼니의 서버 개발자 입니다.
이번 글에서는 Copilot을 사용했던 경험을 공유해보고자 합니다.
프로젝트에 정식으로 도입하여 사용한 것이 이나고 개인적으로 몇 가지 테스트 해 보며 느낀 점을 작성한 글로, 정확하지 않은 부분이 있을 수도 있는 점 양해 부탁드립니다😊

시작하기에 앞서 Copilot에 대해 짧막하게 소개 드리겠습니다 🤖

코파일럿은 OpenAI에서 개발한 인공지능 기반의 코드 자동완성 도구입니다. 사전 학습된 모델인 Codex를 사용하여 코드를 추천해줍니다.

  • 공식 링크
  • Copilot은 개인용인 Copilot for Individuals, 기업용인 Copilot for Business 두 가지 버전으로 제공됩니다.

    Copilot for Individuals Copilot for Business
  • 개인용으로 무료로 제공되는 버전
  • 따로 설정하지 않으면 코드 조각, 사용자 이벤트 등의 정보가 서버에 저장됨
    • 사용자 참여 데이터 - IDE와 상호작용하는 이벤트에 대한 정보를 수집
    • 코드 스니펫 데이터(코드조각) - 코드 추천을 위해 작성중인 코드조각이 Copilot 서버로 전송되고, 그에 대한 제안 사항을 IDE로 제공하는 과정을 거침
  • 기업용으로 유료로 제공되는 버전
  • 해당 코드에 대한 Copilot 제안을 얻기 위해 코드 조각, 사용자 이벤트 등의 정보가 서버로 전송은 되지만 저장되지 않음
  • 개인용 플랜에서 사용자 정보를 서버에 저장 하는 것을 막으려면 Allow GitHub to use my code snippets for product improvements 를 체크 해제하면 됩니다

  • 해당 설정은 GitHub이 코드 품질 개선을 위해 나의 데이터(코드조각 데이터/사용자 이벤트(코드 수락,거절 등)데이터)를 저장하는 것을 허용하는 옵션입니다
  • 저장된 코드 조각 데이터가 추천 코드로 사용되지는 않고 관련 직원만 해당 코드에 접근한다고 명시되어 있지만, 정확히 언제 폐기되는 등은 명시되어 있지 않습니다
  • 필자는 비밀번호 등 민감한 정보를 담은 코드 조각이 저장될 것이 염려되어 해당 옵션을 체크 해제하고 사용했습니다
  • 🤔 사용 방법

    copliot을 Copilot for Individuals의 무료 체험판으로 사용했기 때문에, 혹시 모를 보안 이슈를 방지하여 이전에 학습용으로 작성했던 개인 사이드 프로젝트 코드로 테스트를 진행했습니다.

    1.1 IntelliJ 에서의 기본적인 사용법

    목적에 맞는 주석을 작성하고 기다리면 그에 대한 코드가 완성되어 추천됩니다.

    꼭 주석을 작성하지 않더라도, 마찬가지로 코드를 작성 중 기다리면 문맥에 맞게 그 다음 코드를 추천해줍니다.

  • 추천 받은 코드를 사용하고자 한다면 tab 을 눌러 사용하고
  • 다른 코드를 추천받고 싶다면 alt + [ 혹은 alt + ] 으로 변경합니다.
  • 다른 코드를 추천받고 싶다면 alt + [ 혹은 alt + ] 으로 변경합니다.
  • IntelliJ 사이드바의 코파일럿 탭에서 추천 받은 코드 외의 후보 코드를 확인 할 수 있고, 채택하여 사용할 수 있습니다.
  • 1.2 VSCode에서의 Copilot Labs 사용법

    VSCode에서의 Copilot 사용법도 기본적으로는 IntelliJ와 크게 다르지 않습니다.
    다만 VSCode에서는 추가적인 Extention으로 Copilot Labs를 지원합니다.

  • 공식 링크
  • Copilot Labs는 Copilot을 지원하는 IDE 중 VSCode에서만 지원하는 기능으로, Copilot의 차세대 기술을 사용할 수 있는 기능입니다. 완전하지는 않지만 재미있고 다양한 기능들을 제공합니다.

  • 설치 및 사용 방법 참고
  • 기능 img 설명
    EXPLAIN 선택한 코드블록을 분석해주는 기능
    LANGUAGE TRANSLATION 선택한 코드블록을 원하는 프로그래밍 언어로 변환해주는 기능
    BRUSHE 선택한 코드 블록을 읽기 쉽게 리팩토링 해주고(READABLE), 생략된 타입을 추가해주고(ADD TYPES), 간단한 버그를 고쳐주고(FIX BUG), 주석을 추가해주는(LIST STEPS) 등 선택한 블록에 대해 다양한 수정 기능을 제공
    TEST GENERATION 선택한 코드블럭에 대해 테스트코드를 생성해주는 기능. (23.09.13 기준으로 .ts, .js 파일에 대해서만 기능을 지원)

    😀 활용 방법

    2.1 변수명, 메서드 추천

  • 주석을 적절하게 잘 추가하면 그에 맞는 메서드를 작성해주고, 변수명을 추천해줍니다.
  • 2.2 주석 추천

    주석으로 코드를 작성하는 것 뿐만 아니라, 역으로 코파일럿을 활용해서 주석을 추가 할수도 있습니다.

    메서드 주석
  • 주석을 추가하지 않은 메서드에 대해, 주석을 추가하고자 하면 위와 같이 자동으로 코드에 대한 주석을 추가해줍니다.
  • 주의할 점은, 메서드 명에 영향을 받기 때문에, 의도에 맞는 적절한 메서드 명을 짓는 것이 중요합니다.(당연하지만...)
  • 사진은 코파일럿이 추천하는 주석이 메서드명에 영향을 받는 것을 보여줍니다
  • 라인 단위 주석
  • 코드 row 단위로도 주석 추가가 가능합니다.
  • Copilot Labs에서는 드래그한 범위에서 더욱 강력한 문서화를 지원합니다.

    1. 주석을 추가하고자 하는 범위를 드래그하고, BRUSHES>LIST STEPS를 클릭
    2. 완료

    2.3 QnA 기능

    Chat GPT와 유사한 QnA 기능을 Copilot에서도 사용할 수 있습니다.

    
    // q :
    // a :
    
    

    위 형식으로 질문을 작성하면 그에 대한 답변을 자동완성으로 제안해줍니다.

    간단한 질문에 대해 검색하고 싶은 경우 ChatGPT나 구글링을 할 필요 없이 IDE안에서 해결이 가능합니다.

    (이때 좀 무서웠습니다…)

    2.4 가능하긴 하지만 활용은 아쉬운 기능들

    2.4.1 CopliotLabs::언어 번역(english -> korean)

    Custom 기능을 활용하면 언어를 번역할 수 있습니다.

    1. 번역하고자 하는 구간을 드래그
    2. BRUSHES>CUSTOM 에서 원하는 명령을 입력(to korean)
    3. 완료
  • 사용 후 퀄리티를 봤을 때 기능 자체는 만족스러웠지만, 원하는 결과를 얻기까지 오래 걸리고 실패하는 케이스가 잦기 때문에 아쉬운 기능으로 분류했습니다(위의 번역본도 3번 시도하고 얻은 결과입니다😅).
  • 2.4.2 CopilotLbas::프로그래밍 언어 번역(Java -> Python)

    알고리즘과 같이 다른 객체와의 의존관계가 없는 간단한 코드에 대해서는 괜찮은 퀄리티로 프로그래밍 언어 변환이 됩니다.

    python → Java
    Java → python

    다만 Spring이나 Django와 같이 다른 객체와 의존관계가 있는 코드에 대해서는 그대로 사용하기 힘든 퀄리티로 변환 되는 것을 확인할 수 있었습니다.

    Spring -> Django
    Java → python

    2.4.3 테스트 코드 작성

    Typescript와 Javascpipt로 작성된 코드는 Copilot Labs에서 테스트 코드를 작성해주는 기능을 제공합니다.

  • 다만 확장자가 .ts .js인 파일만 지원하기 때문에, 리액트를 사용하는 환경에서는 다소 활용도가 떨어질 것으로 보입니다.
  • 실무에 도움이 될까 하여 코파일럿으로 SpringBoot 테스트 코드를 작성해보았습니다.

    더보기
    1. 간단한 CPUD를 작성하고
    2. 테스트 클래스를 생성
    3. 주석 작성 후 코파일럿 추천대로 코드를 작성
    4. 어느 정도 코드를 작성하면 코파일럿이 다음 코드를 추천
    다만 잘못된 코드를 추천해주기도 합니다.
    코파일럿에게 전부 맡겨도 테스트 코드 정도는 알아서 완성 시킬 수 있을 것이라 생각했는데, 그 정도는 아니었습니다. 언어 번역에서 느꼈던 것과 같이 의존성을 가지고 있는 코드에 대해서는 성능이 다소 아쉽게 나오는 것으로 확인됩니다.

    => 결론적으로 테스트 코드를 작성할 때 어느 정도 자동 완성 도움은 받지만, 코파일럿 만으로 테스트코드를 작성하기는 어려운 수준입니다.

    코파일럿이 스스로 작성했듯 코파일럿이 테스트코드를 작성하는 것이 아니라 문맥에 맞게 코드를 추천하는 것이기 때문에, 개발자가 어떻게 메소드를 만들것인지 분명한 목적을 가지고 코드를 작성해야 하며 코파일럿은 타이핑 시간을 단축시켜 주는 정도로 활용해야 합니다.

    🌈 사용 후기

  • 새로운 언어를 처음 접할 때 갈피를 잡아주는 역할로서는 괜찮다고 느꼈습니다.
  • 주석을 잘 쓴다면 필드 명이나 메서드 명 등의 네이밍에 공수를 덜어줄 것으로 보입니다.
  • 발전된 인텔리제이의 자동완성 기능으로 느껴지기도 했습니다.
  • 다만 세부적인 내용은 의도한 것과 다르게 코딩될 수 있으며, 어디서 학습했는지 출처가 모호한 코드가 나타날 때가 있기 때문에 주의해야 합니다.
  • JavaDoc 문서 주석을 추가 할 때 처음 보는 사람 이름으로 auth 가 자동완성 되기도 했습니다...😅
  • 코파일럿이 저에게 뒤끝 부리는 사진으로 마무리 하겠습니다. 읽어주셔서 감사합니다 🙏