Go context 없이 만든 서버는 언젠가 고장난다
페이지 정보

영삼이
본문
✅ context 없이 만든 서버는 언젠가 고장난다
타임아웃, 취소, 리소스 정리는 context로 관리하자
Go의 HTTP 서버는 기본적으로 처리 중인 요청을 계속 기다린다:
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
time.Sleep(10 * time.Second)
fmt.Fprintln(w, "Done")
})
이 요청을 클라이언트가 중간에 끊어도
서버는 끝까지 처리하려고 한다 → 리소스 낭비
✅ 해결: r.Context()
로 종료 감지
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
select {
case <-time.After(10 * time.Second):
fmt.Fprintln(w, "Done")
case <-r.Context().Done():
log.Println("Client canceled request")
}
})
-
클라이언트가 연결을 끊으면 자동으로
Done()
트리거 -
불필요한 처리 중단 가능
-
DB, 외부 API 요청 등도 함께 취소 처리 가능
✔️ 실전에서는 모든 요청 처리 흐름에
context
를 도입해서 중단 가능성을 관리해야 한다.
이게 안정적인 서버의 기본이다.
- 이전글map은 쓰레드 세이프하지 않다 25.03.28
- 다음글구조체 포인터냐 값이냐, 선택이 중요하다 25.03.28
댓글목록
등록된 댓글이 없습니다.