나의 GitHub Copilot 활용법 & Tip (for IntelliJ)

숑숑·2024년 12월 22일
71

툴 덕질

목록 보기
2/2
post-thumbnail

해당 글은 GitHub Copilot 기본적인 기능 소개와,
작성자가 개인적으로 유용하게 사용하고 있는 유즈케이스를 소개합니다.
IntelliJ IDEA, Spring Boot, JPA 스택을 사용하는 백엔드 개발자를 중심으로 작성되었습니다.

사내에서 GitHub Copilot의 활용법에 대해 발표를 하게 되었습니다.
그 핵심 내용을 정리해서 공유해보고자 합니다.


요즘 생성형 AI의 상승세가 미쳤습니다.
개발자들에겐 코딩 어시스턴트 형태의 AI도 많이 쓰이고 있는데요
많이 언급되는건 GitHub Copilot, Cursor AI, JetBrains AI, Amazon Q 정도가 있습니다.

다만 이런 코딩 어시스턴트 형태의 AI를 쓸 때,
이런 생각해보지 않으셨나요?

  • AI가 짜준 코드는 믿을 수 없다.
  • AI와 코딩하다 보면 내 지식이 퇴화할 것 같다.
  • 어차피 사람이 최종 검토해야하는데 그게 더 힘들다.

저도 똑같이 했던 생각이고, 어느 정도 사실(?)이기도 합니다.

그래서 코딩 어시스턴트 AI를 언제 어떻게 쓰는 것이 가장 안심할 수 있는지 제 경험을 적어봤습니다.
그리고 제가 개인적으로 유용하게 사용하고 있는 유즈케이스를 소개합니다.

가장 먼저 유명해진 GitHub Copilot을 다뤄보고자 합니다.

이 글은 IntelliJ 기반 IDE, Spring, JPA 스택을 쓰는 백엔드 개발자를 중심으로 작성되었지만, 혹시 VSCode를 주로 사용하셔도 문제 없습니다!

IntelliJ에서 되는 것이면 VSCode에서도 무조건 될 것이기 때문입니다.
(GitHub Copilot은 IntelliJ 보다 VSCode 지원을 훨씬 빠르게 하고 있고, IntelliJ에는 없는 기능도 많은 편입니다.)

근데 GitHub Copilot은 무료인가요?

원래는 아니었는데, 정말 최근에 프리티어가 생겼습니다.

가격 사이트: https://github.com/features/copilot/plans

프리티어 제한

  • Chat 50회
  • 자동완성 2000회

제한이 있긴 하지만 꽤 넉넉한 편이라고 생각합니다!

설치 및 사용법

간단히 큰 기능들을 짚고 넘어가겠습니다.

설치 방법 (IntelliJ)

Settings > Plugins > 'GitHub Copilot' 검색 > Install 클릭

사용법

자동완성

GitHub Copilot은 코드를 작성하는 도중 자동으로 추천 코드를 제공합니다.
추천되는 코드를 수락하려면 Tab 키를 눌러 간편하게 자동완성할 수 있습니다.

처음에 회색으로 표시되는 부분이 자동완성 제안해준 코드입니다.
Tab을 누르면 입력됩니다.

Chat

IntelliJ 사이드바에서 채팅처럼 상호작용할 수 있습니다.
모르는 개발 지식이 있을 때, 구글링보다는 채팅으로 물어보면 더 빨리 파악할 수 있습니다.

코드 개선 용도로 사용할 수도 있습니다.
질문하고 싶은 부분의 코드를 드래그 후, 채팅창에 질문을 작성하는 식으로 사용합니다.
답변을 받은 후 'Using N References' 토글을 열어보면 코드베이스의 어떤 파일을 참고했는지도 알 수 있습니다.

프롬프트 창에서 슬래시를 누르면 커맨드 목록을 볼 수 있습니다.

  • /explain: 코드 설명
  • /feedback: 코드에 대한 피드백
  • /fix: 컴파일이 안 되는 에러 혹은 논리적 버그 수정
  • /help: 도구 사용법에 대한 도움말
  • /tests: 단위 테스트 코드 생성
  • /doc: 코드 문서 생성
  • /simplify: 코드를 간결하고 효율적인 형태로 재작성

Inline 모드

Chat을 열지 않고 코드 내에서 바로 질문할 수 있습니다.

드래그하면 좌측에 코파일럿 아이콘이 뜨고, 누르면 프롬프트 창이 나옵니다.

CLI

'gh copilot' 프리픽스로 CLI 사용 가능합니다.
CLI는 코드가 아닌 터미널 커맨드 제안 기능 중심으로 되어있습니다.
쳐야 할 커맨드가 뭔지 생각이 나지 않을 때 특히 유용합니다.

