GitHub Pull-Request 관련하여 뭔가 만들어보려고 하다보니

`코드리뷰`를 어떻게 하는 것이 효율적인 것인지에 대해서 알아보게 되었다.

 

그러다가 알게된 "코드리뷰 in 뱅크샐러드 개발 문화"라는 포스팅 !!!

왜 진작 알지 못했을까!? 라는 탄식이 나오게 하는 너무나 유용한 내용이었다.

  - https://blog.banksalad.com/tech/banksalad-code-review-culture/#커뮤니케이션-비용을-줄이기-위한-pn-

 

 

꼭, 반드시 원본글을 완독해보시기를 강력하게 추천을 드린다.

아래 포스팅은 내가 감동한 부분에 대한 이야기만 조금 남겨보도록 하겠다.

 

Communication: Sync vs. Async

회사에서 일을 하다보면 참으로 많은 인터럽트 상황이 발생하게 된다.

주로 발생하는 것은 메일, 메신저, 전화, 문자 그리고 직접적으로 찾아오는 사람 방문(대면) 등

 

`개발자의 몰입 비용`에 대해서도 한 번 정리해보고 싶긴 한데, 지금은 소통 방식에 대해서 집어보도록 하자.

 

소통하는 방식을 조금 다르게 분류해보면 `동기(sync)`와 `비동기(async)`으로 나누어 볼 수도 있다.

그 중에서 개인 업무 시간을 보장할 수 있는 소통 비용이 저렴한 방식은 `비동기 소통`이다.

 

개인의 업무 시간, 특히 집중을 깨뜨리지 않기 위해서는 `비동기 소통(async communication)`이 중요하다.

그래서, 뱅크샐러드에서도 기본적인 소통 방식을 `비동기 소통`을 하도록 권장하고 있고

그 연장선에서 코드리뷰 도구로 GitHub Pull-Request를 선택했다고 한다.

 

나도 회사에서 업무할 때

PR을 떠나 개발자들이 더 잘 집중할 수 있도록 `비동기 방식의 소통`을 기본 정책으로 하는 것에 대해 많이 고민해봐야겠다.

 

 

작은 PR(Pull-Request)

코드 리뷰를 할 때에 매번 언급되면 `작은 PR`.

누구나 알고있지만 누구나 잘 지키기 어려운 ... 항상 있는 숙제 같은 느낌의 정책이다.

 

나도 회사에서 이를 지켜보려고 하지만 정말 쉽지 않다.

그러다가 저 블로그 포스팅에서 얻은 힌트 ~~~ !!!

 

예외를 명시적으로 두자 !!!

 

Initial Commit, Test Code 등 큰 덩치로 들어오는 경우에 대해

공식적으로 예외 규칙을 두게 되면 좀 더 자연스럽에 PR을 운영할 수 있을 것 같다.

 

1,000 line 이후의 작은 PR을 유지하면 리뷰 병목을 해소할 수 있다.

 

 

`Low Context` Communication

`Low Context`는 번역될 때 다양하게 표현된다.

  - 저 문맥

  - 저 맥락

  - 저 배경

 

어떻게 번역되더라도 사실 잘 와닿지는 않는다.

 

Low가 있다는 것은 반대로 High도 있다는 것인데,

`High Context`는 조금 돌려말하는 것을 의미하고 `Low Context`는 직설적으로 표현하는 것을 의미한다고 한다.

 

`Code Review`를 요청할 때에는 `Low Context`로 설명을 해줘야 한다는 것이다.

 

상대방이 `이 정도는 알거야`라고 생각하지도 말고, 애둘러 표현하거나 추상적으로 표현하지도 말고

그냥 정확하게, 직설적으로, 최대한 구체적으로 표현(소통)하는 것이 효과적이다.

 

파트원들에게 꼭 하고 싶은 중요한 rule인 것 같다.

 

 

`Pn` 룰

개인적으로 가장 감동을 받은 정책이다.

처음 본 것도 아니고, 모르던 것도 아니고, 안해본 것도 아닌데 그럼에도 신선했다 !!!

 

P1: 꼭 반영해주세요 (Request changes)
  - 중대한 코드 수정이 반드시 필요하다고 판단되는 경우. 합리적인 의견을 통해 리뷰어 설득 필요

P2: 적극적으로 고려해주세요 (Request changes)
  - 수용하거나 만약 수용할 수 없는 상황이라면 적합한 의견을 들어 토론할 것을 권장

P3: 웬만하면 반영해 주세요 (Comment)
  - 수용할 수 없는 상황이라면 이유 설명 또는 향후 반영 계획 명시

P4: 반영해도 좋고 넘어가도 좋습니다 (Approve)
  - 무시 가능. 고민 추천

P5: 그냥 사소한 의견입니다 (Approve)
  - 아무런 의견을 달지 않고 무시해도 괜찮음

 

 

뱅크샐러드에서는 단지 PR에만 사용하는 것이 아니라

Slack 대화할 때 또는 평상시에도 Prefix로 자연스럽게(문화) 사용하고 있단다.

 

