[JSP] 출력 버퍼와 응답

Jeini·2023년 4월 22일
0

🌐 JSP

목록 보기
7/24
post-thumbnail

💡 출력 buffer


JSP 페이지는 응답 결과를 곧바로 웹 브라우저에 전송하지 않는다.
대신 출력 버퍼(buffer)라고 불리는 곳에 임시로 응답 결과를 저장했다가 한 번에 웹 브라우저에 전송한다.

예를 들어, 큰 웹사이트를 보면 로드될 때 조금씩 조금씩 내려오는게 아니고 한번에 툭 떨어지고 툭떨어지고 그런식으로 완성된 걸 볼 수 있는데 서버로 부터 받는 출력버퍼가 그 만큼이라는 것이다. 한번 flush되고 또 flush된다는 것!

💡 출력버퍼는 response 바디 내에 있다.

✏️ JSP는 출력 내용을 버퍼에 저장한 후, 나중에 전송

📎 출력 버퍼의 장점

1. 데이터 전송 성능 향상
2. JSP 실행 도중에 버퍼를 비우고 새로운 내용 전송 가능
3. 첫 번째 버퍼가 다 차기 전까지 헤더 변경 가능

✅ 1 : 한 번에 큰 단위로 데이터를 전송하는 것이 가능하기 때문에 버퍼를 사용하면 성능이 향상된다.

✅ 2 : <jsp:forward> 기능과 에러 페이지 처리 기능이 가능하다.

JSP 페이지가 생성한 결과를 일단 버퍼에 저장하기 때문에, 버퍼에 보관된 데이터가 일정 크기가 될 때까지 웹 브라우저에 전송되는 데이터는 없다.
따라서, JSP 페이지가 생성한 내용이 있다 하더라도 버퍼에 저장된 데이터가 웹 브라우저로 전송되기 전까지는 버퍼에 보관된 데이터를 지우고 새로운 내용을 전송할 수 있다.

예를 들어, JSP 실행 과정에서 에러가 발생하면, 지금까지 생성한 내용을 버퍼에서 지우고 에러 화면을 출력할 수 있다.

✅ 3 : 헤더 정보라는 것은 라인 + 헤더를 의미한다. (사실상 헤더안에 라인이 있다.)

HTTP 프로토콜 구조상 응답 상태 코드와 함께 헤더 정보를 가장 먼저 웹 브라우저에 전송해야 한다. 이런 이유로, WAS는 처음 버퍼의 내용을 웹 브라우저로 전송하기 전에 헤더 정보를 먼저 전송한다. (응답코드: 200)

따라서 첫 번째 버퍼가 다 차서 보내지기 전까지는 헤더 정보를 변경하는 것이 가능하다.
첫 번째 버퍼가 보내지면 응답코드 200번이 전송되고 브라우저는 정상처리 됐다고 인지한다. 한번 응답코드를 받은 브라우저는 그 다음 버퍼가 전송되면 헤더를 읽지않고 바디를 읽는다. 그래서 첫 번째 버퍼가 보내지면(flush) 헤더 정보를 변경해도 적용되지 않게 된다.

💡 page 디렉티브에서 버퍼 설정하기


📎 buffer 속성

✔️ <%@ page buffer = "8kb" %>
: JSP 페이지가 사용할 버퍼를 설정할 수 있다.

  • JSP 페이지가 사용할 버퍼의 크기를 지정할 때 사용.
  • 기본적으로 8kb 를 가짐.
  • kb 단위로 버퍼의 크기 지정.
    ➡️ kb를 붙이지 않으면 JSP 페이지를 자바 코드로 변환하는 과정에서 에러가 발생한다.

⚒️ 버퍼의 동작 방식

버퍼가 다 차면 JSP 페이지는 버퍼의 내용을 웹 브라우저에 전송한 후 버퍼를 비우고 새롭게 버퍼에 내용을 채우기 시작한다.

✏️ 기본적으로 버퍼가 다 차면 자동으로 데이터를 전송한다.

3번 과정에서 (flush 과정) 출력 버퍼에 보관한 데이터를 웹 브라우저에 전송하는데, 그 전에 응답 코드와 응답 헤더를 먼저 전송한다. (라인 ➡️ 헤더 ➡️ 바디 ➡️ 버퍼)

📎 autoFlush

✔️ 버퍼가 다 찼을 때 어떻게 처리할지를 결정

  • true: 버퍼가 다 차면 버퍼를 flush하고 계속해서 작업을 진행한다.
  • false: 버퍼가 다 차면 익셉션을 발생시키고 작업을 중지한다. (버퍼 크기에 맞추겠다는 뜻)

false로 해서 버퍼가 다 차버리면 500번의 에러가 난다. (500번은 서버에서 의 에러)
JSP Buffer overflow ➡️ 1키로바이트 넘어서 예외가 뜬것.
그래서 false쓸 일이 거의 없다.

profile
Fill in my own colorful colors🎨

0개의 댓글