Channel Talk
기술의 최전선에서 세상의 변화를 이끄는 스타트업에게는 다양한 기술들을 빠르게 확인하고, 또 빠르게 적용하여 더 좋은 기능을 고객에게 제공하는 것이 중요한 가치입니다. 채널팀 또한 그렇습니다. 많은 기능을 만들고, 이 기능들을 잘 유지하기 위해서는 지속적으로 좋은 개발론, 기술들을 배우고 찾아봐야 합니다. 그렇기에 개발자와 끝없는 공부는 필연적인 관계라고 봐도 과언이 아니라고 할 수 있습니다.
하지만, 지속되는 공부를 혼자서 하는 것은 정말 어렵습니다. 그렇기에 혼자가 아닌, 여러 사람이 모여 목표를 달성하기 위하여 스터디를 꾸리고 진행합니다. 저 또한 다양한 사람들과 다양한 스터디를 진행하곤 했습니다. 그러던 중, 함께 같은 방향을 바라보는 동료들과 함께하는 사내 스터디는 또 다른 무언가가 있다고 느껴졌는데요. 이번 글에서 채널팀과 함께한 경험을 기반으로 무엇이 달랐는지, 그리고 어떤 것들을 얻었길래 이렇게 추천하는지 이야기를 해보겠습니다.
회사에서 개발을 진행하다 보면 항상 마음에 들 순 없습니다. 이런 마음에 들지 않는 부분을 발견했을 때, 우리는 크게 두 가지의 행동을 합니다. 넘어가거나, 개선하거나. 후자는 굉장히 험한 길입니다. 모두가 함께 기여하고 있는 코드에 의문을 제기하고, 합당한 이유를 함께 들고, 문화의 정착까지. 홀로 가기에는 너무 길고 코스트가 많이 드는 일입니다. 하지만, 멀리 가려면 함께 가라고 했던가요. 이런 문제를 스터디를 통하여 의문과 합당한 이유를 찾고, 받아들여진다면 뜻이 맞는 사람들과 문화의 정착을 돕는 길은 보다 더 즐거울 수 있습니다.
이 이야기는 저희의 테스트 코드를 개선하기 위한 여정으로 설명드릴 수 있을 것 같은데요.
과거, 저희의 테스트 코드는 많은 고민을 하게 만들었습니다. 테스트를 포함한 CI가 돌아가는데, 30분이 넘게 걸려 배포까지의 프로세스가 과하게 길었기 때문이죠. 이를 해결하기 위하여 컨테이너를 나누어서 테스트를 분할하는 등의 액션플랜을 세워 움직였지만, 근본적인 해결책은 되지 못하였습니다. 아무리 나눠도, 테스트는 계속 늘어나니까요.
저희는 이로 인하여 테스트에 개선이 필요하다는 것을 알게 되었습니다. 하지만, 이를 어떻게 개선할 수 있을지는 감을 잡지 못했었죠. 그래서 저희는 방법을 찾아보기로 했습니다. 블라디미르 코리코프의 단위 테스트라는 책을 이용한 스터디를 통해서 말이죠. 이 스터디를 통하여 직접 테스트를 개선해보고, 왜 단위 테스트여야만 하는지, 저희의 코드에 어떠한 이점을 가져올 수 있을지 논의하고 정리했습니다. 그리고 이를 기반으로 사내에 단위 테스트 문화를 설파하고, 문화의 정착을 위한 그룹을 발족하여 기여할 수 있도록 하였습니다.
결과, 단위테스트에 어울리는 테스트 코드들을 개선하여 본래 시간의 1 / 10정도로 단축시킬 수 있었고, 단위테스트 가이드 및 관련 세션을 준비하고 공유하여 누구나 쉽게 단위 테스트에 도전해보고, 적용할 수 있도록 하였습니다. 이 개선을 위한 여정에 대하여는 다음 글에서 보다 더 자세하게 다루어보겠습니다.
위 개선기에서 혼자 뭔가를 해보려고 했다면, 코드에 몇 줄 기여하는 것으로 끝났을 것입니다. 하지만, 뜻이 맞는 다수가 모여서 스터디를 통해 방향성을 잡고 나아가서 더욱 큰 결과를 만들어 낼 수 있었고, 더 나아가 사내 문화 개선 그룹으로 성장할 수 있었습니다.
위의 글과 같이, 스터디를 통하여 변화를 이끌어 내는 것이 아닌, 변화를 위하여 스터디를 진행하기도 합니다. 대표적인 예시로는 팀에서 쓰던 기술이 아닌, 새로운 기술을 도입해야 하는 경우가 있겠습니다. 이런 경우, 스터디를 통하여 팀에 안정적으로 정착시키고, 나아갈 수 있는데요. 저희 팀의 두 가지 사례로 설명해보겠습니다.
첫 번째는 gRPC 도입 이전에 진행했던 스터디의 사례입니다. 사내에서 Golang에 대한 소모임을 진행하면서 Golang과 함께 gRPC에 대한 스터디를 진행하게 되었습니다. 채널톡은 채팅 서비스인 만큼 트래픽이 많이 발생하여, gRPC를 통하여 개선할 수 있지 않겠느냔 생각이었습니다. ‘gRPC 시작부터 운영까지’라는 책이었는데, 복잡한 내용을 다루는 책은 아니어도 Golang와 gRPC에 대하여 알아보기에는 적당한 난이도의 책이었습니다. 이를 통해서 gRPC에 대한 간단한 기초 지식을 익힐 수 있었으며 실습을 통하여 어떻게 동작하는지 알아볼 수 있었습니다.
스터디를 통해 만들어진 배경지식은 이후 채널톡의 부가 기능인 전화 연동 작업을 하면서 큰 도움이 되었는데요. 특이한 형식의 요청이 많이 발생하고, 긴 통신을 유지해야 하는 전화 연동에서는 gRPC의 기능들이 큰 도움이 될 수 있으리라 판단하였습니다. 이렇게 충분한 장점을 가진 만큼 리더십 설득도 원활하게 진행되었고, 23년 1월에 퍼블릭 릴리즈될 전화 연동 서버에 큰 부분을 차지하게 되었습니다.
이런 이점을 가지는 gRPC를 몰랐다면, 더 많이 고민할 수 있었던 부분을 앞선 스터디를 통하여 선제 조사를 마칠 수 있었습니다. 또한, 적용하여 전화 연동이라는 큰 기능에 도움을 줄 수 있었습니다.
gRPC의 예시와 조금 다르게, 몇몇 인원이 스터디 내용에 대하여 충분히 숙지하고 시작하여 강의에 가까운 형태가 되는 스터디 또한 존재합니다. 저희 팀에서는 쿠버네티스 스터디가 그랬었는데요. 내부 인프라 구조를 쿠버네티스로 변경하기 위하여 데브옵스 팀에서 먼저 리서치 및 내부 서버에 적용하는 작업을 진행하고, 앞으로의 원활한 사용을 위하여 내부의 서버 개발자들을 대상으로 스터디를 진행하였었습니다.
스터디를 통하여 저희는 쿠버네티스에 대한 생소함을 해소할 수 있었고, 어떤 요소가 있고 어떻게 동작하는지 간략하게 이해할 수 있게 되었습니다. 그리고 이를 통하여 쿠버네티스 위에 배포가 정상적으로 되지 않았을 때, 어떤 부분이 문제인지 알 수 있게 되었습니다.
결과적으로 위의 사진과 같이 직접 저희가 디버깅을 진행할 수 있게 되었고, 웬만한 배포 문제들은 직접 디버깅하여 데브옵스 팀원들의 시간을 아껴줄 수 있게 되었습니다.
스터디를 진행하면서 가장 큰 장점이라고 느꼈던 부분입니다. 종종 스터디를 진행하다 보면 서로의 이해도가 다르기도 하고, 생각하는 코드, 겪었던 경험이 달라서 이해의 방향성이 달랐던 경험, 있으셨으리라 생각합니다. 이런 경우 소통을 위하여 부가적인 설명이 필히 함께하게 되고 결론적으로 스터디에 소모되는 시간을 늘리게 됩니다. 그래서 이런 부분 때문이라도 시간을 여유롭게 할당하거나, 아예 빼고 진행하곤 합니다.
하지만, 사내 스터디에 참여하는 사람들 간에는 회사 도메인이라는 지식을 공유하고 있고, 같은 방향을 바라보는 만큼 소통을 원활하게 할 수 있고, 이로 인한 시간적 이점을 얻을 수 있습니다. 또한, 이를 통하여 역으로 문제를 찾아내고, 직접 기여하는 일도 생기곤 합니다.
위의 사진은 클린 코드라는 책을 함께 읽는 스터디 내에서 진행했던 기존 코드 리뷰입니다. 해당 리뷰를 진행했던 날은 함수와 주석에 대하여 이야기를 나누었는데요. 문제가 되는 코드 블럭을 가져와서 함수가 가지고 있는 너무 많은 책임에 대하여 토론해보고, 어떻게 개선할 수 있을지 그리고 책의 내용을 어떻게 잘 접목할 수 있을지 한 시간 반가량 토론했습니다.
이런 부분은 함께 명확하게 바라볼 수 있는 소스가 없다면 진행하기 어려운 형태의 스터디인데, 사내 스터디의 장점을 잘 살려서 이해도를 높이는 수단으로 잘 사용했습니다. 그리고 여기서 그치지 않고, 이런 토론을 통하여 잘 개선된 사항은 직접 PR을 생성하여 코드에 기여하는 성과까지 얻을 수 있었습니다.
하나 더, 공유하고 있는 ‘지식’은 코드뿐이 아닙니다.
위의 사진은 MSA스터디에서 진행했던 이벤트 스토밍을 진행하는 사진입니다. 이런 구조에 대하여 이야기하는 실습은 어떻게 진행할지 어려워하는 경우가 많고, 진행해도 게시판과 같은 간단한 프로젝트로 하는 경우가 많습니다.
하지만, 사내에 존재하는 작은 서비스들 중에는 길지 않은 시간 내에 구조를 고민하기에 적합한 크기를 가진 서비스가 많이 존재합니다. 이를 이용하여 실제 운영 준비를 하는 서비스를 이용하여 구조 설계 및 고민을 함께하며 설계 공부를 할 수 있었습니다. 또한, 타겟이 되는 서비스가 아직 운영을 하지 않고 있어서 팀 내의 이해도가 높지 않았는데, 이 기회를 통하여 참여한 팀원들이 이 서비스에 대한 이해도를 많이 늘릴 수 있었습니다. 서비스에 대한 이해도는 곧 효율적인 소통과 협업으로 이루어질 수 있었고, 이후 다른 팀의 지원을 받을 때 큰 도움이 되었습니다.
글을 읽고 스터디에 대한 호기심이 생겼으나 어떻게 시작해야 할지 막막할 수도 있을 것 같습니다. 그런데, 스터디는 정말 간단하게 만들어지기도 합니다. 위에서 설명해드린 클린 코드 스터디는 동료와 티타임을 나갔다가 ‘와! 클린코드 읽어요? 저도 읽어야 하는데!’ 하고 바로 그다음 주부터 함께 스터디를 진행하기도 했습니다. 조금 어렵게 생각하셨다면 오늘은 옆자리의 동료에게 이런 말 한마디 해보시는 것 어떠신가요?
“저랑 스터디 같이하실래요?”
Continuous Integration
https://blog.insightbook.co.kr/2013/12/19/%e3%80%8e%ed%81%b4%eb%a6%b0%ec%bd%94%eb%93%9c%e3%80%8f/
Pull Request
We Make a Future Classic Product
채널팀과 함께 성장하고 싶은 분을 기다립니다