본문 바로가기

Java/Vert.x

버텍스 코어: HTTP 요청 응답 및 청크로 전달(chunking)

더보기

HTTP 요청에 응답하려면 write()를 사용합니다. 응답은 요청이 종료 되기 전 여러 번 실행 될 수 있습니다.

버퍼(Buffer)를 응답하려면 다음과 같이 작성합니다.

HttpServerResponse response = request.response();
response.write(buffer);

문자열을 응답하려면 다음과 같이 작성합니다.

문자열은 별도 지정하지 않았다면 디폴트로 UTF-8로 인코딩됩니다.

HttpServerResponse response = request.response();
response.write("hello world!");

문자열을 응답하면서 인코딩 유형을 지정하려면 다음과 같이 작성합니다.

HttpServerResponse response = request.response();
response.write("hello world!", "UTF-16");

응답은 비동기로 처리됩니다. 응답에 대한 처리가 끝났다면 end()를 사용하여 응답을 종료합니다.

더보기

write를 수행하면 응답 헤더에 먼저 작성됩니다. HTTP Chunking을 사용하지 않는다면 응답을 완료하기 이전에 Content-Length 헤더를 작성해야 합니다.

HTTP 응답 완료 처리

HTTP 응답에 필요한 작성이 완료되었다면 end()를 사용해 응답을 마무리합니다.

HttpServerResponse response = request.response();
response.write("hello world!");
response.end();

이때 문자열이나 버퍼를 사용해 write()하는 과정을 포함 할 수 있습니다.

HttpServerResponse response = request.response();
response.end("hello world!");

응답을 마무리하고 연결을 닫으려면 close()를 사용합니다.

더보기

버텍스에서는 연결에 대한 keep-alive 옵션이 꺼져있다면 자동으로 연결이 닫히기 때문에 별도 처리 할 것이 없습니다. 

keep-alive 옵션이 켜져있을 때 연결이 자동으로 닫히는 시간을 지정하려면 setIdleTimeout을 지정합니다.

만약 HTTP/2.0 프로토콜을 사용하고 있다면 연결을 닫기 직전에 {@literal GOAWAY} 평문을 보냅니다.

HTTP 응답 헤더

응답에 헤더(Header) 정보를 추가하려면 headers에 직접 키/값의 쌍을 작성합니다.

HttpServerResponse response = request.response();
MultiMap headers = response.headers();
headers.set("content-type", "text/html");
headers.set("other-header", "wibble");

또는 putHeader() 메소드를 사용합니다.

HttpServerResponse response = request.response();
response.putHeader("content-type", "text/html").putHeader("other-header", "wibble");
더보기

헤더 작성은 응답의 본문(Body)이 작성되기 이전에 완료되어야 합니다.

HTTP Chunking 응답

버텍스는 HTTP Chunked Transfer Enconding을 지원합니다.

이 기능을 사용하면 HTTP 응답 본문을 청크(Chunk)로 보낼 수 있습니다. 일반적으로 Chunking은 본문의 크기가 크거나 또는 본문의 크기를 예측하기 어려운 경우에 사용합니다.

버텍스에서 디폴트는 청크를 사용하지 않습니다. 본문을 청크로 보내려면 setChunked()를 사용합니다.

HttpServerResponse response = request.response();
response.setChunked(true);

청크 모드인 경우에는 HTTP 응답에 대한 트레일러(Trailers)를 작성 할 수 있습니다.

트레일러를 추가하려면 응답에서 trailers에 직접 접근합니다.

HttpServerResponse response = request.response();
response.setChunked(true);
MultiMap trailers = response.trailers();
trailers.set("X-wibble", "woobble").set("X-quux", "flooble");

또는 putTrailer() 메소드를 사용합니다.

HttpServerResponse response = request.response();
response.setChunked(true);
response.putTrailer("X-wibble", "woobble").putTrailer("X-quux", "flooble");

정리 및 복습

  • HTTP 요청에 대한 응답으로 버퍼(Buffer) 또는 문자열을 보낼 수 있습니다.
  • 응답이 완료되면 end()를 사용하여 마무리합니다.
  • 응답을 청크(Chunk)로 보내려면 setChunked()를 사용합니다. 버텍스에서는 디폴트로 청크를 사용하지 않습니다.
  • 청크를 사용하는 경우 응답에 트레일러(Trailers)를 작성 할 수 있습니다.
  • 트레일러를 작성하려면 trailers에 직접 접근하거나 putTrailer()를 사용합니다.