[책 리뷰] 요즘 우아한 개발 - 우아한 형제 (우아한 테크)

정현우·2024년 1월 8일
16

Book and Post Review

목록 보기
4/7
post-thumbnail

요즘 우아한 개발

배달의민족을 만든 우아한형제들의 농축된 (개발)조직문화, 온보딩, 기획, 개발, 인프라 구축 이야기를 담은 책이다. 늦은 리뷰에 스스로를 자책하며 신년에 운을 띄워본다..

리뷰

배민에서 개발 히스토리, (개발) 문제 해결 방법에 대한 책이 나온다고 할때 부터 기대하고 초판 1쇄로 바로 구매한 책이다. 다 읽고 가장 먼저 든 생각은 과거의 나에게, 개발 첫 입문 할때 강력 추천하고 싶은 책 이다. 중니어 & 시니어 분들에게는 "과거의 추억 회상" 될 것 같고, 취준생과 주니어 분들에게는 배달의 민족의 자부심을 느낄 수 있을 것 같다. (책이 강력하게 "우리 개발팀으로 오세요!" 라고 말하는 듯한..) 그리고 엄청난 태크! 에 대한 얘기는 없으며 애초에 목적이 그게 아닌 책으로 느껴진다.

6개의 장 으로, 각 부서 & 팀마다 경험한 문제와 해결 방법에 대한 얘기가 수필 형태로 작성되어 있다. 각 장마다 담당 개발자 직접 작성한 글이 챕터를 이뤄져 있어서, 배민 개발팀들의 수필을 읽는 느낌이다. 많은 사람이 작성한 글이라 챕터마다 풀어내는 스타일이 다양해서 호불호가 있을 수 있을 것 같다.

메인이 서버개발자라 그런지 3장 백엔드 개발자로 성장하기 를 굉장히 재미있게 읽었다. 간단한 SQL 인젝션 부터 인증과 권한, DDos 방지, 직원 PC 역시 API & DB 권한 제어하는 것, SPoF 에 대한 얘기, MQ(message queue)도 저장소라는 점, 트래픽 분산을 위한 가충치 체크, 통계 데이터 핸들링에 대한 얘기 등 읽으면서 신기할 정도로 같은 경험을 공유하는게 재미있었다. "일어날 일은 일어난다" 라는 머피의 법칙 챕터가 가장 기억에 남는다. 물론 퀄리티의 차이는 있다 당연히,, 나의 경험이 훨씬 가난했다 ㅎ

  • (1) 충분히 본 받을 만한 개발 문화, (2) 확실한 기록과 회고, (3) 이를 서포트하는 데브렐

위 3가지가 이 책이 가장 시사하는 부분인 것 같다. 아쉬운점은 내용적인 부분 보다는 책 자체의 퀄리티였다. 인쇄 퀄리티가 좀 구렸고, 종이가 너무 얇았다.. 뒷장이 비쳐서 아쉬웠고, 생각보다 장마다, 챕터마다 전혀 다른 서사 구조라 느낌이 매우 다르다. 몰입도가 높은 챕터와 그렇지 않은 챕터의 차이가 꽤 크게 느껴졌다. (컨텍스트 스위칭 비용이 큰 느낌..?!)

그래도 기억에 남는 챕터가 있기 때문에 두고 두고 필요할 때 해당 챕터는 다시 열어 볼 것 같다 :)


목차별 리뷰

