해당 글은 GitHub Copilot 기본적인 기능 소개와,
작성자가 개인적으로 유용하게 사용하고 있는 유즈케이스를 소개합니다.
IntelliJ IDEA
,Spring Boot
,JPA
스택을 사용하는 백엔드 개발자를 중심으로 작성되었습니다.
사내에서 GitHub Copilot의 활용법에 대해 발표를 하게 되었습니다.
그 핵심 내용을 정리해서 공유해보고자 합니다.
요즘 생성형 AI의 상승세가 미쳤습니다.
개발자들에겐 코딩 어시스턴트 형태의 AI도 많이 쓰이고 있는데요
많이 언급되는건 GitHub Copilot
, Cursor AI
, JetBrains AI
, Amazon Q
정도가 있습니다.
다만 이런 코딩 어시스턴트 형태의 AI를 쓸 때,
이런 생각해보지 않으셨나요?
저도 똑같이 했던 생각이고, 어느 정도 사실(?)이기도 합니다.
그래서 코딩 어시스턴트 AI를 언제 어떻게 쓰는 것이 가장 안심할 수 있는지 제 경험을 적어봤습니다.
그리고 제가 개인적으로 유용하게 사용하고 있는 유즈케이스를 소개합니다.
가장 먼저 유명해진 GitHub Copilot을 다뤄보고자 합니다.
이 글은 IntelliJ 기반 IDE, Spring, JPA 스택을 쓰는 백엔드 개발자를 중심으로 작성되었지만, 혹시 VSCode를 주로 사용하셔도 문제 없습니다!
IntelliJ에서 되는 것이면 VSCode에서도 무조건 될 것이기 때문입니다.
(GitHub Copilot은 IntelliJ 보다 VSCode 지원을 훨씬 빠르게 하고 있고, IntelliJ에는 없는 기능도 많은 편입니다.)
원래는 아니었는데, 정말 최근에 프리티어가 생겼습니다.
가격 사이트: https://github.com/features/copilot/plans
프리티어 제한
제한이 있긴 하지만 꽤 넉넉한 편이라고 생각합니다!
간단히 큰 기능들을 짚고 넘어가겠습니다.
Settings
> Plugins
> 'GitHub Copilot' 검색 > Install
클릭
GitHub Copilot은 코드를 작성하는 도중 자동으로 추천 코드를 제공합니다.
추천되는 코드를 수락하려면 Tab 키를 눌러 간편하게 자동완성할 수 있습니다.
처음에 회색으로 표시되는 부분이 자동완성 제안해준 코드입니다.
Tab을 누르면 입력됩니다.
IntelliJ 사이드바에서 채팅처럼 상호작용할 수 있습니다.
모르는 개발 지식이 있을 때, 구글링보다는 채팅으로 물어보면 더 빨리 파악할 수 있습니다.
코드 개선 용도로 사용할 수도 있습니다.
질문하고 싶은 부분의 코드를 드래그 후, 채팅창에 질문을 작성하는 식으로 사용합니다.
답변을 받은 후 'Using N References' 토글을 열어보면 코드베이스의 어떤 파일을 참고했는지도 알 수 있습니다.
프롬프트 창에서 슬래시를 누르면 커맨드 목록을 볼 수 있습니다.
Chat을 열지 않고 코드 내에서 바로 질문할 수 있습니다.
드래그하면 좌측에 코파일럿 아이콘이 뜨고, 누르면 프롬프트 창이 나옵니다.
'gh copilot' 프리픽스로 CLI 사용 가능합니다.
CLI는 코드가 아닌 터미널 커맨드 제안 기능 중심으로 되어있습니다.
쳐야 할 커맨드가 뭔지 생각이 나지 않을 때 특히 유용합니다.
개인적으로는 간단한 로직 자동완성/포맷 변환/테스트코드 생성 위주로 사용하는 것이 좋다고 생각합니다.
결과 코드를 이미 머리로 알고 있으니까 코파일럿이 준 코드를 검증하기가 훨씬 편하기 때문이죠.
아예 새로운 기능을 개발해달라고 요청하는 경우에도 대부분 잘 짜주지만, 높은 확률로 허점이 하나씩 나오고 검토할 때 인지부하가 많이 듭니다.
🤔: 프롬프트를 잘 짜면 되지 않나요?
복잡한 코드 구현하려고 프롬프트에 정성 들이는 것보다
그냥 직접 코드 짜는게 더 빠를 때도 많습니다.
그래서 전 케이스가 복잡할 경우 굳이 프롬프팅하지 않고 평소처럼 구현합니다.
그러다 보면 코파일럿이 스스로 맥락을 이해해서, 알아서 제안을 해줍니다.
그래서 전 처음부터 프롬프트를 잘 짜는 것보다, 짜다가 코파일럿에게 중간중간 제안 받는게 더 나았습니다.
그리고 다 구현했다면 전체 코드 리팩토링을 요청합니다.
이 때 코드가 좀 긴 경우, 함정이 껴있을 확률이 높아서 무지성 붙여넣기는 추천하지 않습니다.
코파일럿이 리팩토링 해준 포인트만 눈으로 추출(?)해서 손으로 직접 하시는게 안전합니다.
정리하자면, 복잡한 코드일 경우:
- 프롬프팅하지 않고 평소처럼 구현한다.
- 구현하다가 코파일럿의 자동완성을 중간중간 사용한다.
- 구현 후 전체 코드를 리팩토링 요청한다.
- 리팩토링 결과를 검토하고, 복붙하지 않고 리팩토링해준 포인트만 인지 후 손으로 수정한다.
저는 범용 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
GitHub Copilot
ChatGPT를 사용하면서 가장 만족하는건 이미지를 인풋으로 넣을 수 있다는 점입니다.
예를 들면 API를 짜야할 때, ChatGPT에게 규격서 캡처를 주면 알아서 전체 코드를 만들어주는 것도 가능합니다. 이런건 아직 GitHub Copilot은 못하는 영역입니다.
개인적으로 자주 쓰게되었던 유즈케이스와 팁을 몇가지 보여드리며 글을 마무리하겠습니다.
참고로 순서에 큰 의미는 없습니다.
프롬프팅을 하고 싶은데 Chat 창 열기 번거로울 때
주석을 프롬프트처럼 사용하면, 주석 내용을 반영해서 코드 자동완성을 제안해줍니다.
메소드 명을 알아듣기 쉽게 짓는 것도 동일한 효과를 보여줍니다!
주석이든 코드든 자동완성 라인 이전에 더 많은 정보가 있으면 됩니다.
자주 사용하게 되는 프롬프트가 있다면, 일일이 타이핑하기보단 단축키를 사용하면 편합니다.
꼭 GitHub Copilot 뿐만 아니라 ChatGPT 등 프롬프트 할 수 있는 어떤 AI를 사용해도 적용할 수 있는 방법입니다.
Raycast의 Snippet 기능을 사용한 예시입니다.
아래 사진의 경우 ;kp
를 타이핑하면 설정해둔 프롬프트로 변경해줍니다.
DB에 매핑해야하는 객체를 만들어야 할 때, 주석으로 DDL 정보를 적어두시면
아래 사진처럼 객체 필드가 자동완성되어 보입니다.
API 요청, 응답 예시를 만들어야 할 때 특히 유용합니다.
유틸함수는 어떤 코드에 종속되지 않은 경우가 많아 코드 자동완성이 대부분 잘 된다고 느꼈습니다.
프롬프트 예시
- Can you check this code for potential bugs or security issues?
- Do you see any quality improvement to do on this code?
/tests
커맨드 사용/simplify
커맨드 사용/explain
커맨드 사용프롬프트 예시
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를 완전히 대체할 수 있지 않을까.. 기대가 됩니다.
자세한 후기 감사합니다.