GitHub Copilot 사용 시 주의할 점

  • 학습이 목적일 때
    • 알고리즘 풀이 등 학습이 목적일 경우에는 코파일럿이 방해될 수 있습니다. 자꾸만 답지를 보여주기 때문이죠..!!
  • 정확성 문제
    • 자동 생성된 코드가 항상 정확하지 않을 수 있어 개발자의 검토가 필요합니다.
  • 보안 우려
    • 보안 취약점을 가진 코드를 제안할 수도 있습니다.
  • 마이너한 언어 지원 부족
    • public repository에 정보가 많은 언어일 수록 코드 품질이 높습니다. (ex. JS)
    • 반대로 폐쇄적인 언어의 경우 비교적 답변 품질이 낮아지는 문제가 있습니다.
  • 뇌의 피로가 커짐
    • 간혹 코드 작성하다 지칠 때도 있는데, 즉각적인 자동완성 제안으로 다음 코드도 쉬지 않고 작업하도록 동기부여하는 효과가 있습니다. (좋게 말하면 생산성이 좋아지지만, 반대로는 피로감이 들 수 있습니다.)

어떻게 사용하는 것이 좋은가?

개인적으로는 간단한 로직 자동완성/포맷 변환/테스트코드 생성 위주로 사용하는 것이 좋다고 생각합니다.

결과 코드를 이미 머리로 알고 있으니까 코파일럿이 준 코드를 검증하기가 훨씬 편하기 때문이죠.

아예 새로운 기능을 개발해달라고 요청하는 경우에도 대부분 잘 짜주지만, 높은 확률로 허점이 하나씩 나오고 검토할 때 인지부하가 많이 듭니다.

🤔: 프롬프트를 잘 짜면 되지 않나요?

복잡한 코드 구현하려고 프롬프트에 정성 들이는 것보다
그냥 직접 코드 짜는게 더 빠를 때도 많습니다.

그래서 전 케이스가 복잡할 경우 굳이 프롬프팅하지 않고 평소처럼 구현합니다.

그러다 보면 코파일럿이 스스로 맥락을 이해해서, 알아서 제안을 해줍니다.
그래서 전 처음부터 프롬프트를 잘 짜는 것보다, 짜다가 코파일럿에게 중간중간 제안 받는게 더 나았습니다.

그리고 다 구현했다면 전체 코드 리팩토링을 요청합니다.

이 때 코드가 좀 긴 경우, 함정이 껴있을 확률이 높아서 무지성 붙여넣기는 추천하지 않습니다.
코파일럿이 리팩토링 해준 포인트만 눈으로 추출(?)해서 손으로 직접 하시는게 안전합니다.

정리하자면, 복잡한 코드일 경우:

  • 프롬프팅하지 않고 평소처럼 구현한다.
  • 구현하다가 코파일럿의 자동완성을 중간중간 사용한다.
  • 구현 후 전체 코드를 리팩토링 요청한다.
  • 리팩토링 결과를 검토하고, 복붙하지 않고 리팩토링해준 포인트만 인지 후 손으로 수정한다.

ChatGPT 미만잡이다?

저는 범용 AI로는 ChatGPT 유료 모델을 쓰고 있기에, ChatGPT를 기준으로 작성했습니다.

사실 AI만 놓고 보면, 코딩 어시스턴트 역할로 프롬프팅된 순수 ChatGPT가 더 좋다고 생각은 합니다.
ChatGPT나 Claude 같은 범용 AI는 어쨌든 자유도가 정말 높기 때문입니다.

GitHub Copilot은 프로그래밍에 전문화 되어있다보니, 주제를 잠깐 벗어난다거나 ChatGPT 만큼의 알잘딱깔센(?)을 바라면 그렇게 잘 되진 않습니다.

그래서 둘 중 하나만 결제해야 한다면 전 무조건 ChatGPT를 추천하긴 합니다.

다만 IDE에서의 접근성이 좋다는건 정말 큰 장점입니다.

ChatGPT 같은 범용 AI 앱만 사용하면 아래와 같은 사이클을 거치게 됩니다.

리팩토링할 때
ChatGPT: 코드 드래그 - 복사 - ChatGPT 앱 켜기 - 붙여넣기 - 프롬프트 짜기 - 결과 복사하기 - IDE 켜기 - 붙여넣기
GitHub Copilot: 코드 드래그 - IDE 내에서 Github Copilot Chat 열기 - /simplify 커맨드 실행 - 결과 replace 버튼 눌러 바로 코드에 붙여넣기

훨씬 사이클이 짧아졌죠?

그리고 가장 중요한, GitHub Copilot만 가능한 것은
내가 의도하지 않더라도 코드 제안을 계속 해준다는 것입니다.

ChatGPT 같은 경우 스스로 어떠한 의도가 명확히 있을 때만 도움을 받게 됩니다.
앱을 열어서 프롬프팅하는 방식이니까요.

GitHub Copilot은 코드를 스스로 계속 제안해주니 훨씬 능동적입니다.

그러다보니 타이핑도 많이 줄고, 내가 생각지도 못한 더 좋은 코드를 알려주기도 합니다.
정말 누군가와 페어 프로그래밍하고 있는 느낌이 들 때도 있습니다.

각각 사람에 비유해보자면

  • 순수 ChatGPT: 필요할 때 자문을 해주는 시니어 개발자
  • GitHub Copilot: 같이 페어 프로그래밍 중인 눈치 빠른 주니어

ChatGPT와 함께 쓴다면 어떻게?

저는 주로 이렇게 씁니다.

