0Pricing
Go Academy · 강의

상태 점검과 운영 환경 튜닝

컨테이너에서 HEALTHCHECK, tini 및 신호 처리

상태 점검과 운영 환경 튜닝은(는) CoddyKit의 무료 Go Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Go Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

상태 점검 엔드포인트

상태 점검 엔드포인트를 사용하면 로드 밸런서와 오케스트레이터가 서비스가 실행 중이며 트래픽을 처리할 준비가 되었는지 확인할 수 있습니다. 일반적인 종류는 두 가지입니다. 활성 상태(실행 중인가?)와 준비 상태(요청을 처리할 수 있는가?)입니다.

활성 상태 엔드포인트

프로세스가 실행 중이면 200 OK를 반환합니다. 프로세스가 실행 중인 것만으로 충분한 간단한 항상 성공하는 Handler입니다:

mux.HandleFunc("/healthz/live", func(w http.ResponseWriter, r *http.Request) {
    w.WriteHeader(http.StatusOK)
})

준비 상태 엔드포인트

서비스가 준비된 경우에만 200을 반환합니다(데이터베이스 연결, 캐시 준비, 마이그레이션 완료). 시작 중이거나 성능이 저하된 상태에서는 503을 반환합니다:

mux.HandleFunc("/healthz/ready", func(w http.ResponseWriter, r *http.Request) {
    if err := db.PingContext(r.Context()); err != nil {
        w.WriteHeader(http.StatusServiceUnavailable); return
    }
    w.WriteHeader(http.StatusOK)
})

Kubernetes 프로브

Kubernetes Deployment 사양에서 활성 상태 프로브와 준비 상태 프로브를 구성하십시오:

livenessProbe:
  httpGet: { path: /healthz/live, port: 8080 }
  initialDelaySeconds: 5
  periodSeconds: 10
readinessProbe:
  httpGet: { path: /healthz/ready, port: 8080 }
  initialDelaySeconds: 3
  periodSeconds: 5

GOMAXPROCS 조정

컨테이너에서 GOMAXPROCS의 기본값은 컨테이너의 CPU 제한이 아니라 호스트의 CPU 개수입니다. go.uber.org/automaxprocs를 사용하여 cgroup 제한을 기준으로 올바르게 설정하십시오.

import _ "go.uber.org/automaxprocs"

메모리 제한

GOMEMLIMIT(Go 1.19 이상)을 컨테이너 메모리 제한으로 설정하면 메모리 부족 종료가 발생하기 전에 GC가 메모리를 더 적극적으로 사용할 수 있습니다:

import "runtime/debug"
debug.SetMemoryLimit(512 * 1024 * 1024) // 512 MiB

GC 조정

GC 빈도를 제어하려면 GOGC를 설정하십시오. 기본값은 100이며, 힙이 두 배가 되면 GC가 실행됩니다. 값을 낮추면 GC가 더 자주 실행되어 메모리를 줄일 수 있고, 값을 높이면 메모리를 더 사용하는 대신 GC 실행 횟수를 줄일 수 있습니다.

os.Setenv("GOGC", "200") // allow heap to grow 2× before GC

연결 풀 조정

컨테이너의 리소스 제한과 데이터베이스의 max_connections에 맞게 데이터베이스 연결 풀 제한을 설정하십시오:

db.SetMaxOpenConns(25)
db.SetMaxIdleConns(10)
db.SetConnMaxLifetime(5 * time.Minute)

측정 지표 노출

내부 데이터가 외부 클라이언트에 유출되지 않도록 Prometheus 측정 지표를 별도 포트(주 API 포트가 아닌 포트)에 노출하십시오:

go func() {
    http.Handle("/metrics", promhttp.Handler())
    http.ListenAndServe(":9090", nil)
}()

Kubernetes에서 정상 종료

종료 시간 초과에 충분한 시간을 허용하도록 파드 사양에서 terminationGracePeriodSeconds를 설정하십시오. SIGTERM을 수신하면 준비 상태 프로브에서 즉시 503을 반환하십시오.

운영 환경 프로파일링

인증을 사용하여 외부에 공개되지 않은 포트에서 pprof를 활성화하십시오. pprof를 공개하지 마십시오. 내부 상태가 노출되고 서비스 거부 공격에 악용될 수 있습니다.

빠른 확인

GOMAXPROCS를 호스트 CPU 수가 아니라 컨테이너 CPU 제한에 따라 설정해야 하는 이유는 무엇입니까?

요약: 상태 점검 및 운영 환경 조정

핵심 사항:

  • 활성 상태: 프로세스 실행 중, 준비 상태: 서비스가 트래픽을 처리할 수 있음
  • automaxprocs는 컨테이너 CPU 제한을 기준으로 GOMAXPROCS를 설정합니다
  • GOMEMLIMIT는 메모리 부족 종료를 방지하고, GOGC는 GC 빈도를 조정합니다
  • 측정 지표는 별도의 내부 전용 포트에 노출합니다

자주 묻는 질문

“상태 점검과 운영 환경 튜닝” 강의는 무료인가요?

네 — “상태 점검과 운영 환경 튜닝” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Go Academy 강의 전체를 잠금 해제할 수 있습니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“상태 점검과 운영 환경 튜닝”에서 뭘 배우나요?

컨테이너에서 HEALTHCHECK, tini 및 신호 처리 브라우저에서 직접 실행하는 실습 코드로 Go Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Go Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Go Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“상태 점검과 운영 환경 튜닝” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Go Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Go Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Go용 다단계 Docker 빌드
  2. 환경 구성과 비밀 정보
  3. 로컬 개발을 위한 Docker Compose
  4. 상태 점검과 운영 환경 튜닝
← Go Academy(으)로 돌아가기