sayu.day
Backend

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

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

발행 2026년 1월 1일2202

목표

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

  • 미들웨어 순서
  • 에러 계약
  • 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 필수

요약

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

다음 읽기

이 생각이 이어지는 방향

Backend 더 보기
공유

읽은 뒤의 대화

읽은 뒤의 생각을 이어갑니다

질문, 반론, 조용한 후속 메모를 이 글 아래에 남길 수 있습니다.

sayu.day는 생각과 작업의 흔적을 천천히 정리하는 개인 출판물입니다.
직접 겪고 검토한 내용, 다시 읽을 만한 아이디어, 작업하며 남긴 메모를 모읍니다.
시간이 지난 글은 현재의 판단과 다를 수 있어 업데이트 맥락을 함께 남깁니다.

© 2026 sayu.day