본문 바로가기
Work/Conference

Golang 밋업 - Bazel 소개와 카카오 게임즈 사례

by ★용호★ 2018. 8. 14.

Bazel for Go

Bazel

  • 빌드를 도와주는 시스템
  • 다양한 언어 빌드 지원
  • 다양한 하드웨어 플랫폼, 크로스 컴파일 지원
  • 구글에서 내부 빌드툴로 사용 중
    • 오픈 소스에서는 일부 기능만 오픈
  • 빌드 명세를 정확히 작성해 주어야 동작함
    • 의존되는 라이브러리 모두 명시해야함
  • Skylark 룰 기반
  • 빌드를 코드로 관리
  • Docker Image 빌드 제공

Bazel 사용의 장점

    빠르고 정확한 빌드
    • 병렬화

      • 병렬화를 위해 빌드 명세가 필요
      • 각 소스코드 파일마다 필요한 라이브러리를 알기 때문에 병렬이 가능
      • 멀티 머신 기능은 아직 작업 중
    • 캐싱

      • 필요한 부분만 다시 빌드하고 나머지는 캐싱
    • 정확성

      • 각 소스 파일마다 의존성이 독립적으로 관리되기 때문에 어디서 누가 빌드를 하든지 정확히 빌드
      • 순환 참조는 허용 안함.
        • A가 B를 참조하면 B는 A를 참조할 수 없음

참고






Golang과 웹소켓을 활용한 서버프로그래밍

안정성 있는 서버를 위한 테스트

  • 단위 테스트
    • 테스트 패키지
    • Go test -race option : 경합이 많이 일어나는지 테스트
  • CI/CD
    • Git + 메소스-마라톤
  • 부하테스트
    • ngrinder
      • Jython
      • 기능 추가때마다 테스트 스크립트 추가
      • 시간의 흐름에도 지속적으로 TPS를 유지하는지 체크
  • 메모리 고루틴 회수 체크
    • runtime.NumGoroutine()
    • Runtime.MemStats

서비스 런칭하며 느낀점

  • 적당한 방법론 선택
    • Mutex vs Channel
    • Mutex의 남용은 데드락을 발생시킴
    • Channel을 사용하자
    • isXXX와 같은 플래그 변수 사용보다는 channel 활용
  • 실수 찾기
    • Goroutine Leak
    • HandlePanic

카카오게임즈 - 클래시로얄 프렌즈

  • Gorilla websocket 사용
  • 컨테이너 하나당 17000명까지 무리 없이
  • 2만명부터 메시징 딜레이
  • 안정적으로 10000명 기준으로

참고




댓글