코드 리뷰에 대한 문화


Other/Experience  2019. 5. 2. 00:24

안녕하세요. 명월입니다.


 며칠 전에 한국에서 일감을 받아 아르바이트했었습니다. 큰 프로젝트도 아니고 단순 작업이 많은 프로젝트입니다. 프로젝트를 작업하면서 프로그램 사양에 대한 정보가 너무 부족한 느낌이 있어서 다른 사람들이 작성해 놓은 코드를 직접 보게 되었습니다. 사실 여러 글로 된 사양서라든가 설명보다는 코드 레뷰가 개발자에게는 서로 이해하기 편한 부분이 많습니다. 예를 들면 문제가 닥쳤을 때 그 문제에 대한 원인과 해설도 매우 중요하지만, 많은 개발자가 그런 해설은 생략하고 코드 한 두 줄만 보고도 이해하고 해결하는 경우도 적지 않습니다.

 그렇기 때문에 나는 다른 사람이 작성해 놓은 코드를 보고 본질적인 질문을 담당자에게 했습니다. Server와 client에 대한 사양을 맞추려면 XX 씨가 작성한 코드를 보니 이렇게 하면 되는가요?

 그러더니 나한테 오는 답변은 엄청 놀라웠습니다. 다른 사람의 코드보고 리뷰하면 안된다는 점입니다. 이게 한국 문화에서는 프로젝트 안에서 위화감을 조성할 수 있기 때문에 자기가 제시한 사양만 보고 작성하라는 점입니다. 그 소리를 듣고 왜 코드 리뷰를 하는 자체가 팀 내에 위화감을 조성하는 것이지? 마치 내가 다른 사람 코드를 본 게 엄청나게 잘못된 것처럼 혼이 났습니다.

 

 그러나 내 생각은 그렇습니다. 코드 리뷰가 없으면 많은 사람과 작업할 때 어떻게 사양을 정확하게 맞추지? 혹시 중간에 담당자가 퇴사하게 되면 그 코드는 누가 처리해야 하는 거지? 그 코드가 정확하고 버그가 없다는 것을 어떻게 보증하지? 이런 생각들이 들었습니다. 나도 구루라고 불리는 개발자의 신 급은 아니다만은 그래도 어느정도 내 코드에 대한 철학이 있고 자신도 있습니다. 나는 여기까지 오는 데는 수많은 코드 레뷰들이 있었습니다. 많은 선배가 작성해 놓은 코드를 분석하고 그 안에서 나라면 어떻게 했을까 하는 상상하며 나만의 프로그램 철학을 구축했습니다. 또 많은 선배와 후배들이 내 코드를 리뷰하면서 내가 잘못 생각한 점이나 수정하는 데 많은 도움이 되었습니다. 개인적인 배움을 떠나서도 프로젝트를 함에 있어서 코드 리뷰를 하면 이렇게 생각할 수도 있구나를 느낀 적도 있고 프로젝트 사양을 좀 더 정밀하게 확인도 가능하여 좀 더 완성된 프로그램으로 흘러간 적도 많습니다.

 

 그러면 왜 한국은 코드 리뷰에 대해 부정적인 이미지가 있을까 생각해봤습니다. 

 

 표준에 대한 인식 차이가 있는 것 같습니다. 나는 자바의 경우는 구글 코딩 표준에 맞추고 C++, C#의 경우는 MS에서 제공하는 코딩 표준에 맞춥니다. 코딩 표준이라고 해봐야 class 명은 어떻게 선언하고 변수명은 어떻게 하고 띄어쓰기, 주석 작성법 등이 적혀있는 것입니다. 한번은 이런 경험도 있었습니다. 기존에 있는 프로젝트에 버그가 발생한다고 해서 코드 수정 의뢰를 받은 적이 있었습니다. 그런데 그 안에 코드만으로 도저히 확인할 수 없을 정도로 코드가 엉망진창이었습니다. 코드만 보면 프로그램이 돌아가는 게 기적일 정도의 수준이었는데, 저도 주어진 업무를 해야 하고 수정해야 하니 작성자에게 해당 버그에 대해 물어본 적이 있었습니다. 묻다 보니 자신도 해당 로직을 잊어버리고 왜 이렇게 작성했는지 다시 물어보니 도리어 버그를 고치는 일은 당신 일인데 왜 자꾸 귀찮게 하느냐고 타박을 받은 적도 있었습니다.

 아마 표준을 정확하게 인식하고 작성했더라면 누가 리뷰를 하더라도 표준안에서 이야기하므로 서로 간에 얼굴 붉힐 일이 없습니다. 그러나 상대방이 표준을 모르는 상태에서 내가 표준에 대해 이야기를 하니 오히려 나에게 자기를 가르치냐며 화를 내는 분위기가 되어버렸습니다.

 내 생각은 프로그래밍하는 데에 있어서 코딩 표준뿐 아니라 많은 표준이 존재합니다. 그것이 개발자간에 정해놓은 표준일 수도 있고 프로젝트안에서 정해놓은 표준일 수도 있습니다. 그런 표준은 개발자 간에 의사소통이 가능하게 하는 기본적인 약속입니다. 프로젝트를 하기 전에 이런 표준 정책을 설정하는 게 후에 코드리뷰 문화를 만드는 데 있어서 중요하지 않을까 싶습니다.

 

 또 하나의 차이는 지나치게 앞선 기술, 아무도 모르는 기술을 사용하는 것입니다. 가끔 프로젝트를 하기 전에 시스템 사양과 표준사양을 맞추는 게 보통이지만 가끔 튀는(?) 개발자들이 아무도 모르는 자기만 잘 아는 프레임워크를 도입하거나 라이브러리를 사용합니다. 그것을 사용하는 것에 문제가 있는 것은 아니지만 많은 사람이 모르는 것을 앞서 도입하는 것은 문제가 있습니다. 첫째는 프로젝트 수행함에 프레임워크 학습 시간이 필요해지기 때문에 생산속도가 느려질 수 있습니다. 둘째는 많은 사람이 모르는 상황이기 때문에 코드 리뷰가 불가능해집니다. 서로 프래임워크를 모르는 상황에서 리뷰를 해 봤자 서로 간의 의견만 달리 되고 충돌이 발생하는 것입니다.

 이러다 보니 코드 리뷰하면서 충돌이 자주 발생하다 보니 리뷰에 대한 부정적인 생각이 자리 잡게 되고 결국에는 리뷰를 생략하는 문화가 발생하는 것 같습니다. 

 

 내 생각에 코드 리뷰는 중요합니다. 이유는 분명 프로젝트를 구성하는 PM과 작성하는 개발자 사이에는 의사소통의 차이가 존재합니다. 프로젝트는 혼자 하는 것이 아니기에 여러 사람 간에 인식 차이도 분명히 존재합니다. 그 차이를 줄이고 발전적으로 진행하기 위해서는 코드 리뷰는 당연하다고 생각합니다. 저도 어느덧 한국에서의 프로젝트를 했던 시간보다 외국에서 프로젝트를 했던 시간의 비중이 점점 커집니다. 제가 신입 때 한국에서 프로젝트를 할 때 선배들로부터 코드 리뷰를 많이 받았습니다. 그리고 경력이 있는 지금도 여러 선후배에게 리뷰를 계속 받고 있습니다. 그러다 보니 나는 이게 당연하다고 생각하고 프로젝트에서 필수적인 요소라고 생각했었는데 최근 한국 프로젝트를 하면서 이런 문화 차이가 있는 것에 대해 당황스러웠습니다.

 

 최근 한국 SW는 위기라고 생각합니다. 여러 가지 이유가 있겠지만 한국 SW의 품질도 한몫합니다. 한국 SW은 대다수가 꽤 버그가 많습니다. 그러기에 우리도 코드 리뷰 문화와 코드 토론 문화가 정착되어야 한다고 생각됩니다.