우와!!!!

부서에 꼭 반드시! 빠르게! 적용하고 싶은 rule 이다.

 

 

`D-n` 룰

`Pn 룰`만큼은 아니지만, 그래도 너무나 좋은 정책이라고 여겨지는 rule이다.

 

D-0 (ASAP)
  - 긴급한 수정사항으로 바로 리뷰해 주세요.
  - 앱의 오류로 인해 장애가 발생하거나, 빌드가 되지 않는 등 긴급 이슈가 발생할 때 사용합니다.

D-N (Within N days)
  - “Working Day 기준으로 N일 이내에 리뷰해 주세요”
  - 일반적으로 D-2 태그를 많이 사용하며, 중요도가 낮거나 일정이 여유 있는 경우 D-3 ~ D-5 를 사용

 

우와 ... 얼마나 명확한 소통 방식인가 !!!

뱅크샐러드에서는 Prefix 방식이 아니라 Tag 방식으로 활용하고 있단다.

 

 

 

그렇게 어렵지도 않고, 복잡하지도 않은 `리뷰 정책`인데,

제대로 정착만 된다고 하면 정말 상당히 꽤 효율적으로 pull-request를 수행할 수 있을 것이라 믿음이 생긴다.

 

간단히 요약해보았는데, 관심이 있으신 분은 원본 글을 꼭 찾아가서 읽어보시기 바랍니다!!!

반응형

혼자 개발하면 외롭다.

특히, 코드 리뷰를 받고 싶은데 내 마음 같은 사람 만나기도 어렵고 ...

 

우리의 구글님은 이런 외로운 개발자를 위해서

공짜로 Gemini를 제공해주신다 !!! 경배하라 !!!

 

의외로 모르시는 분들이 많은데,

GitHub.com 왼쪽 메뉴를 살펴보면 `Marketplace`가 있다.

- https://github.com/ 

 

 

Marketplace에서는 여러 유형의 상품(?)을 제공해주고 있는데, `Apps` 항목을 살펴보자.

좀 더 편하게 살펴보기 위해 `AI Assisted` 카테고리를 선택하면 `Gemini Code Assist`를 발견할 수 있다.

 

 

오해를 줄이기 위해서는 `Gemini Code Assist for GitHub`이라고 해야할 것 같은데...

https://github.com/marketplace/gemini-code-assist 

 

 

생각보다 설치 수가 좀 적어서 깜짝 놀랐다 !!

 

GitHub PR(Pull-Request)과 관련된 몇 가지 명령어를 제공해주고 있다.

 

 

우리의 구글님은 이런 아름다운 기능을 `Free`로 제공해주고 계신다 !! 경배하라 !!

하지만, 나중에는 십일조라도 받아가시겠지!? ^^

 

 

지금은 Free Tier 이지만,

나중에 얼마든지 십일조를 걷어가기 위해 `결제 정보`는 요구하고 있다.

 

 

개인 계정을 기준으로 설치할 수도 있고, Organization 단위로 설치할 수도 있다.

 

화끈하게 All repositorues를 선택해도 좋지만,

처음에는 조심스럽게(소심하게?) `Only select repositories`를 선택해보자.

 

 

이제서야 `Gemini Code Assis for GitHub`라고 자백하는구나 !!

 

 

우리의 구글님께 모든 권한을 바칩니다 !!! 

 

 

개인 계정 또는 Organization을 선택해야 한다.

 

 

리뷰의 정도를 선택할 수 있는 것 같은데, 일단은 Medium !

 

 

이 정도의 설정만 해주면 된다.

 

 

지정한 Repository의 Settings를 보면 잘 설치되어 있는 것을 확인할 수 있다.

 

 

이렇게 해놓은 상태에서, PR을 신규로 올리면 자동으로 코드 리뷰를 진행해준다.

그리고, 직접 명령을 내릴 수도 있다.

 

 

이렇게 명령을 내리면, gemini가 지켜보는 이모지가 등장한다 !! 귀엽다 !!

 

 

그렇게 시간이 좀 지나면, Gemini가 리뷰를 준다.

 

 

Summary는 기다림 없이 바로 이루어진다.

 

 

리소스 할당에 따라 지켜보는 이모지가 선택적으로 나오는 것일까?

 

 

코멘트 중간에 Gemini 홍보(광고? 안내? 공지?)도 들어있다.

 

무료인데 안쓸 이유는 없을 것 같다 !! 고고씽 !!

반응형

온라인 교육을 받다보면 누구나 그렇게 하는 것처럼 웹 서핑을 정말 열심히 하게 된다.

그러다가 우연히 참으로 교육적인 컨텐츠 사이트를 발견하게 되었다.

- First Contributions:  https://github.com/firstcontributions

 

 

첫번째 기여를 해보도록 알려주기 위한 정말 친절한 저장소가 있다니 !!!

- https://github.com/firstcontributions/first-contributions 

 

 

내가 본 것 중에서 가장 많은 언어로 제공해주는 가이드이지 싶다.