1장 배민다움 만들기

  • 데브렐의 역할과 중요성, 그리고 우아톤과 같은 이벤트를 얘기하면서 "배민에서의 데브렐" 에 대한 얘기로 시작한다. 그리고 실제 신규 입사자가 경험한 온보딩 프로세스에 대한 기록이 있다.

  • 시니어 개발자 분의 얘기와 팀문화에서 "Keep Problem Try" 에 대한 얘기와 100번의 질문에 100번의 답을 해주며, 왜 질문이 많을까? 에 대한 역접근이 기억에 남는다.

  • "카르페피엠" 이라고 부르는 배민 PM의 직무 정의를 고객에 대한 이해를 바탕으로 제품 전략과 방향을 제시하고, 이에 대한 구체적인 실행 방안을 수립하며, 필요한 모든 자원을 활용하여 이를 실행함으로써 더 나은 고객 가치를 창출 로 내린 부분이 인상 깊다.

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

  • "디자인 시스템" 에 대한 얘기와 컴포넌트의 상속 구조 설계 얘기가 좋았다. 그리고 "만드는 사람이 수고로운 UX 개발" 에 좀 많은 공감을 하며, 배민이 공급망 관리 서비스(SCM) 등과 같은 백오피스에도 어떤 노력을 하는지 볼 수 있었다.

  • 상태관리의 복잡성과 정보 동기화 그리고 그에 따른 성능 이슈 (렌더링할 DOM 증가)에 대한 경험도 결은 다르지만 보여줄게 많은 FE 개발, 특히 백오피스에서 많이 경험하게 되는 이슈에 대한 얘기가 좋았다.

  • 내가 FE에 대한 선호도가 낮아서 그런지, 3장을 보고 다시 2장을 보면 개인적으로 퀄리티 편차가 좀 크게 느껴진다.

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

개발자 머피의 법칙

  • "개발자 머피의 법칙" 챕터가 진짜 재미있다. 우선 글을 쓰신 분의 짬! 이 느껴지면서 재미있게 표현한게 글 읽는 재미가 좋다.

  • (1) 사용자 입력을 무조건 검증 해야하는 할인율 사건, (2) 모든 계산은 서버가 해야 하는 것, (3) SQL 인젝션 가능성 없애기 위한 얘기 - where 1=1, (4) 사내 개발자의 의도하지 않은 실수 에 이어서

  • (5) 캐시 성능 측정 - (hit에 대한 얘기와 분석, 대역폭에 대한 얘기, 로컬 캐시 vs 원격 캐시 서버), (6) 인증과 권한에 대한 얘기 - (로그인 실패 횟수 체크, 가상 재화를 체크하기!), (7) 사내 PC, 직원의 DDL 권한 분리에 대한 얘기, 특히 이 DDL 권한 분리 얘기는 결은 다르지만 이상하게 항상 모든 사내 개발팀은 경험하게 되는 것 같은 일이다. 배민의 경우 hibernate 의 옵션때문에 alter 가 되어 버렸다고..

  • (8) DDL에 대한 얘기에 이어서 DB뿐 아니라 MQ도 저장소라서 준하게 취급되어야 하는 얘기, 그에 따라 당연히 API call 역시.. (9) private network의 중요성에 대한 얘기, (10) 중요한 배치 작업은 실행 오류 뿐 아니라 제 3 시스템에서 실행 여부 자체에 대한 모니터링을 해야하는 점, (11) 로그 수집은 별도의 프로세스로 "비동기적"으로 해야하는 점, (12) PK를 INT 보다는 LONG (BIG INT) 으로, (13) roll back 가능한 배포SPoF - 서버는 무조건 죽을 수 있다! 에 대한 얘기가 있다.

  • 개인적으로 공감되는 부분이 너무 많아서 만화책 읽듯이 읽은 챕터다. 위 사항은 백엔드 엔지니어라면 꼭 미리 알아두면 정말 큰 도움이 될 것이라고 본다. 시니어 분들 입장에서는 마치 가난을 물려주기 싫은 부모의 심정이 아닐까 한다.

메인 데이터베이스 IDC 탈출 성공기

  • "루비" 라고 불리는 사내 "모놀로식(Monolithic)" 데이터베이스를 cloud 로 이관하는 작업에 대한 얘기다. 몇 달 몇 년에 걸쳐 분산 cloud db 로 바꾸는 대규모 프로젝트에 대한 얘기를 맛볼 수 있어서 좋았다.

  • 특히 사소하지만 "명명 규칙, 모두가 주인임에 동시에 그에 따라 주인이 아니라는 점, 이름만으로 알 수 있는 한계가 명백하다는 점" 이 매우 와닿은 부분이다.

