Amazon CodeGuru로 AI에게 코드리뷰 받기
AWS re:Invent 2019에서 발표된 신규 서비스인 CodeGuru의 기능 중 코드리뷰를 사용해본 후기입니다.
Amazon CodeGuru
https://aws.amazon.com/ko/codeguru
Amazon Codeguru는 머신러닝에 기반하여 코드를 분석해 개선점에 대한 코멘트를 남겨주거나, 성능 저하가 많이 발생하는 부분을 잡아주는 프로파일링 기능을 지원합니다. 현재 글을 작성한 시점(2020.1)에는 Java 언어에 대해서만 지원하고 있고, 서비스 활성화 후 3개월간 CodeGuru의 모든 기능을 무료로 사용할 수 있습니다.
저장소 연동하기
CodeGuru는 GitHub 또는 AWS CodeCommit 저장소와 연동하는 것을 지원합니다. 연동 과정은 간단합니다.
- AWS 콘솔에 접속하여 서비스 목록 중 Amazon CodeGuru를 찾습니다.
2. Associated Repositories 메뉴를 클릭하면 연동된 저장소들이 목록에 표시됩니다. 연동할 저장소를 추가하기 위해 Associate Repository를 클릭합니다.
3. GitHub 또는 AWS CodeCommit 저장소를 설정할 수 있습니다.
4. 추가 후 잠깐 기다리면 연동이 완료됩니다. GitHub 저장소를 추가한 경우 저장소 설정에서 AWS로의 웹훅이 추가되어 있고, PR 이벤트에 대해 트리거가 설정된 것을 확인할 수 있습니다.
저장소 추가가 끝나면 코드리뷰를 받을 준비가 끝났습니다.
리뷰 받기
Java 디자인 패턴을 모아놓은 저장소인 java-design-patterns 를 테스트에 사용해보기로 했습니다. 많이 참고하고 있는 프로젝트이기도 했고, 자주 인용하는 소스 중에 혹시나 수정할 만한 취약점을 찾아줄 수 있는지 기대감이 있었습니다(이 프로젝트에 대한 불만이 있었던 건 아닙니다).
전체 변경사항을 분석 받아 보고 싶었으므로 master 브랜치를 가장 첫 번째 커밋에 머지해보기로 합니다.
원래는 제가 직접 안티패턴 덩어리를 만들어서 코드리뷰를 받아보고 싶었는데.. 아직은 리뷰해주는 규칙이 생각보다 한정적인 것 같아 별다른 리뷰를 받지는 못했습니다. 몇십 줄 깨작 만들어서 분석 받아도 아무런 리뷰가 없길래, 이렇게 몇만 라인이 되는 Java 프로젝트를 분석하면 몇 건은 잡아낼 것으로 생각했습니다. 무료 사용 기간이라 전체 변경사항에 대해 PR을 만들어 봤지만, 실제로는 분석한 라인 수를 기준으로 과금하고 있으므로 주의가 필요합니다(100라인당 0.45달러로 책정되어 있습니다).
여담으로, 이런 코드는 리뷰해 주지 않았습니다.
아무튼, 리뷰 받은 결과를 보겠습니다.
CodeGuru Reviewer detects and flags wide-ranging issues in source code such as thread safety issues, use of un-sanitized inputs, inappropriate handling of sensitive data such as credentials, and resource leaks. It provides recommendations on how to fix these issues. These issues are usually difficult to detect through peer code reviews and unit testing. In addition, CodeGuru Reviewer reviews your code for AWS APIs and SDK usage and helps ensure you stay current with the latest AWS features and best practices.
AWS에서 CodeGuru의 기능을 소개하는 글에서처럼, 여타 정적분석 도구처럼 thread safety나 자원(메모리) 누수와 같은 문제를 잡아내는 것을 보여줬습니다. 또한 Sonarqube에는 없는 규칙으로 코드상 취약점을 분석하고 있었고, 잘 알려진 문제일 경우 참고할 수 있는 링크나 예시를 통해 안전한 방법을 제시하고 있습니다.
참고로, Sonarqube로 동일한 코드를 분석했을 때는 코드 중복만 잡아냈습니다.
머신러닝에 기반해 코드리뷰를 해준다는 점이 흥미로웠지만, 다른 정적분석 도구인 Findbugs, Sonarqube와 같이 잘 알려진 코드스멜을 잡아내는 것에는 아직 규칙이 완전하지 않은 것처럼 보였습니다. 코드 중복이나 null safety, 위에서의 5중 반복문(…)과 같은 코드로 테스트했을 때 CodeGuru에서 리뷰해주지는 않았습니다. 아직 이러한 불완전성 때문인지 공식문서에서도 사람이 직접 참여하는 기존의 코드리뷰 방식과 병행해서 사용하는 것을 권장하고 있습니다. 또한 AWS API나 SDK를 사용하는 경우 best practice에 기반해 리뷰해준다고 하니, AWS와 연동하는 서비스를 개발하는 경우 도움이 될 것으로 보입니다.