71
우우 우우우우 우우우우우 우 우 우우우 ?

[135] 우리 팀에서도 코드리뷰를 할 수 있을까 안오균

Embed Size (px)

Citation preview

우리 팀에서도코드리뷰를 할 수 있을까 ?

카카오스토리 웹팀의 코드리뷰 그 후

• 리뷰 정착의 어려움을 극복하는 과정이 좋았다• 발표를 듣고 깃훅을 적용해봤는데 효과가 좋았다• 우리 팀이 겪었던 과정과 비슷해 공감이 됐다

반면 , 아쉬운 피드백

• 우리는 너무 바빠서 하기 어렵다• 우리 팀 분위기에선 어차피 안될 것 같다• 해보려고 했는데 잘 되지 않더라

기존 팀에 코드리뷰를 도입하게 됨

• 마침 , 팀을 옮기게 됨• 코드리뷰를 하지 않고 있던 팀• 기존 팀에 리뷰를 도입하는 것이 어렵다는 것을 느낌

오늘은 ,

• 팀에서 코드리뷰를 해보려고 할 때• 어떻게 잘 도입할 수 있을지에 대한 아이디어를 제안• 부담없이 내일부터 시도해볼 수 있는 방법

오늘의 목표

• 처음엔 어떻게 시작해야 할까 ?

• 해보니 곧 흐지부지하게 되던데 어떻게 해야 할까 ?

• 어떻게 하면 다툼 없이 적용할 수 있을까 ?

가정

• 우리는 코드리뷰를 주도적으로 도입할 의지가 있다• 지금 속해 있는 팀에서 리뷰를 해보려고 한다• 깃헙과 같은 온라인 코드리뷰 도구는 준비되어 있다

용어

• 코드리뷰 = 리뷰• Pull Request = PR

코드리뷰가 안정화될 때까지

성숙기도입기 안정기

코드리뷰가 안정화될 때까지

성숙기도입기 안정기

상호 리뷰하는 단계

코드리뷰가 안정화될 때까지

성숙기도입기 안정기

스토리 웹팀의 이야기

코드리뷰가 안정화될 때까지

성숙기도입기 안정기

대부분 도입기에서 실패

코드리뷰가 안정화될 때까지

성숙기도입기 안정기

리뷰다운 리뷰를 해보지도 못하고 실패

도입 실패 시나리오

• 자 ! 리뷰 해보자• 바빠서 리뷰할 시간이 없다• 그렇게 시간이 흐르고 ,

• 없었던 일이 됨

도입 실패 시나리오 2

• 자 ! 리뷰 해보자• 각자 Pull Request 를 올려보자• 무플인 채로 시간이 흐르고 ,

• 없었던 일이 됨

왜 도입에 실패했을까 ?

• 리뷰할 시간이 없다• 동료의 호응이 없다

리뷰에는 시간이 필요하다

• 내가 동료의 코드를 읽어야 함• 동료가 내 코드를 읽어야 함• 동료가 리뷰해주는 것을 기다려야 함• 리뷰 받은 내용에 피드백을 해야 함

코드량과 리뷰시간

코드량

리뷰 시간

호응이 어려울 수도 있다

• 기존에 일해왔던 방식이 있음• 여유가 없어 새로운 것에 대한 거부감이 있을 수 있음• 리뷰를 하는 것에 대한 공감대 부족

코드리뷰에는 시간이 필요한데 ,

우리는 이미 너무 바쁨 .

스토리 웹팀에서 유지할 수 있었던 이유

• 새로 시작하는 팀 , 모두 동의 하에 도입• 초기부터 팀의 문화로 자리잡힘• 바쁜 상황에서도 리뷰의 우선순위가 높았음

코드리뷰는 팀의 문화

• 팀의 문화 = 팀의 습관• 습관은 한 번에 바꾸기 어렵다• 처음부터 너무 많은 것을 바꾸려고 했던 것은 아닐까• 여유와 시간을 갖고 점진적으로 도입해보자

