요즘 우아한 개발을 읽고

 

1. 읽게된 이유

 

책을 읽게된 계기는 사실 우연이었습니다.

 

학교 도서관에 오랜만에 갔었는데 신간 도서란에 책이 있는 것을 발견했었고 한때 우테코의 애청자였던 저는 '우아한'이라는 말을 보자마자 책을 집어들었습니다. '우아한 형제들'의 개발자 컨텐츠에 신뢰가 있는 이유는 그 분들이 정보를 전달하는 방식입니다. 철저히 전달 받는 사람들을 고려한, 개발 쪽 공부를 하다보면 정말 고마운 컨텐츠이기 때문입니다. 개발자로서 스스로 해내는 힘을 중요시하지만 더 친절하고 효율적으로 알려주는 방법이 있다면 택하지 않을 이유가 없습니다. 그런 우아한 형제들이 개발 이야기를 정리해서 책으로 냈다니 바로 읽어보고 싶었습니다 :)

 

2. 책의 구성

 

책의 구성은 아주 효율적이었습니다. 목차는

1. 배민 다움 만들기

2. 프론트엔드 개발자로 성장하기

3. 백엔드 개발자로 성장하기.

4. 인공지능으로 한 단계 업그레이드 하기

5. 테스트와 코드 품질 관리하기.

6. 시행 착오 겪으며 성장하기.

 

즉 각자 맡은 분야가 특정 분야라면 빠르게 해당 내용만 훑을 수도 있습니다. 물론 각 파트에서 고민하시는 부분은 개발자라면 모두 도움될 내용이 많이 있으니 시간이 있다면 천천히 모두 읽어보시는 걸 추천드립니다.

저는 인상깊었던 몇몇 부분만 더 자세하게 정리하려고 합니다.

 

3. 코드 리뷰와 테스트 코드, 개발 문화.

 

https://www.youtube.com/watch?v=jdlBu2vFv58

Toss Slash 21. 정말 멋진 개발 이야기들이 많으니 한번 정주행 해보시는 걸 추천드립니다!

 

우테코와 함께 좋아하는 개발 영상인 토스의 slash에서 가져온 테스트 코드 관련 영상입니다. 테스트 커버리지 100%라는 무지막지한 개발 경험을 한 이유, 후기, 방법에 대해 자세히 정리한 영상입니다. 테스트 코드, 코드 리뷰에 대한 필요성은 정말 많이 듣습니다. 예를 들어 이번 학기에 수강한 소프트웨어 개발의 원리와 실습에서는 학교 수업임에도 불구하고 1. 모든 코드 Pair Programming 2. 모든 기능 Unit Test 3. 모든 PR은 Review 필수라는 원칙으로 수업이 진행되었습니다. 김영한님의 스프링 강의에서도 테스트 코드에 대한 중요성을 자주 강조합니다. 하지만 팀이 대규모가 아니라면, 그리고 프로덕션 레벨의 코드를 짜는 것이 아니라면 (예를 들면 위처럼 학교 과제라던가) 테스트 코드는 뒷전이 되는 경우가 많습니다. 특히 학교 수업의 경우 정확한 기능보단 멋진 기능에 점수를 잘 주는 경향이 있고 (특히 학생 투표라면) 그 뒤에 숨겨져 있는 견고한 코드는 평가받기 힘듭니다.

또한 테스트 코드는 생각보다 짜기 쉽지 않습니다. 정확히는 좋은 테스트 코드를 짜기란 쉽지 않습니다. 학교 과제를 하며 테스트 코드를 써본 적이 있는데 그때 푸념했던 말이, 정확하고 좋은 테스트 코드를 짰다는 것은 이미 그 과제를 완벽하게 분석했으며 모든(대부분) 엣지 케이스를 파악했으니 사실상 과제 해결에 도달한 것이다. 라는 말이었습니다. 또한 여러 dependency가 있는 코드들, 테스트를 고려하지 않은 코드들에 테스트 코드를 짜는 것은 리팩토링의 연쇄를 불러옵니다. 아 이 코드는 테스트하기 좋지 않은데? 하거나 심지어는 테스트가 불가능한데? 라고 느껴지기에 코드 자체를 바꾸기도 합니다.

 

