회원가입을 하면 원하는 문장을
저장할 수 있어요!
다음
AWS 이용 중이라면 최대 700만 원 지원받으세요
국내 IT 기업은 한국을 넘어 세계를 무대로 할 정도로 뛰어난 기술과 아이디어를 자랑합니다. 이들은 기업 블로그를 통해 이러한 정보를 공개하고 있습니다. 요즘IT는 각 기업의 특색 있고 유익한 콘텐츠를 소개하는 시리즈를 준비했습니다. 이들은 어떻게 사고하고, 어떤 방식으로 일하고 있을까요?
회원가입을 하면 원하는 문장을
저장할 수 있어요!
다음
회원가입을 하면
성장에 도움이 되는 콘텐츠를
스크랩할 수 있어요!
확인
국내 IT 기업은 한국을 넘어 세계를 무대로 할 정도로 뛰어난 기술과 아이디어를 자랑합니다. 이들은 기업 블로그를 통해 이러한 정보를 공개하고 있습니다. 요즘IT는 각 기업의 특색 있고 유익한 콘텐츠를 소개하는 시리즈를 준비했습니다. 이들은 어떻게 사고하고, 어떤 방식으로 일하고 있을까요?
이번 글에서는 게임 회사 쿡앱스가 조직에 코드 리뷰를 처음 도입하며 실행한 이야기를 소개합니다.
처음 쿡앱스에서 코드 리뷰를 시작해야겠다고 생각했던 계기는 기술지원팀에서 공용 SDK를 제작할 때였어요. 공용으로 사용하는 만큼 더욱 범용적이고, 안정적이어야 하죠. 그래서 코드 품질을 올리고자 하는 팀 내 요구에 따라 배포가 되는 코드는 앞으로 100% 리뷰를 진행하기로 규칙을 정했습니다.
“Any stupid can write the program that computer understands but only good programmers write code that humans understand” — Martin Fowler
누구나 이해할 수 있는 코드를 만드는 일이란 쉬운 일은 아니라고 생각해요. 그리고 쿡앱스 구성원 누구나 코드 리뷰의 중요성에 대해서는 공감하지만 막상 이를 실천하기는 어렵다고 생각합니다. 당장 구현해야 할 기능이 산더미인데, 많은 시간과 정신력을 소모하는 코드 리뷰에 소중한 업무 시간을 투자하는 것은 쉬운 선택은 아닐 테죠. 특히 게임회사에서의 코드 리뷰는 상당히 도전적인 일이라고 생각해요. 게임 업데이트 기획에 맞춘 컨텐츠를 개발하는데에 있어 대부분 일정이 문제가 되기 때문이에요.
좋은 코드가 무엇인지 정의하는 건 어렵지만, 개발자라면 누구나 좋은 코드 품질을 유지하기 위해 노력해야 한다고 생각해요. 기능 하나를 추가하기 위해서 코드 전체를 볼 수 있어야 하는데 하나의 문제를 해결했더니 수십 개의 버그가 생기는 현상은 그 누구도 기피하고 싶을 거예요. 특히 유지 보수를 해야 하는 프로그램이라면 반드시 코드 품질에 대해 신경을 써야 하죠.
소프트웨어 엔지니어링에서는 그동안 코드 품질을 향상시키기 위한 많은 연구가 있었습니다. 그중에서 코드 리뷰는 수많은 사례를 통해 검증된, 코드 품질을 올리기 위한 아주 좋은 도구라고 생각합니다. 코드 리뷰를 통해 컨벤션을 통일하고, 구조나 설계가 옳은지 검증하며, 미래에 발생할 문제를 미리 예방할 수 있습니다.
팀과 스튜디오에 코드 리뷰에 대한 중요성을 말씀드리고, 우리 팀부터 실험적으로 코드 리뷰를 시작하게 되었습니다. 코드 리뷰에 대한 방식을 리서치하고, 쿡앱스 게임 제작 방식에 어울리는 코드 리뷰 방식을 채택하고 설계했습니다. 그리고 전체 구성원들이 쉽게 확인할 수 있도록 코드 리뷰의 목적부터 리뷰의 범위, 세부적인 방식까지 Confluence에 문서화 작업을 시작했어요.
시중에는 여러 코드 리뷰 툴이 있지만, 팀에서는 GitHub에서 제공하는 PR(Pull Requests) 기능을 적극적으로 이용하기로 했어요. 이는 우리가 평소 GitHub을 이용하고 있고, GitHub에서 제공하는 리뷰 프로세스가 잘 마련되어 있으며 IDE와의 통합도 유연하기 때문입니다.
하지만 처음부터 순탄하게 코드 리뷰가 이루어진 것은 아닙니다. 특히 기존 스튜디오에서 가지고 있던 개발 습관과 문화를 바꾼다는 일은 생각보다 쉽지는 않았어요. 리뷰를 해야 한다는 점을 잊어버린다던가, 툴 사용의 미숙함으로 인해 코드 리뷰를 해놓고 막상 제출하지 않는 분, 초기 세팅 시 PR의 범위가 너무 커져 리뷰할 의욕을 잃는 분도 있었어요. 그리고 다른 사람이 작성한 코드의 문맥을 정확하게 파악하기에도 어려워 쉽게만 생각했던 코드 리뷰 도입이 이렇게 힘들 줄은 몰랐어요. 하지만 우리는 코드 리뷰를 강제하거나, 페널티를 주기보다는 코드 리뷰의 더욱 쉬운 접근성과 방법, 그리고 결과적으로는 쿡앱스 모든 구성원이 리뷰라는 행위가 유익하다고 느낄 수 있도록 다시 설계했습니다.
먼저 코드 리뷰에서 다뤄야 하는 항목은 매우 많아요. 예를 들어,
기능적으로 올바르게 동작하는가?
코드가 잘 디자인되었는가?
문서화가 잘 되었는가?
테스트가 잘 설계되었는가?
기존 코드의 스타일 가이드를 잘 따르고 있는가?
와 같은 5가지의 항목이 대표적입니다. 우선 코드가 기능적으로 올바르게 동작하는지, 구조가 잘 디자인되었는지 확인해야 합니다. 그리고 기존 코드의 스타일 가이드를 따르고 있는지, 테스트가 잘 설계되어서 통과를 하는 지도 확인해야 합니다. 하지만 이러한 많은 내용들을 매 코드가 작성될 때마다 확인하기에는 많은 시간과 노력이 소모되죠.
자동화의 첫 번째 대상은 코딩 스타일입니다.
코드 스타일 에러는 가장 흔하게 나타나지만 리뷰에서 이걸 하나씩 지적하는 건 너무 비효율적인 일이라고 생각합니다. 따라서 Linter를 적용해 자동으로 수정되도록 자동화 작업을 진행했어요. 클라이언트 개발 시 Rider라는 IDE를 사용하는데, 여기에 설정 파일을 넣어주면 저장 시 자동으로 미리 정해진 스타일에 맞춰 코드가 수정되도록 했습니다. 가끔 이 작업만으로 잡지 못하는 스타일 오류도 있긴 하지만 그래도 리뷰가 훨씬 더 편해졌죠.
두 번째는 테스트입니다.
구현을 잘 했는지 검증하기 위해 자동화된 테스트 코드를 작성하고, 리뷰어가 리뷰 시 테스트 결과를 바로 확인할 수 있도록 만들었어요. 예를 들어 Unity에서는 편집 모드와 플레이 모드에서 코드를 테스트할 수 있는 Test Runner라는 툴을 제공하는데, 리뷰 시 테스트 결과를 바로 확인할 수 있다면 매우 편리하겠다는 아이디어에서 출발했어요. 실제 구현은 GitHub Actions를 이용해 PR이 넘어왔을 때 Unity Test Runner가 자동으로 동작해서 PR 페이지 위에서 결과를 확인할 수 있도록 합니다.
때로는 유니티 버전에 따라 API 인터페이스나 동작이 다른 경우가 있어요. 따라서 지원하고자 하는 유니티 버전에 대해 모두 테스트를 수행하도록 했습니다. 이렇게 테스트를 자동으로 수행하도록 세팅하니 코드 작성자는 코드 작성자는 테스트 결과를 바로 확인할 수 있어서 편안함을 얻을 수 있고, 리뷰어는 따로 테스트를 돌려볼 필요가 없기에 리뷰 시간이 많이 단축되었죠. 실제로 이러한 테스트 결과를 통해 잡아낸 에러도 많았기 때문에 결과는 매우 만족스러웠고요!
세 번째, 자동화 툴을 통해 어떤 변화가 일어났는지, 왜 만들어졌는지 기록합니다.
게임의 버전 관리의 관점에서 코드 리뷰를 바라봤을 때, PR은 해당 프로젝트의 변경사항을 리스트 업할 수 있는 아주 좋은 기준입니다. 작성한 PR의 설명문은 버전 관리에 있어서 영구적인 부분이 되며, 다른 사람들에게 읽히고, 추후에 다른 사람이 이러한 코드가 쓰인 근거를 제공하죠.
또한 코드를 리뷰하는 입장에서도 많은 도움이 됩니다. 변경사항에 대한 아무런 컨텍스트가 주어지지 않는다면 왜 코드를 이렇게 수정하는지 판단할 근거가 부족하고, 이는 심도 있는 코드 리뷰가 불가능하죠. 따라서 코드 작성자는 PR을 만들 때 구현한 내용에 대한 간략한 요약과 자세한 설명 및 리뷰어에게 도움이 되는 정보를 기술하도록 하고 있습니다. 이때 GitHub에 있는 PR 템플릿 기능을 이용해서 PR 생성 시 자동으로 템플릿이 로드되도록 하고 있어요.
이러한 PR의 설명문에는 이 PR에서 일어난 변경점에 대한 간단한 요약과 본문이 포함되어야 해요. 설명문에는 “기능 추가” 나 “버그 수정” 과같이 크게 도움이 되지 않는 내용을 적기보다는 배경 정보나 구현 방법 등 읽는 사람에게 실질적으로 도움이 되는 정보가 들어가는 것이 좋습니다.
이러한 자동화는 실제로 평소 리뷰 시간의 절반 가까이 줄일 수 있었습니다. 물론 리뷰어가 세부적으로 봐야 할 리뷰 코드들은 있지만, 먼저 기능적으로 코드가 동작하는지 등 기본적인 검증을 프로그램이 대신해 주니 리뷰어는 조금 더 세부적인 부분을 중심적으로 확인할 수 있어요. 특히 코드 리뷰가 좋은 점은 다른 사람의 코드를 통해 저도 성장할 수 있다는 점입니다. 온/오프라인으로 서로의 코드에 대해 리뷰하고 더 나은 구현 법에 대해 생각하는 시간이 더 좋은 코드를 만드는 데 많은 도움이 되고 있어요. 특히 내 코드가 동료들에게 승인받을 때 인정받았다는 뿌듯함도 있습니다.
게임을 개발하다 보면 빠르게 개발해야 할 때도 있고, 더 잘 개발하고 싶을 때도 있습니다. 하지만 유저의 콘텐츠 소모 속도에 맞춰 개발을 해야 하기 때문에 빠른 개발에만 더 집중할 때가 많아요. 이런 개발의 문제는 결국 기술 부채가 쌓이게 된다는 점이에요. 결국에는 나중에 갚아야 할 빚이 되어버리죠. 지금 쿡앱스가 시도하고 있는 코드 리뷰를 통해 빠르게, 그리고 잘 개발할 수 있는 문화를 구축하고, 이러한 기술 부채를 최대한 느리게, 그리고 관리 가능한 수준으로 만들 수 있도록 고민하고 있습니다. 그리고 지속적으로 문화를 전파해 쿡앱스의 기술력을 한층 더 높여보고자 합니다.
요즘IT의 모든 콘텐츠는 저작권법의 보호를 받는 바, 무단 전재와 복사, 배포 등을 금합니다.