Home
Hyeonsu Lim
Cancel

22. 대규모 변경

22.1 대규모 변경이란? 우리 경험상 대규보 변경(LSC)는 논리적으로는 연관되어 있으나 현실적인 한계 때문에 원자적으로 서브밋할 수 없는 변경들의 집합이다. 구글의 경우 LSC는 거의 항상 자동화 도구를 이용해 생성한다. LSC를 만드는 이유는 다양하지만 LSC로 인해 생성되는 변경들은 대체로 다음과 같다. 코드베이스 전반을 훑는 분석도구로...

21. 의존성 관리

의존성 관리란 우리가 통제하지 못하는 라이브러리, 패키지, 그 외 의존성들의 네트워크를 관리하는 일을 말한다. 의존성 관리와 관련이 가장 깊은 주제는 소스 버전 관리이다. 의존성 관리는 시간과 확장 양 축 모두에서 복잡도를 키운다. 소스 관리에서는 코드를 변경할 때 테스트를 수행하고 기존 코드를 손상시키지 않아야 한다. 코드베이스가 공유되어 있어 무...

20. 정적 분석

정적 분석은 프로그램을 실행하지 않은 채로 소스 코드를 분석하여 버그나 안티패턴등의 잠재적인 문제를 찾아내는 것을 말한다. 정적 분석은 버그 찾기 이상의 혜택을 제공한다. 구글은 정적 분석을 이용해 모범 사례를 코드에 널리 배포하고, 최신 API를 이용하게 하며, 기술 부채를 막거나 줄여준다. 또 개발자 교육에도 유용하고 코드베이스에 안티패턴이 침투...

19. Critique 구글의 코드 리뷰 도구

코드 리뷰는 소프트웨어 개발에서 없어서는 안 될 요소이다. 특히 성장하기 위해 매우 중요하다. 코드 리뷰의 가장 큰 목적은 코드베이스의 가독성과 유지보수성 개선인데 이것은 리뷰 프로세스가 뒷받침해줘야 가능한 이야기이다. 구글의 자체 시스템인 Critique를 예로 삼아 어떻게 해야 성공적인 코드리뷰 도구를 도입할 수 있는지를 알아보자. Critiqu...

18. 빌드 시스템과 빌드 철학

구글 엔지니어들에게 구글에서 일하면서 무엇을 가장 좋아하는지 설문조사한 결과에서 빌드 시스템이 4위에 올랐다. 구글은 엔지니어가 빠르게 안정적으로 빌드할 수 있도록 설립 초기부터 지금까지 자체 빌드 시스템을 구축하는 데 엄청나게 투자했다. 그리고 빌드 시스템의 핵심 구성요소인 Blaze는 2015년에 Bazel이라는 이름의 오픈 소스로 세상에 공개되었...

17. Code Search

Code Search는 구글이 이용하는 코드 브라우징 및 검색 도구로 프런트엔드 UI와 다양한 백엔드 요소로 이루어져 있다. 구글의 거대한 코드베이스를 감당하며 쉽게 확장할 수 있는 도구가 필요해서 만들어졌다. Code Search는 대규모 코드를 읽고, 이해하고, 탐색하는 데 최적화되었다. 이를 위해 클라우드 기반 백엔드를 적극 활용하여 콘텐츠를 ...

16. 버전 관리와 브랜치 관리

16.1 버전 관리란? 버전 관리 시스템(VCS)는 파일의 시간에 따른 변경 기록(버전)을 추적하는 시스템이다. 파일의 메타 데이터를 관리하며 이 메타 데이터와 파일들의 버전별 복사본을 합쳐 리포지토리라고 한다. VCS를 이용하면 여러 개발자가 같은 파일들로 동시에 작업할 수 있어서 팀 업무를 효과적으로 조율할 수 있다. 초창기 VCS에서는 파일 단...

15. 폐기

모든 시스템은 나이를 먹는다. 새로운 기술, 라이브러리, 기법, 언어 등이 등장하면서 주변 환경이 끊임 없이 변하기 때문에 기존의 시스템은 서서히 구식이 되어 간다. 오래된 시스템을 유지하려면 관리하는 데 지속해서 비용이 들어가고 난해한 옛 기술에 대한 전문 지식이 필요하다. 이러한 낡은 시스템을 언제까지고 끌고 다니기 보다는 완전히 떼어내는 편이 나...

14. 더 큰 테스트

14.1 더 큰 테스트란? 더 큰 테스트들은 작은 테스트와 많은 면에서 다르다. 따라야 하는 제약도 다르다. [특성] 느릴 수 있다. 구글에서 대규모 테스트의 기본 타임아웃 값은 15분~1시간이다. 밀폐되지 않을 수 있다. 대규모 테스트는 다른 테스트나 최종 사용자와 자원 및 트래픽을 공유하기도 한다. 비결정적일 수 있다. 이러한 단...

13. 테스트 대역

예를 들어 외부 서버에 요청을 보내고 응답을 받아 데이터베이스에 저장하는 함수를 검증하는 경우 테스트 몇 개만 작성하면 충분할 것이다. 하지만 이런 테스트를 수백, 수천개 작성하게 된다면 전체를 한 번에 수행하는데만 몇 시간씩 걸리고 예기치 못한 네트워크 실패나 테스트들끼리 테이터를 덮어쓰는 등의 일이 발생하여 테스트 스위트가 불규칙적으로 실패하기 시...