ChatGPT

  • 텍스트 만으로 프롬프트하기 어려울 때 (이미지 활용)
  • 코드 구조에 대한 자문이 필요할 때
  • 새로운 아이디어가 필요할 때

GitHub Copilot

  • 작은 코드 스니펫에 대해 리팩토링이 필요할 때
  • 머리로 결과 코드를 알고 있고, 타이핑하기 귀찮을 때

ChatGPT를 사용하면서 가장 만족하는건 이미지를 인풋으로 넣을 수 있다는 점입니다.
예를 들면 API를 짜야할 때, ChatGPT에게 규격서 캡처를 주면 알아서 전체 코드를 만들어주는 것도 가능합니다. 이런건 아직 GitHub Copilot은 못하는 영역입니다.

자주 사용하는 유즈케이스 및 Tip

개인적으로 자주 쓰게되었던 유즈케이스와 팁을 몇가지 보여드리며 글을 마무리하겠습니다.
참고로 순서에 큰 의미는 없습니다.

1. 주석을 프롬프트처럼 사용하기

프롬프팅을 하고 싶은데 Chat 창 열기 번거로울 때
주석을 프롬프트처럼 사용하면, 주석 내용을 반영해서 코드 자동완성을 제안해줍니다.
메소드 명을 알아듣기 쉽게 짓는 것도 동일한 효과를 보여줍니다!
주석이든 코드든 자동완성 라인 이전에 더 많은 정보가 있으면 됩니다.

2. 자주 쓰는 프롬프트 단축키로 저장하기

자주 사용하게 되는 프롬프트가 있다면, 일일이 타이핑하기보단 단축키를 사용하면 편합니다.
꼭 GitHub Copilot 뿐만 아니라 ChatGPT 등 프롬프트 할 수 있는 어떤 AI를 사용해도 적용할 수 있는 방법입니다.

Raycast의 Snippet 기능을 사용한 예시입니다.

아래 사진의 경우 ;kp 를 타이핑하면 설정해둔 프롬프트로 변경해줍니다.

3. DDL로 객체 만들기

DB에 매핑해야하는 객체를 만들어야 할 때, 주석으로 DDL 정보를 적어두시면
아래 사진처럼 객체 필드가 자동완성되어 보입니다.

4. SQL <-> JPQL 변환

  • JPQL을 nativeQuery로 바꾸는 모습

5. 성능 개선하기

  • List 기반으로 O(n) 조회하던걸 Map 사용하여 O(1)으로 개선하는 모습

6. 시간 계산

7. 객체 <-> Json 변환

API 요청, 응답 예시를 만들어야 할 때 특히 유용합니다.

8. 더미데이터 생성

9. 유틸함수 만들기

유틸함수는 어떤 코드에 종속되지 않은 경우가 많아 코드 자동완성이 대부분 잘 된다고 느꼈습니다.

10. 언어 변환

11. 잠재 오류 / 이슈사항 확인하기

프롬프트 예시

  • Can you check this code for potential bugs or security issues?
  • Do you see any quality improvement to do on this code?

  • 입력: 비밀번호 암호화를 Base64로 수행하는 코드 (예시입니다!! 이러면 안 됩니다!!!)
  • 제안: BCrypt 사용하여 암호화

12. 테스트코드 생성

  • /tests 커맨드 사용

13. 리팩토링

  • /simplify 커맨드 사용

14. 코드 이해가 어려울 시 설명 요청

  • /explain 커맨드 사용

15. (자주 쓰진 않지만) CRUD 생성

프롬프트 예시
Create a sample application that performs CRUD operations to manage
people (name, id, e-mail, address) in Spring Boot.
The data should be persisted to the DB, and the database operations
should be implemented in Spring Data JPA.
Please show all implementation of classes and methods and
application property configuration file.

마무리

위 유즈케이스들을 보시면 아시겠지만, 공통점은 저 스스로 결과를 예상할 수 있다는 것입니다.
제 머리에 없는 창작이 필요한 순간에는 ChatGPT, Claude 같은 범용 AI를 선호합니다.
하지만 요즘 생성형 AI들의 성장 속도가 어마무시해서, 조만간 GitHub Copilot 도 프로그래밍 영역에서 범용 AI를 완전히 대체할 수 있지 않을까.. 기대가 됩니다.

profile
툴 만들기 좋아하는 삽질 전문(...) 주니어 백엔드 개발자입니다.

3개의 댓글

comment-user-thumbnail
2024년 12월 24일

자세한 후기 감사합니다.

답글 달기
comment-user-thumbnail
2024년 12월 25일

오오! 저도 나름 코파일럿 잘 쓰고 있다고 생각했는데 숨은 기능과 꿀팁들이 있었네요 ㅎㅎ 덕분에 알아갑니다! 그리고 '주석을 프롬프트처럼 사용하기' 부분에서 생각났는데, 코드의 특정 부분이 이해가 안될 때 '// 이 코드의 의미' 주석을 입력하면 코파일럿이 나름 잘 설명해 주더라구요! 비유하신 것처럼 정말 페어 프로그래밍하는 느낌입니당

1개의 답글