Bazel for Go
Bazel
- 빌드를 도와주는 시스템
- 다양한 언어 빌드 지원
- 다양한 하드웨어 플랫폼, 크로스 컴파일 지원
- 구글에서 내부 빌드툴로 사용 중
- 오픈 소스에서는 일부 기능만 오픈
- 빌드 명세를 정확히 작성해 주어야 동작함
- 의존되는 라이브러리 모두 명시해야함
- Skylark 룰 기반
- python과 유사한 스크립트 언어
- Bazel을 빌드하기 위한 언어로 사용됨
- 참고 : https://docs.bazel.build/versions/master/skylark/language.html
- 빌드를 코드로 관리
- Docker Image 빌드 제공
Bazel 사용의 장점
- 빠르고 정확한 빌드
병렬화
- 병렬화를 위해 빌드 명세가 필요
- 각 소스코드 파일마다 필요한 라이브러리를 알기 때문에 병렬이 가능
- 멀티 머신 기능은 아직 작업 중
캐싱
- 필요한 부분만 다시 빌드하고 나머지는 캐싱
정확성
- 각 소스 파일마다 의존성이 독립적으로 관리되기 때문에 어디서 누가 빌드를 하든지 정확히 빌드
- 순환 참조는 허용 안함.
- A가 B를 참조하면 B는 A를 참조할 수 없음
참고
- 예제 : https://github.com/si-you/bazel-golang-examples
- 발표자료 : https://github.com/golangkorea/gophercon-talks
Golang과 웹소켓을 활용한 서버프로그래밍
안정성 있는 서버를 위한 테스트
- 단위 테스트
- 테스트 패키지
- Go test -race option : 경합이 많이 일어나는지 테스트
- CI/CD
- Git + 메소스-마라톤
- 부하테스트
- ngrinder
- Jython
- 기능 추가때마다 테스트 스크립트 추가
- 시간의 흐름에도 지속적으로 TPS를 유지하는지 체크
- ngrinder
- 메모리 고루틴 회수 체크
- runtime.NumGoroutine()
- Runtime.MemStats
서비스 런칭하며 느낀점
- 적당한 방법론 선택
- Mutex vs Channel
- Mutex의 남용은 데드락을 발생시킴
- Channel을 사용하자
- isXXX와 같은 플래그 변수 사용보다는 channel 활용
- 실수 찾기
- Goroutine Leak
- HandlePanic
카카오게임즈 - 클래시로얄 프렌즈
- Gorilla websocket 사용
- 컨테이너 하나당 17000명까지 무리 없이
- 2만명부터 메시징 딜레이
- 안정적으로 10000명 기준으로
참고
- 예제 : https://github.com/aidanbae/websocket-example
- 발표자료 : https://github.com/golangkorea/gophercon-talks
'Work > Conference' 카테고리의 다른 글
HashoCorp 밋업 - 레거시 위에서 재현 가능한 환경 구축하기 (0) | 2018.08.15 |
---|---|
HashiCorp 밋업 - 당근마켓에서 Packer와 Vagrant 사용기 (0) | 2018.08.15 |
GDG Korea WebTech 후기 (0) | 2016.09.25 |
SK Tech Planet 2015 참관 후기 (0) | 2015.10.08 |
Deview 2015를 다녀와서 (0) | 2015.09.15 |
댓글