• 뇌는 변화를 싫어한다• 가볍고 작은 일의 반복으로 극복• 스몰 스텝 전략

리뷰 도입 시 자주하는 실수

• 주도하는 사람도 익숙하지 않음• 시작 단계에서 규칙을 너무 많이 정함• 도입부터 많은 시간과 노력이 필요하게 됨

팀이 코드리뷰에 익숙해지도록 하자

• 코드리뷰라는 것에 익숙하게 하자• 자연스럽게 습관이 되도록 만들자• 조금씩 환경을 개선해보자

팀이 코드리뷰에 익숙해지도록 하자

• 코드리뷰라는 것에 익숙하게 하자• 자연스럽게 습관이 되도록 만들자• 조금씩 환경을 개선해보자

코드리뷰를 익숙하게 만드는 3 단계

나 혼자 리뷰 동료에게리뷰 요청

동료에게PR 요청

코드리뷰를 익숙하게 만드는 3 단계

동료가 코드리뷰에 익숙해지도록

나 혼자 리뷰 동료에게리뷰 요청

동료에게PR 요청

나중에 생각할 것

• 리뷰를 잘 하는 방법에 대한 것• 리뷰 규칙 , 머지 규칙 , 도구 활용 등• 상호 리뷰하는 단계 이후에 고민

우리의 마음가짐

• 천천히 , 충분한 시간을 갖고 적용하자• 원래 어려운 일이라 생각하자• 어떻게 바뀌고 있는지 변화를 관찰하자

1 단계 : 나 혼자 리뷰하기

• 내가 PR 을 올리고 내가 리뷰한다• Pull Request - 리뷰 - 머지 경험하기• 내가 코드리뷰에 익숙해지는 것이 목표

나 혼자 해보는 것의 장점

• 시간이 들지도 않고 , 동료의 호응도 필요하지 않음• 지금 바로 실천할 수 있음• 코드를 퇴고하는 습관

나 먼저 익숙해지기

• 브랜치 관리 , develop 따라가기 등• 코드를 읽는 것에 익숙해짐• 다른 사람의 리뷰는 기대하지 않음

2 단계 : 동료에 리뷰 요청하기

• 내 코드에 대한 리뷰를 동료에게 부탁• 처음엔 리뷰하기 쉽도록 PR 은 작은 단위로• 동료가 PR - 리뷰 - 머지 경험을 반복할 수 있도록• 동료가 코드리뷰에 익숙해지는 것이 목표

호응이 없다면 ?

• 그럴 수 있다 . 실망하지 말자• 담당자를 지정해보자• 구두 또는 메신저 , 멘션으로

코드리뷰에 대해 언급하기

• 스크럼 또는 단체 채팅방에서• “PR 올려뒀어요 . 리뷰 부탁드려요 ~”

• 팀의 습관을 만들기 위한 물밑작업

그래도 호응이 없다면 ?

• 그럴 수 있다 . 실망하지 말자• 팀의 변화를 관찰하자 .

어떤 변화가 있었을까 ?

• 내가 PR 을 올리고 내 코드를 퇴고하고 있다• 동료들이 PR - 리뷰 - 머지 싸이클을 인식했다• 처음보다 리뷰에 응답할 확률이 높아졌다

내가 이걸 왜 하고 있지 ?

• 팀의 문화가 달라질 수 있다 .

• 나를 포함해 모두 성장할 수 있다 .

동료가 리뷰 의견을 줬다 !

• 리뷰 의견에 피드백은 반드시 하기• 의견을 수용할 지 여부는 본인이 결정• 애매할 땐 , “ 생각해보고 결정할께요”

코드는 내가 아니다 .

그저 내가 작성한 코드일 뿐 .

3 단계 : 동료에게 PR 요청하기

