버퍼(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()를 사용합니다.
'Java > Vert.x' 카테고리의 다른 글
도커 컨테이너(Docker container)를 사용해 버텍스 앱을 Java 기본 이미지에서 실행 (0) | 2023.11.10 |
---|---|
이벤트 루프 스레드(Event-Loop thread), 워커 스레드(Worker thread) 관련 Property에 따른 성능 밴드 튜닝 (0) | 2023.09.05 |
버텍스 코어: HTTP 서버와 HTTP 요청 처리 (0) | 2022.04.17 |
버텍스 코어: TCP 서버 동시성 확장을 위한 배포 방법 (0) | 2022.03.14 |
도커(Docker) 환경에서 버텍스 앱을 컨테이너로 실행(Containerize) (0) | 2022.03.13 |