재밌는 점은 이 푸념했던 말들, 테스트 코드를 짜기 어려운 점이란 좋은 코드를 짜기 위한 방법이라는 것입니다. 구현 사항을 분석하고, 테스트 짜기 좋도록 기능 분리가 잘 된 코드란 좋은 코드일 것입니다. 또한 위 영상에서 말해준 것처럼 테스트 코드가 잘 되어있다면 나중에 코드를 개선하거나 고치는 것에도 테스트라는 좋은 근거가 생깁니다. 그래서 개발자들에게 당장 힘들어보이는 테스트를 짤 수 있는 환경을 만들어주는 것이 중요합니다.

 

요즘 우아한 개발에서는 그런 테스트 코드를 잘 짤 수 있는 환경, 코드 리뷰가 잘 될 수 있는 환경을 만든 방법에 대해 자세하게 서술하고 있습니다. 1장의 "공통 시스템개발팀의 코드 리뷰 문화 개선 이야기"와 5장 전체를 할애해서 서술하고 있습니다. MR 템플릿, 기술 부채 해결 기간, 테스트 커버러지 기준 설정 및 강제 등 다양한 방법들이 책에 소개되어있으니 한번 읽어서 배워보시는 것을 추천드립니다!

 

4. 백엔드 개발자로 성장하기

 

책을 처음 빌리면서 제일 기대했던 부분입니다. Spring을 중심으로 백엔드를 공부하고 있고 Django로 여러 프로젝트를 경험해보면서 현업에서는 어떤 고민이 있을까 항상 궁금해왔는데 책에서 백엔드 파트를 따로 다뤄주고 있었기 때문입니다.

백엔드 개발자로서 가지면 좋을 태도와 구체적인 사례 (개발자 머피의 법칙), 구체적인 기능 구현 사례(메시지 발송 이중화 여정기, 배민상회와 검색 플랫폼 연동기 등) 등 재미난 이야기들이 많이 녹아들어있습니다. 개발자 머피의 법칙에서는 금융보안원에서 아카데미를 수료하면서 배웠던 여러 보안 이슈들이 현실에서 정말 일어나는구나..! 하면서 놀랐었고 여러 구현 사례는 배민의 기술적 결정이 어떻게 이루어지는지 배울 수 있었습니다. 저만 해도 보안 아카데미에선 이렇게 하면 당연히 안되겠지! 이러는 사람이 어딨어..! 했었는데  소프트웨어 개발 수업을 들을 땐 다소 허술한(?) 태도를 가지게 되는 것을 보고 스스로에게 놀랐던 기억이 있습니다. 다른 분들의 앱에 들어가서 여러 취약점을 발견하며 실제로 발생한다고 느끼기도 했습니다.

 

개발자에게 중요한 덕목은 역시 안일하지 않게 하기. 라는 생각이 듭니다. 예전에 읽었던 글 중에서 "개발은 글쓰기와 유사한 면이 있다. 글도 문장 하나 하나 고민하고 잘 쓰려고 노력하며 계속 첨삭하듯이 코드도 마찬가지이다."라고 하셨던 분이 있었는데 필요한 능력은 조금 다르다고 생각하지만 공감되는 부분입니다. 

 

5. 나가며

 

그 외에 이번 프로젝트에서 활용했던 S3 bucket을 aws의 다른 기능과 함께 확장하여 활용한다던지, 네트워크 인증 시스템에 대한 서술이라던지 개발적 태도뿐만 아니라 지식으로써도 배울 점이 정말 많았습니다. 펼친 자리에서 다 읽었던 재밌는 책이었던 만큼 다른 분들께도 추천드리고 싶습니다 :) 길지도 않고 가독성도 좋아서 오가는 길에 읽는다고 해도 금방 읽을 것이라 생각합니다. 우아한 형제들의 문화에 대해 한 스푼 접하는 좋은 책이었습니다!