TCP 공부를 하면서 Graceful Shutdown이라는 내용을 접하였습니다.
설명을 보면 정상적으로 종료할 때 (ex : 전송 중인 데이터를 다 전송한 뒤에 종료할 때) 사용하는 것 같은데, 명확하게 와닿지가 않아서 조금 더 조사해보았습니다.
Gracefull Shutdown
TCP 프로토콜에서 Graceful Shutdown은 두 개의 호스트 간의 연결을 종료할 때 데이터의 손실을 방지하고 완전한 데이터 전송을 보장하는 방법입니다. 이는 애플리케이션에서 특정 작업이나 프로세스가 완료될 때 해당 작업이나 프로세스에 대한 연결을 종료할 때 자주 사용됩니다.
TCP의 4-way handshake
TCP의 4-way handshake는 서버와 클라이언트 간에 데이터를 주고받을 때, 연결을 설정하고 해제하는 과정입니다. Graceful Shutdown에서도 4-way handshake를 사용하여 연결을 종료합니다. 클라이언트는 서버에게 연결 종료 요청을 보내고 서버는 연결 종료 응답을 보냅니다. 그 후, 서버는 클라이언트로부터 데이터 전송이 완료될 때까지 대기하고 최종 확인 응답을 보냅니다. 마지막으로 클라이언트는 확인 응답을 받으면 연결을 종료합니다.
Gracefull Shtudown과 반대되는 개념으로 착각하여 강제종료 같은 선입견이 생겼었는데 추가로 정보를 찾으면서 잘 정리한 것 같습니다.
데이터 손실 방지
Graceful Shutdown은 데이터의 손실을 방지하고 완전한 데이터 전송을 보장합니다. 이는 데이터가 완전히 전송되기 전에 연결을 종료하지 않으므로 발생하는 것입니다. 이것은 애플리케이션에서 데이터의 손실이 발생하지 않도록 하고, 네트워크 성능을 향상시키는 데 매우 중요합니다.
Graceful Shutdown의 예시
Graceful Shutdown은 많은 서비스에서 사용됩니다. 예를 들어, 웹 서버에서는 연결이 길게 유지되는 경우 연결을 종료하기 전에 모든 데이터를 보내야 합니다. 이는 사용자가 전송한 데이터가 완전히 처리되었음을 보장하고, 불필요한 리소스 사용을 방지하며, 서버의 가용성을 유지하는 데 도움이 됩니다. 또한, 데이터베이스 서버에서는 데이터베이스 작업이 완료된 후 연결을 종료하는 데 Graceful Shutdown을 사용합니다.
참고자료
https://www.rfc-editor.org/rfc/rfc793
RFC 793: Transmission Control Protocol
www.rfc-editor.org