GOAT Golang 패키지

Kyu Yeon 'rebel' Lee·2022년 11월 26일
0

목차

개요

  • 여러 서비스나 개인적으로 사용하는 프로그램을 만들어보면서 느낀 반드시 사용해야할 것들
  • 디버깅, 로그 추적, 등등을 생각했을때 꽤나 도움이 된다.
  • 2022-11-26 기준으로 최근 1년간 업데이트가 된 것들을 위주로 기록
  • 실제로 써보고 안터진것들을 기록

목록

설정 관리

  • github.com/jinzhu/configor
    설정 파일 관리는 다른거 필요없고 이것만 사용중.

HTTP

  • HTTP 서버

    github.com/gin-gonic/gin
    웹 서버에 있어서 이것만큼 생각없이 짜도 잘 굴러가는 것을 못봄. Thorughput도 높고 1년동안 꺼지지 않고 굴러가는 불멸의 서버 라이브러리.

    미들웨어, 다중서버 등도 지원해서 정말 편리하게 사용함.

  • HTTP 클라이언트

    github.com/go-resty/resty

    바닐라 Golang http는 여러가지로 요청하기 번거롭지만, 이걸 사용하면 2-4줄로 요청을 줄일수 있음. 배치 작업할때 정말 도움이 많이 됨.

텍스트 템플릿

  • text/template
    다른것 필요없고, Golang은 텍스트 템플릿에 있어서 이거만 있으면 됨

로깅

  • go.uber.org/zap
    엄청난 Thorughput을 견뎠다. 로그를 남기는 거 자체가 어느정도 성능에 영향을 끼치지만, 이것을 걷어내는 일을 없었음.
    Audit이나 Recovery에 엄청난 도움을 줌.
  • github.com/reconquest/karma-go
    오류 발생시 Context를 따라가서 Stacktrace처럼 오류 발생 트리를 그려줌.

메트릭 및 분석

  • 프로메테우스

    연동시 참고하기 좋은 문서 (공식 문서)
    https://prometheus.io/docs/guides/go-application/

    github.com/prometheus/client_golang/prometheus
    github.com/prometheus/client_golang/prometheus/promauto
    github.com/prometheus/client_golang/prometheus/promhttp

    아쉽게도 Prometheus자동 연동도 없고, 대부분 연동 케이스가 내가 직접 만들어야 하는 메트릭이어서 손으로 짜야했지만, 대체적으로 문제 없이 작동함.

  • 성능 트레이스 / MSA 트레이스

    github.com/open-telemetry/opentelemetry-go
    Context 단위로 얼마나 걸렸는지 시각화를 해준다.

코드 퀄리티

  • https://golangci-lint.run/
    냄새나는 코드 방지. 개발 시간을 늘린 주 원인이지만, 그만큼 오류를 많이 고쳐줌.

CLI 프레임워크

  • github.com/urfave/cli

    간단하게 CLI를 만들수 있게 도와줌


라이브러리 조합

CLI

  • log 또는 Zap
  • karma-go
  • text/template
  • github.com/urfave/cli

서버

  • Zap
    JSON형식으로 로그를 출력하도록 함. (파싱이 가능하도록)
  • text/template
  • github.com/gin-gonic/gin

배치

  • Zap
    JSON형식으로 로그를 출력하도록 함. (파싱이 가능하도록)
  • karma-go
  • text/template
  • github.com/urfave/cli
  • github.com/go-resty/resty

0개의 댓글