핸드북
버즈빌 아키텍처
이 웹사이트는 버즈빌 소프트웨어 아키텍처 전반에 대한 내용과 개발을 위해 필요한 문서들을 모아두는 공간이다. 들어가며 광고 생태계는 많은 이해관계자로 인해 복잡한 구성을 가지고 있다. 애드테크 기업들은 이러한 광고 업계의 많은 부분을 자동화하고 최적화 함으로써 더욱 효과적이고 효율적인 광고 생태계를 만들어가고 있다. 허나…
기록으로 남긴 실천
아키텍처부터 개발과 운영까지, 버즈빌 팀의 실무 가이드.
작성 당시의 기술적 맥락을 보존한 가이드입니다. 현재 시스템에 적용하기 전 버전과 전제 조건을 확인해 주세요.
핸드북
이 문서는 버즈빌의 API(애플리케이션 프로그래밍 인터페이스, Application Programming Interface)를 정의하고 사용하는 방법을 기술한다. 인터페이스는 Protocol Buffers를 통해 정의한다. 가이드라인 API 우선 방식 (API-First Approach) 서비스 구성 시 API 우선 방식…
핸드북
이 문서는 gRPC에 대한 간단한 설명과 사용 방법 및 가이드라인을 제공한다. gRPC를 사용하기 위한 protobuf에 관한 내용도 포함한다. gRPC의 정의 gRPC는 Google 에서 만든 RPC(Remote Procedure Call) 프로토콜이다. 네트워크 요청을 소프트웨어 내부에 있는 함수를 호출하듯이 사용하게…
핸드북
이 문서는 새로운 서비스 혹은 모듈 프로젝트를 시작하는 방법을 소개한다. 준비물 프로젝트를 시작하기 위해서 아래 항목들이 필요하다. - Cookiecutter - Docker 사전 지식 클린 아키텍처 로버트 C. 마틴(Robert C. Martin a.k.a Uncle Bob)가 제안한 소프트웨어 아키텍처이다. 소프트웨어…
핸드북
이 문서에서는 새로운 프로젝트를 생성하는 방법을 소개한다. 버즈빌에서는 쿠키커터를 사용해서 신규 프로젝트를 생성한다. 언어별 프로젝트 템플릿 각 언어별 프로젝트 템플릿은 다음 링크에서 확인할 수 있다: - Go 프로젝트 템플릿 - Python 프로젝트 템플릿 신규 프로젝트 생성 쿠키커터를 이용해 신규 프로젝트를 생성한다.…
핸드북
프로젝트 시작하기 우선 프로젝트 시작하기 문서를 따라 새로운 프로젝트를 생성한다. 디펜던시 불러오기 dep을 사용해서 필요한 디펜던시를 초기화한다. bash dep init 이후 디펜던시 변경이 있을 경우 dep ensure를 통해서 디펜던시를 업데이트 할 수 있다. 프로젝트 레이아웃(Project Layout) Go 프…
핸드북
API 구현 API 정의 문서를 통해 정의된 API를 구현한다. 라이브러리 적용 API 정의를 통해 빌드된 Python 라이브러리는 버즈빌 내부적으로 사용하는 프라이빗 PyPI 패키지 관리 시스템으로 배포된다. pip 커맨드를 사용해서 배포된 라이브러리를 가져올 수 있다. bash $ pip install --extra-…
핸드북
TBD
핸드북
이 문서는 안드로이드 모듈을 구성할 때 고려할 사항들을 설명한다. 다음 내용들은 추천 사항이며, 프로젝트나 모듈에 따라 다른 구성을 가질 수 있다. 가이드라인 - 신규로 작성되는 모듈은 가능한 Kotlin 으로 구성한다. - 의존성 주입 패턴(Dependency injection pattern)을 적극적으로 활용한다. -…
핸드북
본 문서는 클라이언트의 모노리포에서 작업을 함에 앞서 알아야 하는 규칙과 작업 흐름을 설명한다. 프로젝트 구성 모노리포란 하나의 리포지토리에서 여러 프로젝트를 함께 관리하는 것을 의미한다. 따라서 하나의 리포에는 많은 모듈이 포함되어 있으며 이들은 서로 로컬 라이브러리 모듈로 참조를 하고 있다. 이에 대해 더 자세히 알고…
핸드북
이 문서는 새롭게 작성한 서비스를 배포하기에 앞서 확인해야 할 사항들을 기술하고 있다. 쿠버네티스 환경에 신규 서비스를 배포하기에 앞서 작성한 서비스가 아래 사항들을 준수하는지 확인하는 것을 권장한다. 도커 이미지 프로덕션 환경에 배포되는 도커 이미지는 단순히 docker-compose up으로 개발환경을 구동할 수 있는…
핸드북
들어가며 앱이 모듈화되는 경우에는 각 모듈을 로컬 라이브러리로 참조하여 별도로 모듈의 버전 관리 없이 앱의 버전만 관리하여 APK 파일을 배포가 가능하다. 하지만 SDK의 경우 각각의 모듈에 대해서 버전을 모두 명시 후에 배포까지 다 해줘야 하는 이슈가 있다. 이 문서에서는 멀티 모듈 앱과 멀티 모듈 SDK의 차이에 대해…
핸드북
본 문서에서는 버즈빌에서 백엔드 서비스를 배포하기 위해 준비해야하는 내용들에 대한 정보를 제공한다. 가이드라인 버즈빌에서 쿠버네티스에 서비스를 배포하는 과정은 아래와 같다. 프로젝트에 따라 상이할 수 있지만 일반적인 백엔드 워크로드 배포 파이프라인을 꾸리기 위해 아래와 같은 준비가 필요하다. Docker 이미지 생성 He…
핸드북
도커(Docker) 이 문서는 도커에 대한 간단한 설명과 각 프로젝트 팀에서 컨테이너 오케스트레이션 환경에 최적화된 이미지를 만드는 방법에 대한 가이드라인을 제공한다. 도커란 컨테이너 기술은 마이크로서비스 아키텍쳐와 밀접한 관계가 있다. 컨테이너 이미지는 일반적으로 하나의 프로세스를 격리된 환경에서 실행하는 것으로,…
핸드북
본 문서는 쿠버네티스 패키지 매니저인 헬름(Helm)에 대한 정보와 헬름 차트(Chart) 작성법에 대한 가이드라인을 제공한다. 헬름(Helm)이란 Helm은 쿠버네티스 애플리케이션을 패키지 형태로 손쉽게 관리할 수 있도록 도와주는 도구다. 디플로이먼트(Deployment), 스테이트풀셋(Statefulset)과 같은 컴…
핸드북
쿠버네티스 운영 이 문서는 쿠버네티스와 클러스터에 배포된 워크로드들의 상태를 확인하고 문제가 있을 시 트러블슈팅하는 데 도움이 될만한 정보를 기술하고 있다. kubectl kubectl은 쿠버네티스 클러스터에 각종 커맨드를 실행하기 위한 커맨드라인 인터페이스로, 쿠버네티스 클러스터에 배포된 워크로드들의 상태를 조회하고 운…
핸드북
잘 구성된 테스트는 더 빠르고 안정적으로 제품을 만들 수 있게 도와준다. 이 문서는 테스트 구성을 위한 기본 원칙과 가이드라인을 제공한다. 일곱 테스팅 원칙(Seven Testing Principles) 각 항목에 대한 자세한 내용은 Seven Testing Principles 문서를 참고한다. - 테스팅은 결함의 존재를…
핸드북
이 문서는 안드로이드 테스트 방법과 가이드라인을 제공한다. 이는 안드로이드 테스트 추천 라이브러리와 활용 방법에 대한 내용을 포함한다. 단 아래 내용은 추천 사항일 뿐이며, 각 프로젝트에 따라서 언제든 자유롭게 다른 방법을 적용하거나 제안할 수 있다. 다만 이 경우에도 프로젝트 내에서는 통일성을 갖는 것을 장려한다. 테스…
핸드북
이 문서는 Go 테스트 방법과 가이드라인을 제공한다. 이는 Go 테스트 추천 라이브러리와 활용 방법에 대한 내용을 포함한다. 단 아래 내용은 추천 사항일 뿐이며, 각 프로젝트에 따라서 언제든 자유롭게 다른 방법을 적용하거나 제안할 수 있다. 다만 이 경우에도 프로젝트 내에서는 통일성을 갖는 것을 장려한다. 테스트 라이브러…
핸드북
이 문서는 파이썬 테스트 방법과 가이드라인을 제공한다. 이는 파이썬 테스트 추천 라이브러리와 활용 방법에 대한 내용을 포함한다. 해당 문서 내용은 추천 사항이며, 각 프로젝트에 따라 다른 방법을 적용하거나 제안할 수 있다. 다만 이 경우에도 프로젝트 내에서는 통일성을 갖는 것을 장려한다. 유닛 테스트 이 문서에서는 pyt…