🙇
글을 작성하면서 선뜻 리뷰이를 해주셨던 분들의 답변 사진이 들어 있습니다. 항상 감사합니다!
개발자로 개발과 관련된 활동을 하다 보면 다른 사람의 코드를 피드백하거나 읽어야 하는 일이 생깁니다. 어쩌면 자신의 코드를 작성하는 것 보다 많은 시간을 다른 사람의 코드를 읽는 데 사용할지도 모릅니다. 로버트 마틴의 클린 코드에서도 비슷한 이야기를 언급합니다.
프로그램을 짜다 보면, 코드를 쓰는 시간보다 (남은 물론이고 자신도 정신없어 어지럽힌) 코드를 읽는 시간이 훨씬 더 많다는 사실을 알고 있다면, ......
코드를 읽는 시간 대 코드를 짜는 시간 비율이 10대 1을 넘는다. 따라서 읽기 쉬운 코드가 매우 중요하다. 기존 코드를 읽어야 새 코드를 짜므로 읽기 쉽게 만든다면 짜기도 쉬워진다.
이 논리에서 빠져나갈 방법은 없다. 주변 코드를 읽지 않는다면 새 코드를 짜지 못한다. 주변 코드가 읽기 쉬우면 새 코드 짜기도 쉽다.
저도 이번에 학습을 하면서 여러 사람들의 코드를 읽어야 하는 활동을 하게 되었습니다.
평소에 주변 동료들이 코드 리뷰를 통해 자극을 받고, 함께 성장하는 모습을 지켜보며 저도 그런 활동에 참여하고 싶다는 마음을 품고 있었습니다. 특히 A를 잘하기 위해 A를 해라
라는 마스터님의 조언은 자신이 잘하고 싶은 일을 잘하게 되는 가장 빠른 길은 결국 꾸준히 시도하고 경험을 쌓는 것
이라는 중요한 깨달음을 주셨습니다. 이러한 자극에 저는 보다 더 코드 리뷰 활동을 많이 해보고 싶다고 생각하게 되었습니다.
검색을 해보면, 이미 코드리뷰에 대한 좋은 글들이 아주 많습니다.
따라서 이번 글은 처음으로 코드 리뷰를 해보면서 왕초보 개발자가 느꼈던 것을 다른 분들도 가볍고 쉽게 간접적으로 경험할 수 있도록 회고해 보고자 합니다.
코드 리뷰?
사실 처음에는 코드리뷰라는 활동이 저와는 멀게 느껴졌습니다. 저는 항상 제가 부족하다고 느끼고 있었고, 남을 평가할 수 있는 사람이 아니라고 생각했습니다. 내가 남기는 리뷰가 과연 리뷰이에게 도움이 될 수 있을까?
라는 의문을 끊임없이 품기도 했습니다.
하지만 코드리뷰는 언젠가는 하게 되는 활동이라고 생각했고, 주변에서 좋은 코드리뷰를 나누면서 개발자로서 함께 자라기를 실천하는 분들을 많이 봐 왔던 터라 저도 이번 부스트캠프에서 꼭 가져가 보고 싶은 활동이었습니다.
그러던 중, 어느 날 마스터님의 세션에서 중요한 깨달음을 얻었습니다. 마스터님은 어떤 행동을 잘하려면 그 행동을 계속 반복하고, 경험치를 쌓아야 한다고 말씀하셨습니다. 마치 잘 뛰고 싶다면 많이 뛰어봐야 하고, 글을 잘 쓰고 싶다면 짧은 글이라도 많이 써봐야 하는 것처럼, 리뷰를 잘하려면 다른 사람들의 코드를 읽고, 피드백을 남기는 경험을 꾸준히 쌓아야 한다는 것이죠.
그 말을 듣고, 저는 조금 무모하게도 모두가 볼 수 있는 채널에 간단한 도전을 해보았습니다. 부담스럽지만, 지금이 아니라면, 어쩌면 평생 주도적인 리뷰를 시도조차 못해볼 수 있겠다는 생각이 들었기 때문입니다.
다시봐도 아찔한 일단 저지르고 보기
처음에는 아무도 내 리뷰를 신청해 주지 않으면 어쩌지?
, 그 사람이 나를 부정적으로 생각하게 되면 어떡하지?
, 내 리뷰로 인해 누군가 상처받거나, 말다툼으로 번지면 어떡하지?
와 같은 생각들이 머릿속을 맴돌았습니다.
하지만 이런 걱정은 기우에 불과했습니다. 함께 공부하는 분들은 오히려 제 리뷰를 기꺼이 받아주셨고, 언제나 환영한다는 따뜻한 말을 건네주셨습니다. 운영진 분도 이러한 활동을 오히려 권장해 주셔서, 코드 리뷰를 더 즐겁고 적극적으로 할 수 있는 마음이 들었습니다.
이러한 상황에서 저는 코드 리뷰 경험이 많지 않았고, 할 줄 아는 것이라고는 그저 코드를 읽는 것뿐이었습니다. 그래서 코드 리뷰를 최대한 잘하기 위해, 리뷰이에게 조금이라도 도움이 될 수 있도록 리뷰를 위한 몇 가지 기준을 세우기로 했습니다.
제가 생각했던 왕초보의 리뷰 기준은 지엽적인 코드 리뷰하지 않기, PR꼼꼼하게 확인하고 코드에 대한 그 사람의 배경지식 쌓기, 내가 궁금하거나 그 사람이 설명해 줄 수 있는 관점을 리뷰해 티키타카하기였습니다:
- 지엽적인 코드 리뷰하지 않기. 만약 팀 단위로 개발을 하고 컨밴션이 정해진 상황이라면 컨밴션에 맞지 않는 코드는 리뷰의 대상이었겠지만, 여기는 학습의 장이고 저마다의 코드 스타일이 다르기 때문에 최대한 코드의 문법이나 방식을 살펴보지는 않았습니다. 대신 코드에 통일성이 부족하거나, 특정 문법이나 방식을 사용한 이유를 묻는 쪽으로 리뷰를 진행했습니다. (배열 고차 함수를 선택한 이유 사용하는 경우, 비동기 처리를 위해
async/await
나Promise체이닝
을 함께 사용하는 경우,Promise.all
을 통해 병렬적으로 비동기를 처리한 이유,MVC, MVVM 패턴
과 같이 특정 디자인 패턴이나 아키택처를 고른 이유) - PR꼼꼼하게 확인하고 코드에 대한 그 사람의 배경지식 쌓기. 함께 공부하기 위해서 모였고 모두 같은 과제를 진행했지만, 서로 과제에 집중하는 포인트도 다르고 구현 방식도 제각각이기 때문에 그 사람의 코드를 이해하기 위해서는 PR을 꼼꼼하게 읽어야 한다고 생각했습니다. 저의 입장에서 이해가 되지 않는 코드도 환경적 요인(예를 들어 학습을 위해서 구현을 어느정도 포기하거나 다른 부분에 집중하는 경우)때문에 어쩔 수 없이 작성된 것일 수 있기 때문입니다. (이유 없는 레거시는 없다...)
- 내가 궁금하거나 그 사람이 설명해 줄 수 있는 관점을 리뷰해 티키타카하기. 제가 생각하기에 학습 과정에서 코드리뷰가 개발자가 함께 성장하기 좋은 이유는 서로의 다른 생각을 리뷰를 통해서 들어보고 더 나은 방향으로 성장할 수 있다는 것 같습니다. 제가 해결했던 방식과 다른 사람들이 해결했던 방식을 비교해 보면서 현재 상황에서 더 나은 방식이나 다른 상황에서 채택할 수 있는 여러가지 방법들을 탐구하면서 학습과정에서 개인이 놓치기 쉬운 부분들을 피드백 받을 수 있다고 생각했습니다.
이렇게 작은 기준들을 세운 뒤 다른 분들의 코드를 읽으면서 피드백을 간단하게 남겨보고자 했습니다!
리뷰 소매 넣기
저는 이러한 활동을 리뷰 소매 넣기
라고 명명해 봤습니다. 어쩌면 리뷰가 다른 분들에게 큰 도움이 안 될 수 있어도 리뷰를 하는 활동 자체에 의미를 가져가고자 했고, 계속 이런저런 이유들을 가지고 리뷰어 활동을 미루다 보면 결국 아무 활동도 못하게 될 것이라는 생각에 좋든 싫든 일단 받기로 한 사람에게 소매 넣기하고 아몰랑
하기로 결정했습니다.
이렇게 다 모아두고 보니... 나 말 많네...
리뷰 소매 넣기
를 하면서 가장 놀랐던 것은 사람마다 문제를 해결하는 방식이 정말 다양하다는 것이었습니다. 각자 고유한 사고 과정을 통해 문제를 풀어가는 모습이 흥미로웠고, 사람의 수만큼이나 다양한 해결책이 나온다는 사실이 정말 놀라웠습니다. (사실 간단한 요구사항이라 최선의 코드가 존재하고 대부분 비슷한 방향으로 해결할 것이라고 생각했지만, 예상과 달리 각기 다른 방식들이 나왔다는 점이 정말 놀라웠습니다.)
리뷰를 드리기 위해서 4주 동안 활동했던 PR들을 읽고, 코드를 읽으면서 다른 사람의 코드를 읽는 속도도 더 빨라지고 코드를 이해하는 속도도 향샹되었고, 저마다의 학습과정이나 해결 방법을 읽어보면서 제가 구현을 위해서 놓친 학습이나 새로운 해결 방법들을 더 많이 알게 되었습니다.
특히 오랫동안 JavaScript를 통해 공부했던 저에게는 다른 언어를 베이스로 한 분들의 생각을 들여다볼 수 있는 기회가 정말 좋았습니다. 덕분에 언어의 틀을 깨고 여러 가지 기법을 배울 수 있는 좋은 활동이었던 것 같아요.
개발 경험이 저보다 적으신 분들이나 더 많으신 분들 모두에게 배울 점이 있다는 사실을 다시 한번 깨닫게 되었습니다. 리뷰 활동은 상하관계가 아닌, 서로 배우고 성장하는 과정이라는 점에서 누구나 시도할 수 있고, 누구나 받을 수 있다는 것이 정말 의미가 크다고 생각해요.
무엇보다도, 이런 활동이 저에게 큰 도움이 되었던 이유는 리뷰이들의 답장이었습니다. 그들이 제 리뷰에 대해 피드백을 주고, 서로 의견을 주고받으면서 저는 더 많은 것을 배웠습니다.
너무 도움이 되었던 답장들 ㅠㅠ
제가 리뷰하면서 궁금했던 포인트들을 질문으로 남겼던 것들을 답변해 주시거나, 저의 코드를 보고 함께 토론을 하는 과정을 통해서 단순한 리뷰에서 끝나지 않고 더 고차원적인 질의를 하면서 의견을 모으는 것은 제가 했던 학습에 정말 큰 도움이 되었습니다.
다양한 사람들의 다양한 사고를 이렇게 가까이서 접할 수 있는 기회가 또 그것에 대해서 신나게 토의할 수 있는 기회가 얼마나 될까요? 저는 리뷰 소매 넣기
활동을 통해서 부스트캠프에서 얻어 갈 수 있는 것 그 이상의 가치를 얻어 가고 있다는 생각이 들었습니다.
다른 분들의 답장을 통해서 정말 함께 자라기
를 실천하는 기분을 받았고, 앞으로도 서로 긍정적인 자극을 받으며 성장할 수 있는 환경에서 계속 공부하고 싶다는 생각을 가졌습니다.
아직도 리뷰를 망설이시나요?
이 글을 접하시는 모든 분들께 꼭 드리고 싶은 말은, 코드 리뷰를 너무 어렵게 생각하지 말고 한 번 시도해 보셨으면 좋겠다는 것입니다. 저는 정말 코드 리뷰를 통해 많이 성장을 했다는 느낌을 받았기 때문입니다.
제가 리뷰활동을 하면서 얻었다고 생각한 부분을 종합적으로 정리해 보겠습니다:
- 다른 사람의 코드를 읽고 이해하는 속도가 빨라졌다. 결국 코드 리뷰를 위해서는 필연적으로 타인의 코드를 읽어야 합니다. 코드 리뷰 활동을 하면서 정말 많고 다양한 코드를 읽었습니다. 점점 코드를 읽는 양이 많아지면서 코드를 작성한 의도를 더 쉽게 이해할 수 있었고, 코드를 읽는 속도가 정말 빨라졌습니다. 처음에는 리뷰를 위해서 한 사람당 1시간 이상 투자하던 시간이 1시간 이내로 바뀌게 되었습니다.
- 다른 사람의 트러블 슈팅을 통해서 간접적으로 학습할 수 있다. 결국 시간은 한정적이고 혼자서 집중할 수 있는 시간도 매우 부족합니다. 특히 많은 것을 넓게 배우는 환경에서는 어떤 것을 선택하면 다른 것을 포기해야 할 때가 많습니다. 이때 리뷰를 통해서 다른 사람들의 PR이나 학습을 꾸준히 참고하다 보면, 간접적으로라도 제가 학습하지 못했던 포인트들을 알 수 있게 되고 제가 학습했던 포인트를 함께 비교하면서 더 나은 피드백을 받을 수 있었습니다.
- 리뷰 방식에 대한 이해와, 커뮤니케이션, 리뷰를 잘하는 방식을 배워 간다. 제가 생각하기에 개발자는 개발을 해나가면서, 동료들과 리뷰를 진행하는 과정에서 점점 더 나은 리뷰 방법을 배우게 되고, 동시에 효과적인 커뮤니케이션 스킬도 향상됩니다. 또한, 오픈소스처럼 불특정 다수가 참여하는 프로젝트에서도 코드 리뷰는 해당 오픈소스 프로젝트에 중요한 성장 과정이라고 생각합니다. 따라서 리뷰 경험은 오픈소스 기여에도 큰 밑거름이 될 수 있습니다.
제가 서술한 장점 이외에도 코드 리뷰는 더 많은 가치를 가진 활동이라고 생각합니다. 어떠신가요? 아직도 코드 리뷰를 망설이시진 않나요? 저는 더욱더 많은 분들이 코드 리뷰의 가치를 이해하고 함께 자라는 활동을 했으면 좋겠다는 생각을 가지게 되었습니다. (좋은 걸 저만 누리기엔 너무 아쉽잖아요! 😁 )
부록
저는 항상 오픈 소스 기여에 목말라 있었습니다. 무엇이든 함께 공유하고 발전시키는 오픈소스 문화가 매력적으로 보였고, 제가 개발자의 꿈을 가지면서 꼭 해보고 싶었던 활동이기도 했으니까요!
코드 리뷰 활동을 통해 자신감을 얻으면서, 오픈소스에도 기여해 보겠다는 용기가 생겼습니다. 그러던 중 우연히 Nest 문서에서 오타를 발견하게 되어, 이를 고치기 위해 PR을 보내 Contribute를 했습니다!
비록 간단한 오타 수정이지만 LGTM을 받으니 벅차오르는 갬동
이 경험이 저에게는 오픈소스 기여의 시작이자 너무 행복한 기억으로 남아 있습니다. (내가 기여를 하다니... 내가 LGTM을 받다니... 코드도 기여하고 싶다.... 🚀)
그 이후로도 꾸준히 오픈소스 프로젝트들을 살펴보며, 제가 기여할 수 있는 부분들을 계속해서 찾아보고 있습니다.
평소에 자주 사용하는 Nextra라는 툴에서 어떤 사용자가 겪은 문제가 제가 예전에 해결했던 이슈와 비슷하다는 것을 알게 되었습니다. 그 경험을 바탕으로 제가 해결했던 방법을 공유하는 과정에서, 메인테이너가 PR을 제안하기도 했습니다. (시간과 능력이 된다면 꼭 기여하고 싶네요! 제가 자주 사용하는 툴이기도 하니까요. 😁)
이렇게 멋진 코드 리뷰어를 꿈꾸는 리뷰 새싹부터 오픈소스에 약간 기여 (ㅎㅎ... 기여라기에는 부끄럽고 작은 기여지만) 하는 활동을 하면서 제가 항상 선망해오던 긍정적인 개발 활동을 하게 되어 매우 뿌듯했습니다.
이러한 뿌듯함을 안고, 앞으로도 더 많은 분들과 함께 성장할 수 있는 활동들을 계속해 나가고 싶다는 생각을 하게 되었습니다.
커뮤니티 조아!