Kim Seogyu
Backend

Enterprise Go 시리즈 #2: 견고한 HTTP 서버 구축

운영 가능한 Go HTTP 서버를 위한 미들웨어 순서, 에러 매핑, 종료 전략을 정리합니다.

Published 2026년 1월 1일2 min read204 words

Enterprise Go 시리즈 #2: 견고한 HTTP 서버 구축

목표

서버는 "응답만 되는 코드"가 아니라, 장애 시에도 예측 가능한 동작을 해야 합니다. 핵심은 세 가지입니다.

  • 미들웨어 순서
  • 에러 계약
  • graceful shutdown

1) 미들웨어 순서

권장 순서:

  1. Recover
  2. RequestID
  3. Logger
  4. CORS
  5. Auth
  6. Handler

이 순서가 깨지면 추적 불가 로그, 패닉 누락, 인증 실패 누락 로그가 생깁니다.

2) 도메인 에러 -> HTTP 매핑

핸들러에서 원천 에러를 직접 분기하지 말고 도메인 코드로 매핑합니다.

switch err.Code {
case domain.CodeNotFound:
	status = 404
case domain.CodeValidation:
	status = 400
default:
	status = 500
}

규칙이 있으면 에러 포맷과 모니터링 지표가 안정됩니다.

3) Graceful Shutdown

종료 시 해야 할 일:

  • 새 요청 수락 중지
  • 진행 중 요청에 제한 시간 부여
  • 커넥션/워커 정리 후 종료
ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM)
defer stop()

멀티 컴포넌트 구성이라면 run.Group 패턴으로 종료 순서를 한곳에서 관리하는 편이 안전합니다.

운영 체크포인트

  • readiness/liveness 분리
  • request timeout 기본값 명시
  • panic 발생 시 표준 에러 응답 보장
  • access log에 request id 필수

요약

견고한 서버의 핵심은 프레임워크가 아니라 운영 규칙입니다. 미들웨어 순서, 에러 매핑, 종료 절차를 팀 표준으로 고정하면 장애 대응이 빨라집니다.

Share

Related Articles

Comments

이 블로그는 제가 알고 있는 것들을 잊지 않기 위해 기록하는 공간입니다.
직접 작성한 글도 있고, AI의 도움을 받아 정리한 글도 있습니다.
정확하지 않은 내용이 있을 수 있으니 참고용으로 봐주세요.

© 2026 Seogyu Kim