물론 한국어도 제공해준다 !!! 태극기를 클릭하자 !!!

- https://github.com/firstcontributions/first-contributions/blob/main/docs/translations/README.ko.md 

 

 

너무나 친절한 가이드이기에 그대로 따라해도 좋지만,

그래도 직접 따라해보면서 조금 더 자세히 안내하는 포스팅을 해보도록 하겠다.

 

① git

이후 작업을 하려면 무엇보다 먼저 git 도구가 설치되어 있어야 한다.

https://git-scm.com/ 

 

 

git 설치 여부 확인 해보고, 필요하면 공식 홈페이지 가이드에 따라 설치 진행하면 된다.

최신 버전 사용하는 것을 권장하지만, 배포판의 경우 살짝 낮은 버전일 수도 있다.

 

 

② Fork

기여하기 위해서는 소스 코드 변경사항을 잠시 담아놓을 나만의 공간(저장소)가 필요하다.

오픈소스 프로젝트를 나만의 저장소로 복사해 놓는 작업을 포크(fork)라고 한다.

아래 이미지 참고하여 fork 버튼을 클릭하자.

- https://github.com/firstcontributions/first-contributions 

 

 

굳이 뭐 다르게 할 필요가 없으면 그냥 기본값 그대로 forked repository를 생성하면 된다.

 

 

개인계정 밑으로 forked repository가 생긴 것을 볼 수 있다.

내 마음대로 손대도 되는 나만의 공간이다.

 

 

③ clone

forked repository를 이제 내 작업환경(local)에 내려받아보자.

 

 

나는 Ubuntu 환경에서 작업을 진행했지만, 명령어 자체는 Windows, Linux, macOS 모두 동일하다.

 

 

④ branch

현재 branch 상황을 확인하고, 파일 수정을 하기 위한 작업용 branch를 생성하자.

 

branch 정보를 보려고 하면 화면 전환이 되는 것이 불편해서 환경 설정 값을 셋팅했다.

> git config --global pager.branch false

 

 

최근 git에서는 branch 전환하는 경우, switch 명령어 사용을 권장한다.

"-c" 옵션을 통해 신규 branch를 생성하고 이동까지 했다.

 

⑤ config

변경사항 저장을 위한 commit을 하려면 사용자 정보가 셋팅되어 있어야 한다.

 

 

branch 정보뿐만 아니라 config 정보라던지 다른 대부분의 출력 방식을 변경해보자.

1페이지가 넘어가는 경우에만 화면 전환을 하고, 그게 아니면 그냥 같은 화면으로 출력하도록 하는 옵션이다.

> git config --global core.pager "less -F -X"

 

user.name 정보와 user.email 정보가 셋팅되어 있지 않으면 아래와 같이 입력해주도록 하자.

> git config --global user.name=this-is-your-name
> git config --global user.email=this-is-your-email

 

⑥ edit

파일 목록을 먼저 확인 해보고, 파일 하나를 수정 작업 해보자.

 

 

contributor 명단에 내 정보를 입력하면 된다.

 

 

 ⑦ commit

변경한 내역을 staging 하고 commit 하면 되는데 ...

 

 

위와 같이 가이드대로 진행을 하면, 나중에 merge가 자동으로 안되는 이슈가 있었다.

 

 

가이드 내용과 달리 "> git add -p"를 통해 staging을 권장하는 내용이 나온다.

 

필수 요소는 아닌 것 같고, 사실 둘의 차이가 왜 발생하는지 이해가 되지는 않지만

이렇게 진행했더니 바로 merge가 된 것으로 보면 이렇게 진행하는 것을 권장한다.

 

 

⑧ push

이제 저장소에 밀어 넣으면 된다.

 

 

⑨ pull-request

이제 github 사이트를 통해서 진행하면 된다.

나의 forked repository를 보면 push 내역을 자동으로 인지해서 pull-request 버튼이 나타난다.

 

 

Description 내용을 보면 간단한 설문 내용도 있으니

찬찬히 읽어보고 제안할 내용 등이 있거나 하면 그에 맞춰서 체크하고 진행해보자.

 

 

⑩ merge

제대로 진행했으면 자동으로 체크 후 merge까지 진행이 된다.

 

 

"Pull requests" 내역의 Closed 항목에서 확인해볼 수 있다.

 

 

Actions 항목에서 내 PR을 위해 수행한 내역을 확인해볼 수 있다.

 

 

⑪ Retry

혹시 merge가 안되고 open 상태로 있다면,

잠시 기다려 보고 그래도 open 상태라고 하면 close 처리 후 다시 진행해보는 것을 추천한다.

 

Actions 내역을 보면 Fail이 아님에도 불구하고,

밑의 그림에서 볼 수 있듯이 Merge PR 부분이 실행되지 않았음을 알 수 있다.

 

 

그러면 Close 하고 다시 PR을 올려보는 것을 추천한다.

 

 

 

이제 여러분은 오픈소스 기여자가 되었습니다 !!!

 

반응형

+ Recent posts