누군가 나의 PR을 리뷰해준다....누구냐 너

DeadWhale·2023년 12월 6일
19
post-thumbnail

코드리뷰가 얼마나 든든한지 받아본 사람들은 알거다.

나도 최근 프로젝트에서 코드리뷰를 해주시는 멘토님이 계셔서 정말 많은 도움을 받았는데.

일정상 멘토링이 마무리 되고 개인적으로 개선작업을 하면서는 코드리뷰를 받을 수 없다....

img_1.png

그러던 중 , 개발자 톡방을 통해서 코드리뷰를 받을 수 있는 방법을 알게됬는데. 바로 CodeReviewBot!

img_1.png

https://github.com/anc95/ChatGPT-CodeReview

흠...이번에 알았는데 나도 모르게 중국 친구들한태 도움을 많이 받았는데

개인적으로 자주 쓰는 IntelliJ에서 document 즉시 번역을 위한 플러그인도

중국친구가 만들어줬고, 이번에 코드리뷰도 중국친구가 만들어줬다.

떙큐!


준비

사전에 정리하자면

  1. 비용이 발생한다. 1000 토큰에 0.0002$달러 정도 발생한다.
    • 4byte가 평균 1토큰이라고 한다.
  2. 코드리뷰의 정확성이 떨어질수 있다.
  3. 불필요한 코드리뷰도 발생한다.
    • 단순한 변수명 변경 , 주석 변경 , 임포트문 정리도 리뷰를 한다.
    • 이 부분은 개발자도 인지중이고 개선 여지가 있는것 같다.(프리픽스를 조절하는 방법도 가능하지 않을까?)

Step1. OpenApi Key 발급 받기

img_1.png

https://openai.com/blog/openai-api

해당 링크의 OpenApi Key를 발급받는다.

키 이름은 크게 상관 없고. 키 코드만 잘 보관해야한다.

Step2. add GitHub secret

당연한 말이지만 레포지토리가 있어야한다. 하지만 너무 당연한 부분이라 생략!

키가 있어야 API를 호출할 수 있기 때문에 workflow 과정중에 사용할 secret을 등록해야한다.

img_1.png

레포지토리 -> Settings -> Secrets and variables -> Actions

img_1.png

OPENAI_API_KEY 라는 이름으로 발급받은 키를 등록한다.

Step3. create workflow

GitHub action에 workflow를 활용해 코드리뷰를 받을 수 있도록 설정한다.

레포지토리 root에 .github/workflows 폴더를 생성하고 아래와 같이 코드를 작성한다.

name: Code Review # workflow 이름

# 이 작업 동안에는 코드를 읽고 PR에 코멘트만 추가해주면 된다.
permissions:
  contents: read # 읽기 권한 
  pull-requests: write # PR에 코멘트 추가 권한

on: # 언제 실행할지
  pull_request: # PR이 올라오면
    types: [ opened, reopened, synchronize ] # PR 생성 , 재생성 , 커밋같은 동기화 작업이 있을때 

jobs:
  test:
    # 만약 PR에 gpt review 라는 라벨이 붙어있을때만 실행하고 싶다면 아래와 같이 작성하면 된다.
    # if: ${{ contains(github.event.*.labels.*.name, 'gpt review') }} # Optional; to run only when a label is attached 
    runs-on: ubuntu-latest
    steps:
      - uses: anc95/ChatGPT-CodeReview@main
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}  # 이 부분은 자동적으로 깃허브에서 생성되는 부분이기 때문에 따로 설정할 필요가 없다.
          OPENAI_API_KEY: ${{ secrets.API_KEY }} # 여기서 secrets.등록한_키 이름을적어주면된다. 나는 API_KEY로 등록 했기 때문에 API_KEY로 작성했다. 
          # Optional
          LANGUAGE: Korean #한국어 
          OPENAI_API_ENDPOINT: https://api.openai.com/v1 # 이 부분은 따로 설정하지 않으면 자동으로 설정된다.
          MODEL: gpt-3.5-turbo # 모델을 변경하면 다른 결과가 나온다. 비용도 다르기 때문에 주의 (https://platform.openai.com/docs/models)
          PROMPT: # 예: 다음 코드 차이점에 혼동이나 불규칙성이 있는지 확인하세요.
          max_tokens: 10000 #이번 리뷰에서 사용할 토큰의 최대 개수

이 부분은 https://github.com/anc95/ChatGPT-CodeReview#readme 의 내용을 번역만 한 것인대

직관적이고 이해하기 쉽게 작성되어있기 때문에 따로 설명을 하지 않아도 될거 같다.

별개로 yml if: ${{ contains(github.event.*.labels.*.name, 'gpt review') }} # Optional; to run only when a label is attached

이 부분이 중요한대 다음 스탭에서 한번 더 설명하겠다 꼭 설정하시길 추천.


Step4. pull request create

이제 PR을 생성하면 된다.

img_1.png

이런 식으로 코드리뷰를 진행해준다.

img_1.png

3번 처럼 null 검사도 해주고 주석이나 조건문의 의미도 설명한는 식으로 진행해준다.


위의 이미지를 봐서 느낄수 잇겟지만. 2인까지는 무조건 추천한다.

코드를 모두 읽고 리뷰하는 것은 공수가 엄청나게 많이 발생한다.

이런 부분을 gpt의 정리 코멘트일 경우에 매우 효율적인 모습을 보여준다.

나도 개인 프로젝트를 하면서 적용하고 도움이 많이 되고 있고.

다른 분들도 한번씩 써보셨으면 좋겟다.


ex

필요할 때 만 사용하자

PR오픈하고 지속적으로 수정할탠대. 매번 매번 코드리뷰를 받으면 PR이 너무 길어지고

불필요한 리뷰도 많이 사용한다.

나는 몰랐는데 ReadMe에 다 적혀있었다. 지금 글 쓰면서 알았다.....

기본적으로 on 조건은 동일하게 둔 후 if 조건을 추가하면 된다.

if: ${{ contains(github.event.*.labels.*.name, 'gpt review') }} # Optional; to run only when a label is attached 
runs-on: ubuntu-latest

이거는 gpt review 라는 라벨이 붙어있을때만 실행하고 싶다는 의미이다.

라벨을 붙였다 떼면 코드리뷰가 실행되지 않는다.

이 if 조건을 runs-on 이전에 추가해 원하는 조건을 제어하면 된다.

나의 경우

if: ${{ contains(github.event.head_commit.message, '#code-review') }} || ${{ contains(github.event.head_commit.message, '#code_review') }}
runs-on: ubuntu-latest
img_1.png
  • 커밋시에 #code-review , #code_review 라는 태그를 달아주면 코드리뷰가 실행된다.
  • #code-review , #code_review 둘 중 하나의 키워드만 사용해서 커밋 시 코드리뷰가 실행된다.

위를 참고해서 본인의 편의대로 커밋 메시지나 PR 라벨을 활용해 코드리뷰를 필요 시에만 요청하게 설정하고 사용하길 바란다.


  • 만약 429 에러 발생 시 GPT에서 크래딧을 등록해보길 바란다. 나의 경우 이 방식으로 해결했다.
  • 다른 문제 발생 시 https://github.com/anc95/ChatGPT-CodeReview 의 issue를 참조해보도록 하자

0개의 댓글