그 외

  • "메시지 발송 이중화 여정기" 에서는 메시지큐를 운영하는 사람이라면 공감할만한 이야기가 많다. https://techblog.woowahan.com/7724/ 글에서 나온 얘기가 좀 더 디테일하게 적힌 챕터다. 정확하겐 메시지시스템 (이하 UMS 등의 messaging system) 자체에 대한 이중화 라기 보다는 Spring Cloud Config 무중단 배포, 런타임 중 세팅하기에 가깝다.

  • "네트워크 인증시스템 교체기" 에서는 H/W 레벨에서 어떻게 "노옵스" 를 목표로 설계했는지 맛볼 수 있어서 좋았다. (이런 네트워크 H/W 얘기는 현업이 아니고서야 경험하기 많이 힘들기 때문에 꽤 재미있게 읽었다.) 아쉬운점은 라우터 등의 내부 role 에 대한 논리적 부분 보다 물리적인 라우팅 테이블 세팅, 테이블 세팅의 저장을 어떻게 하는지 등에 대한 얘기가 없어서 아쉬웠다.

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

  • "머신러닝으로 배민 앱 리뷰 품질 높이기" 챕터에서는 많이들 익숙하실 리뷰의 "FDS(Fraud Detection System)" 에 대한 얘기다. 룰 베이스와 ML 지도 & 비지도 모두 사용하는 배민 리뷰 FDS는 리뷰 조작 업체와 어떤 전쟁을 하고 있는지, SVDD, CNN, 소셜 네트워크 분석 등의 얘기가 기억에 남는다.

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

  • 이 챕터에서는 아무래도 업무 중심적일 수 밖에 없어서, 초반에는 Spring 에서의 테스트 얘기가 가득하다. 사실 나는 spring은 이제 앞으로도 평생 보기 싫어서 실눈으로 스쳤다 ㅎㅎㅎ. 그래도 견고한 프레임워크 만큼 치밀한 테스트에 대한 얘기는 초심자에겐 엄청난 귀감이 될 것 같다. (우테코 얘기 및 후기라서 신입 분들이 아주 공감을 하실 것 같다!)

  • 놀라웠던 것은 QA 프로세스가 엄청 견고하다는 점이었다. 논리적인 과정만 견고한 것이 아니라 해당 프로세스를 위해 개발팀에서 발맞춰 (특히 UI 테스팅 중심으로) 어떤 노력을 하는지 볼 수 있었다.

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

  • 배민의 사건 사고가 고스란히 있는 챕터이다. "누구나 실수를 한다, 하지만 같은 실수를 반복하지 않기 위해 실수에서 배우고 재발 방지 대책에 대한 얘기" 를 하는 것이 기억에 남는다. 그리고 역시나 등장하는 "DB DROP" 사건과 백업 본 & 바이너리 로그로 백업을 하는 얘기가 있다.

  • 마지막으로 S3 세팅과 보안에 대한 얘기에서는 나도 많이 배웠다. 사실 힘들게 보안 세팅 하고 오버헤드 커질빠에 "S3 에 민감 정보를 배제하고 말지!" 라는 생각이 있었고, S3 무지성 퍼블릭 경험이 많았던 나에게 좋은 팁을 줬다. 상세한 것은 아니지만 WAF 만으로 다시 찾아볼 것 같다.

  • https://techblog.woowahan.com/2699/

profile
도메인 중심의 개발, 깊이의 가치를 이해하고 “문제 해결” 에 몰두하는 개발자가 되고싶습니다. 그러기 위해 항상 새로운 것에 도전하고 노력하는 개발자가 되고 싶습니다!

2개의 댓글

comment-user-thumbnail
2024년 1월 8일

재밌네요! 감사합니다 :)

1개의 답글