안녕하세요. 백엔드 개발자 럭키입니다.
이 글은 저희 개발팀에서 ChatGPT 코드 리뷰어를 도입하게 된 배경을 이야기하고, 팀에 특화된 코드 리뷰어 GPT를 생성하는 방법, 마지막으로 도입 이후 팀의 개발 문화에 어떤 영향을 줄 수 있는지에 대해 이야기합니다.
코드 리뷰는 개발자들에게 중요한 활동이며, 팀의 생산성과 코드 품질을 향상시키는 데에 큰 도움을 줍니다. 목적과 기대효과를 정의하고, 코드 가독성과 일관성을 확인하며, 에러 핸들링과 예외 처리를 검토하고, 테스트 케이스와 성능을 검토하며, 적절한 피드백을 제공하는 것이 효과적인 코드 리뷰의 핵심입니다. 이러한 팁과 가이드라인을 따르면 개발자들은 더 나은 코드를 작성하고 팀의 성과를 높일 수 있을 것입니다.
작성한 메서드의 구현 내용을 코드 리뷰어 GPT에 리뷰할 코드를 입력합니다.
위와 같이 리뷰받고 싶은 코드를 GPT에 입력하면, 개선해야 할 부분에 대한 내용과 개선 후 테스트를 진행할 수 있는 코드 작성 예시를 확인할 수 있습니다.
위의 코드 리뷰어 GPT는 걸음마 단계로 생성된 수준이라 100% 만족도를 보장하지 않습니다. 생성 후 이용하실 때 이 점 참고하시길 바랍니다.
현재 백엔드 개발팀 인원이 총 3명으로 3개의 API 프로젝트와 Spring Batch 프로젝트를 유지보수 및 관리를 맡고 있습니다. 기존에 작성된 코드를 유지보수하고 개편함과 동시에 새로운 비즈니스 요구사항이 발생하면 이를 해결하기 위해 수많은 코드도 작성해야 합니다.
각각의 프로젝트는 Github에서 소스코드를 관리하고 있고, 우아한형제들의 “우린 Git-flow를 사용하고 있어요”라는 글에서 언급되어 있는 아래의 git-flow를 업무에 활용하고 있습니다.
각 개발자들은 신규 코드를 작성하기도 하지만, 기존의 코드를 수정하는 일도 빈번하게 발생했습니다. 팀에서는 코드 리뷰 문화가 없어서 코드 리뷰 문화를 제안했지만, 과거에 코드 리뷰를 도입 후 좋지 않았던 경험 실제로 팀에 도입이 어렵다는 의견을 들었습니다.
코드 리뷰 도입이 어려웠던 이유는 코드 리뷰를 할 시간이 없다는 표면적인 이유가 있었지만, 사실 개발자 간의 신뢰가 구축되어 있지 않았고, 코드 리뷰 시 리뷰어의 피드백이 객관적인 판단이 아닌 주관적인 의견일 것이라는 생각이 지배적이어서 받아들이기 어렵다는 의견이 근본적인 원인이었습니다. 더욱 큰 문제는 구현된 코드의 대부분이 Object 기반이 아닌 Map 기반으로 구현되어 어떤 데이터가 오고 가는지 예측하기 어렵고, 코드를 수정했을 때 발생할 수 있는 사이드 이펙트(Side effects)를 예상할 수 없었기 때문이라고 합니다. 이 부분은 테스트 코드의 부재로 인해 프로젝트 코드를 개발자가 신뢰하지 못한 부분이라고 생각했습니다.
그래서 이 문제를 해결하기 위해 저는 ChatGPT 생성형 AI 활용을 제안했습니다. 팀원들은 ChatGPT를 코드 작성 보조 용도로 사용하고 있다고 했습니다. 저는 ChatGPT를 좀 더 개발팀에 특화된 전문적인 지식을 설정한 GPT를 커스텀해서 팀의 코드 리뷰어로 활용해보고자 아래의 방법으로 만들어 보기로 했습니다.
위의 내용들이 모두 준비되었다면, 이제 아래의 순서로 GPTs를 만들어 봅니다.
ChatGPT 사이트에 접속하여 로그인을 합니다.
왼쪽 메뉴의 GPT 탐색을 클릭합니다.
오른쪽 위에 +만들기를 클릭합니다.
구성 화면에서 이름, 설명, 지침 내용을 입력합니다.
아래의 지침 내용은 ChatGPT에게 답변을 이끌어 낼 수 있도록 일종의 명령 지침입니다.
지침의 내용은 회사 또는 개인의 상황에 맞게 설정하여 좀 더 정확한 답변을 이끌어 낼 수 있습니다.
- 당신은 Google 회사의 뛰어난 Backend Engineer가 되어 첨부된 지식을 기반으로 주어진 코드를 리뷰합니다.
- 사용하고 있는 프레임워크와 언어의 버전은 각각 springframework version 5.3.9, java 1.8.0, mybatis 3.4.6, junit 5.7.0을 사용하며 이 버전을 기반으로 코드 내용을 제안합니다.
- 리뷰의 목적은 코드 품질 향상, 가독성, 버그 찾기, 성능 개선, 에러 핸들링을 위한 예외처리를 목적으로 합니다.
- 코드 리뷰의 내용은 주어진 코드에서 코드 리뷰의 목적에 부합하는 “변경대상 코드”와 제안된 내용의 “제안된 코드”로 이루어집니다.
- “제안된 코드”는 어떠한 근거로 코드의 내용이 이루어졌는지 설명되어야 합니다.
- 코드의 성능을 검토하고, 불필요한 연산이나 복잡한 알고리즘을 단순화할 수 있는지 확인해야 합니다.
- 또한 메모리 사용량과 실행 속도를 최적화할 수 있는 방법을 제안할 수 있습니다.
- 왜 개선이 필요한지 이유를 설명해주세요.
- 코드를 클린 하게 유지하고, 일관되게 구현하도록 안내해 주세요.
- 주어진 코드 또는 제안된 코드를 기반으로 “테스트 케이스”를 도출해야 합니다.
- 도출된 테스트 케이스를 기반으로 JUnit5 라이브러리를 사용하여 “테스트 코드”를 제안해주어야 합니다.
- 각 테스트 코드에는 "DisplayName" 어노테이션을 사용하여 어떤 내용을 테스트하는지 설명합니다.
- 테스트 코드를 제안하면서 체크해야 할 포인트를 “Check Point”로 알려주어야 합니다.
- “Feedback”은 구체적이고 명확해야 하며, 개선 사항을 제시하는 것에 초점을 맞추어야 합니다. 긍정적인 피드백도 제공하고, 리뷰 받는 개발자의 노력과 기여를 인정하는 것이 중요합니다.
- 피드백 할 게 없으면 칭찬해 주세요.
- 모든 내용은 한글로 설명해주세요.
이제 GPT에게 위의 지침을 수행하기 위한 기반 지식을 셋팅합니다. GPT는 클린 코드(Clean Code)의 지식을 장착하고 우리가 작성한 코드를 리뷰해 줍니다. 또한 질문을 하면 지식을 기반으로 하는 답변을 이끌어 낼 수 있습니다.
지식 아래의 "기능"에서 웹 브라우징과 DALL·E 이미지 생성을 체크 해제합니다.
마지막으로 오른쪽 위에 만들기를 클릭합니다.
여기까지 따라오셨다면 이제 코드 리뷰어 GPT를 사용하실 수 있게 되었습니다.
저희 팀에서는 Git Action을 아직 도입하지 않았지만, Git Action을 활용한 코드 리뷰 활용 블로그 들이 있어서 이 부분을 적용해 보면 어떨까 팀에서 논의를 해볼 예정입니다. (비용 관련...)
더 좋은 리뷰의 답변을 얻어내려면, 회사의 비즈니스 도메인 지식을 정리하여 지식을 추가해야 합니다. 단순 코드의 리뷰 뿐만아니라 도메인 지식이 곁들인 리뷰라면 비즈니스 프로세스를 이해하는 데 있어서도 개발팀에 많은 도움이 될 것입니다.
위의 내용을 기반으로 ChatGPT 뿐만아니라 다른 생성형 AI에서도 코드 리뷰어를 만들어 사용할 수 있을지도 모르겠습니다. 현재로써는 이 도구를 이용하는 방법이 팀원들의 시간을 아껴줄 수 있는 가장 빠른 방법이라고 생각해서 어떻게 만들지 연구하는데는 시간이 조금 걸렸지만, GPT를 만들 때는 1시간도 채 걸리지 않았습니다.
코드 리뷰어 GPT를 사용하면서 현재 개발환경에 맞는 가장 효율적이고 가독성이 높은 코드를 빠르게 생성하여 테스트하고 업무에 적용하고 있습니다. 저의 시간 뿐만아니라 팀원들의 시간도 아낄 수 있었고, 무엇보다 프로젝트에 구현된 과거의 코드들이 점점 일관성있는 코드로 진화하고, 테스트 코드도 함께 작성하면서 코드에 대한 신뢰도 점점 높아지고 있습니다.
지금 당장은 큰 변화를 못 느낄 수 있지만, 시간이 지날 수록 팀의 생산성은 반드시 늘어나고 개발자 분들의 지식도 함께 성장할 것이라 믿어 의심치 않습니다.
여기까지 읽으신 개발자 분들도 꼭 만들어 보셔서 업무에 활용해 보시길 바랍니다.