Go HTTP/2 패키지로 개발을 하다 발견한 Error Code 를 정리합니다.
NO_ERROR 에러 메세지가 나온 상황은 이렇습니다. 서버에서 read 버퍼를 통해 데이터를 읽고 있는 와중에 서버에서 read 버퍼를 닫고 응답을 보냈습니다. read 버퍼를 닫을 때 위와 같은 메세지가 나왔습니다. 에러 메세지는 아래와 같습니다.
stream error: stream ID xxxxx; NO_ERROR
실제 Go 코드에서 위 에러 메세지를 생성하는 위치는 여기에 있습니다. 해당 에러는 HTTP/2 연결 내에서 하나의 스트림에만 영향을 미치는 에러였습니다. 관련 에러는 StreamError struct 를 이용하여 관리하고 있습니다. HTTP/2 는 하나의 연결 안에서 다양한 스트림이 오가기 때문에 Go HTTP/2 pakcage 에서는 스트림에 대해 별도로 에러 처리를 하는 것 같습니다. 연결 에러는 ConnectionError 로 관리하고 있습니다.
NO_ERROR 가 어떤 에러인지 찾다 보니 아래처럼 다양한 에러가 있다는 것을 알게 되었습니다.
자세한 것은 HTTP/2 RFC (7. Error codes) 에 설명되어 있습니다.
NO_ERROR 은 말 그대로 에러가 없다는 뜻입니다. 간단히 Graceful shutdown 상황입니다. 서버에서 read 버퍼를 정상 종료했기 때문에 발생한 에러 코드였습니다. 처음 stream error 문구를 봤을 때 문제가 있는 줄 알아 식겁했는데 다행히 정상 종료를 했다는 뜻이었습니다. 여러분들도 너무 놀라지 마시고 천천히 에러 코드를 살펴보시면 좋겠습니다.