프로젝트 의 Golang 스킬 트리

Go 서버 정상 종료하기

Go HTTP 서버의 새 연결을 거부하고 이미 수락한 자료 전송을 원래 프로세스에서 마친 뒤 해당 프로세스를 종료하도록 조정합니다.

프로젝트Golang

💡 이 튜토리얼은 영어로 번역되었습니다. 원본을 보려면 영어로 전환

소개

Go 서버 정상 종료하기는 이미 진행 중인 작업을 버리지 않고 다운로드 서비스를 닫는 실습 프로젝트입니다. 먼저 텍스트 자료 하나를 완전히 내려받고, 즉시 중지가 이미 수락한 전송을 어떻게 끊는지 관찰합니다. 그런 다음 새 연결을 거부하면서 기존 다운로드는 원래 서버 프로세스에서 끝내는 종료 조정을 구현합니다.

두 개의 가이드 실습에서는 실제 클라이언트 결과를 프로세스 신원, 신호 전달, HTTP 종료, main의 대기 책임과 연결합니다. 하나의 독립 챌린지는 같은 메커니즘을 서로 다른 두 자료의 수락된 전송에 적용합니다. 각 단원은 자체 환경과 자료를 제공합니다. 예상 시간은 약 150분이며 읽기와 일반적인 수정을 포함한 저자의 추정치입니다.

학습 내용

과정을 마치면 다음을 수행할 수 있습니다.

  • 실제 자료 바이트로 사용할 수 있는 완전한 다운로드와 중단된 전송을 비교합니다.
  • 과정의 원래 빌드된 Go 프로세스를 식별하고 그 프로세스에 정확히 SIGTERM을 보냅니다.
  • 중지 전에 요청이 수락되었음을 확인하고 기존 작업이 계속되는 동안 새 연결이 거부되는 것을 관찰합니다.
  • 유한한 context 시간 예산과 http.Server.Shutdown을 사용하여 일반적인 활성 HTTP 요청이 끝나도록 합니다.
  • http.ErrServerClosed와 실제 서버 오류를 구분하고 종료가 완료될 때까지 main을 대기시킵니다.
  • 완전히 내려받은 자료 한 개 또는 두 개를 유지하고 원래 클라이언트와 서버의 결과를 확인하며 제공된 파일과 관찰 기록을 보존합니다.

추천 대상

이 과정은 작은 HTTP 서비스와 활성 요청의 수명 주기를 조정할 준비가 된 Go 학습자에게 적합합니다.

선수 지식: 기본 터미널 탐색, 분실물 API 만들기의 Go 핸들러와 오류 값, Go 워커로 웹사이트 확인하기의 고루틴과 채널 또는 동등한 경험이 필요합니다. 프로세스 ID, 신호, 유한한 context, 종료 중 main의 대기는 사용 전에 설명합니다.

학습 환경: LabEx는 브라우저 기반 터미널 환경에 Go, 시작 수명 주기 코드, 준비된 HTTP 핸들러, 실제 텍스트 자료 두 개, 관찰 도구를 제공합니다. 같은 머신의 Server와 Downloads 터미널에서 서비스를 실행하고 클라이언트를 사용할 수 있어 Go를 로컬에 설치할 필요가 없습니다. 명령, 레이블, 프로그램 출력은 영어로 유지됩니다.

자주 묻는 질문

운영체제 신호를 미리 알아야 하나요?

아니요. 실습에서는 과정 자체의 서버를 중지하기 전에 프로세스 식별과 SIGTERM을 소개합니다. 준비된 관찰 도구가 수락된 요청과 실제 프로세스 결과를 확인하도록 도와주므로 내부 추적 형식을 배울 필요는 없습니다.

Shutdown을 호출하면 모든 것이 자동으로 끝나나요?

Main은 종료가 완료될 때까지 기다려야 합니다. 기한 초과 오류는 활성 작업이 끝났다는 증거가 아닙니다. 서버 측 처리는 클라이언트가 내려받는 파일을 읽거나 버퍼를 기록하는 작업을 마치기 전에 완료될 수 있습니다. 따라서 두 터미널 메시지의 순서를 가정하지 않고 양쪽 결과를 확인합니다.

챌린지에서는 무엇이 달라지나요?

원래 서버를 중지할 때 서로 다른 두 자료가 이미 전송 중이어야 합니다. 두 다운로드 모두 정확한 바이트를 유지하고 활성 작업 중에는 새 연결을 거부하며 같은 서버가 정상 종료해야 합니다. 범위는 일반 HTTP이며 WebSockets, 분산 트래픽 전환, 운영 환경의 무중단 보장은 프로젝트에 포함되지 않습니다.

강사

labby
Labby
Labby is the LabEx teacher.

추천 코스

no data