9월 17일 (토)

<구글 엔지니어는 이렇게 일한다>를 읽고

Posted by Yan on September 17, 2022

수 많은 프로세스에서 의미 찾기

이번 개발 기간은 쉴새없이 일하는 까닭에, 조금 지치고 나를 태우고 있다는 생각이 들 즈음이었다.
우리 프로젝트의 gitlab에서 볼 수 있는 타사 개발자가 올린 MR중, 정갈하게 코드 리뷰를 하고 있는 레포를 보았다.
요즘 우리 프로젝트에 도입된 수 많은 프로세스가 제 기능을 하고 있지 않다는 일종의 허무함이 들어서,
추석에 책이나 읽고 아무 생각도 안 해야지 하며 퇴근길에 구글 엔지니어는 이렇게 일한다를 샀다. 이 책을 연휴기간에 읽고 개발자 독서모임에 다녀왔다.

구글 엔지니어도 코드를 보여주는게 부담스러워지면 코드를 숨기고 싶어진다고 하여,
요즘따라 코드리뷰 받기가 두려워서 도망다니던 내게 조금 위안이 되었다.
근 1년간 첫 프로젝트에서 ‘이 테스트는 왜 하지?’, ‘왜 sub 책임자를 만들지?’하는 궁금증이 생겼던 것도 이 책을 통해 조금 해소되었다.

테스트에 관한 이야기들.

  1. 구글에서는 테스트 인증이라는 인증 프로그램을 만들었다.
    • 테스트 인증 목적은 각 팀이 자신의 테스트 프로세스 수준(성숙도)을 알게 하고 한단계 올라서기 위한 지침을 제공하기 위함이다.
    • 테스트 인증 프로그램은 총 5개 레벨로 구성. 한 분기(3달) 안에 승급이 가능하도록 설계
    • 레벨 1:
      • 지속적 빌드 구축
      • 코드 커버리지 축적
      • 모든 테스트를 작은/중간크기/큰 테스트로 구분
      • 불규칙한 테스트 식별(꼭 수정할 필요는 없음)
      • 바로 실행할 수 있는(반드시 포괄할 필요는 없음) 빠른 테스트 스위트 마련
    • 레벨이 높아질 수록:
      • 실패하는 테스트가 없어야 릴리즈 가능
      • 비결정적인 테스트 모두 제거
    • 레벨 5:
      • 모든 테스트 자동화
      • 모든 커밋 전에 빠른 테스트 스위트가 수행되도록 함
      • 비결정성을 완전히 제거
      • 모든 행위를 테스트 해야 함
    • 이 테스트 프로그램을 시행하며 사내 대시보드에서 모든 팀의 현재 레벨을 보여주어 은근히 분위기를 부추겼다. 모든 팀이 앞다투어 높은 레벨로 올라서고자 경쟁하기 시작했다.
  2. 단위 테스트가 좋은 이유
    • 단위 테스틑는 대체로 작은 테스트에 속한다. 작은 테스트는 빠르고 결정적이어서 개발자들이 수시로 수행하며 피드백을 즉각 얻을 수 있다.
    • 단위 테스트는 대체로 대상 코드와 동시에 작성할 수 있을 만큼 작성하기 쉽다. 엔지니어들은 커다란 시스템을 설정하거나 이해할 필요 없이 작성 중인 코드를 검증하는 데 집중할 수 있다.
    • 빠르게 작성할 수 있으므로 테스트 커버리지를 높이기 좋다. 커버리지가 높다면 엔지니어들은 기존 동작을 망가뜨리지 않으리라는 확신 속에서 코드를 변경할 수 있습니다.
    • 각각의 테스트는 개념적으로 간단하고 시스템의 특정 부분에 집중하므로 실패시 원인을 파악하기 슆다.
    • 대상 시스템의 사용법과 의도한 동작 방식을 알려주는 문서자료 혹은 예제 코드 역할을 해준다.

      구글은 테스트 유지보수성을 상당히 중시한다. 유지보수하기 쉬운 테스트 = 그냥 작동하는 테스트.
      한 번 작성해두면 실패하지 않는 한 엔지니어가 신경 쓸 필요 없고, 실패한다면 원인을 바로 알 수 잇는 진짜 버그를 찾았다는 뜻.

  3. 깨지기 쉬운 테스트가 아닌, 변하지 않는 테스트로 만들기 위해 노력하기
    • 깨지기 쉬운 테스트: 실제로는 버그가 없음에도, 심지어 검증 대상 코드와 관련 없는 변경 때문에 실패하는 테스트
    • 제품 코드를 변경하는 유형에 따른 테스트 대응
      • (1) 순수 리팩터링 : 테스트가 변경되지 않아야 한다.
      • (2) 새로운 기능 추가 : 기존 행위들에 영향을 주지 않아야 한다.
      • (3) 버그 수정 : 보그가 존재한다는 것은 기존 테스트 스위트에 빠진게 있다는 신호. 버그 수정과 동시에 누락됐던 테스틀 추가해야되고, 기존 테스트들은 변경되지 않아야 한다.
      • (4) 행위 변경 : 기존 테스트도 변경되어야 한다.

이번 독서모임은 내게 다양한 촉매제가 되어 주었다.
특히, 10년차 자바 백엔드 개발자를 만났는데, MSA로 전환하며 서버에 직접 쿠버네티스를 도입하면서 일어난 이슈에 대해서 이야기 해주셔서 아주 흥미롭게 들었다.
프론트엔드 개발자와 ios 개발자도 있었는데, 2주에 한번씩 릴리즈 버전이 올라가는 운영 환경에서의 배포에 대한 이야기를 들려주셔서 현 프로젝트가 오픈하고 난 뒤가 궁금해지기 시작했다.
시스템 개발자도 있었는데 고령화된 팀에 새로운 시스템을 도입하기 위한 여정에 대해 들려주셨다.
독서모임을 마치고 저녁 늦게 집에 돌아왔는데,
우물 안에 있던 내게 트리거가 된 중요한 날이라는 생각이 퍼뜩 들었다.