• 스크럼 또는 단체 채팅방에서• “리뷰 필요하시면 PR 올려주세요 ~”

• 분위기를 만들되 , 강요하지 말고 기다리자

동료가 Pull Request 를 올렸다 !

• 우리의 목표에 근접해왔다 !

• 피드백 ! 반드시 피드백하기

이렇게 리뷰하자

• 부드럽고 젠틀하게• 궁금한 건 의도를 물어보는 식으로 접근• 이견이 있다면 구체적인 방법을 제시• 결정권은 작성자에게 있다

좋은 예

• “이런 이런 상황에선 어떻게 되는 거죠 ?”

• “이 코드는 어떤 이유 때문에 있는 거예요 ?”

• “이렇게 하면 더 좋을 것 같아요” - 구체적 코드

어떤 부분을 리뷰하면 좋을까

• 구조 / 로직 개선 , 버그 수정 , 예외 처리 , 성능 개선 등• 코딩 스타일에 대한 리뷰는 나중에 해도 좋을 듯

어… 할 말이 없는데 ?

• “좋네요 !”

• “수고하셨습니다”• “👍🏽”

누군가 내 코드를 보고 있다 .

누군가 내 코드를 보고 있다 .

코드를 한 번 더 검토하게 되는 동기를 유발

동료가 내 코드를 주의 깊게 보고 있다 .

동료가 내 코드를 주의 깊게 보고 있다 .

코드리뷰를 통해 함께 성장할 수 있는 시작점

코드리뷰의 도입

성숙기도입기 안정기

리뷰가 익숙해짐

도입기에서 성숙기로

성숙기도입기 안정기

상호 리뷰하는 단계

도입기에서 성숙기로

• 이제는 상호 리뷰를 하는 단계 . 성숙기에 진입• 팀에 맞는 더 좋은 리뷰 방법을 고민해야할 때• 스토리 웹팀의 리뷰 경험

‘코드리뷰’에 대한 피드백

• 회고 또는 정기적인 개발 미팅• 코드리뷰에 대한 후기를 공유• 리뷰를 지속할 수 있는 동기• ‘우리가 조금씩 하고 있구나’라는 공감대

옮긴 팀에서의 결과

• 약 7 개월 간 142 개의 PR

• 댓글이 있는 PR: 59 개• 댓글이 3 개 이상 : 30 개• 총 댓글 : 250 개

아직 피드백이 활발하지 않은 것은 아쉬움

나아지고 있다고 생각하는 점

• 7 개월 간 지속하고 있음• 실질적으로 의미있는 리뷰도 다수 있었음• 이제는 모두 코드리뷰가 익숙함• 자율적으로 PR 을 올림

강압적으로 적용했다면 어땠을까 ?

• 팀원들의 거부감 , 스트레스• 기존 프로세스 대비 리뷰가 병목이 될 가능성• ‘코드리뷰가 과연 필요할까 ?’ 에 대한 논의

새로 시작하는 팀이라면

• 빠른 시점에 문화로 정착시키자• 모든 멤버의 자율적 동의로 시작하고 ,

• 최대한 강제성을 적용한 규칙으로 시작• 규칙은 도구를 사용해 제한

시작할 땐 이렇게 해보면 어떨까

• develop, master push 제한 / 모두 PR 로• 모든 멤버의 동의로 머지

리뷰를 잘 유지하려면

• 적극적으로 피드백 하기• 개발자들과 자주 이야기할 수 있는 환경 만들기• 규칙을 제한할 땐 도구를 활용하기

정리 : 기존 팀에 리뷰 도입하기

• 코드리뷰에 익숙해지게 하자 - ( 나 먼저 )

• 적극적으로 피드백하자 - (누군가 보고 있다는 느낌 )

• 자연스럽게 습관이 될 수 있게 유도하자 - ( 스크럼 , 단톡방 )

• 팀의 변화를 관찰하자

Q&A

Thank You