반응형
<%@ page contentType = "text/html; charset=UTF-8" %>
<%@ page buffer="8kb" autoFlush="false" %>
<%-- 8kb 가 default 값 , autoFlush가 false면 다 꽉차면 에러가 난다 default 값은 True
out 객체는 일단 버퍼에 저장후에 출력된다.
--%>
<html>
<head><title>버퍼 정보</title></head>
<body>

버퍼 크기: <%= out.getBufferSize() %> <br>
남은 크기: <%= out.getRemaining() %> <br>
auto flush: <%= out.isAutoFlush() %> <br>

</body>
</html>

JSP페이지는 결과를 곧바로 웹 브라우저에 전송하지 않고, 출력 버퍼에 임시로 출력 결과를 저장했다가

한번에 웹브라우저에 전송합니다.

 

그에 따른 여러 장점이 있습니다. 그 중 하나가 성능이 향상되는데,

그 이유는 한번에 큰 단위로 데이터를 전송하는 것이 가능하기 때문에

네트워크를 비롯한 모든 데이터 교환에서는 작은 단위를 여러 차례 보내는 것보다

큰단위로 한번에 묶어서 보내는 것이 더 높은 성능을 내기 때문입니다.

 

지시문으로 Buffer를 설정할 수 있는데요

<%@ page buffer="8kb" autoFlush="false" %>

 

page지시어의 속성 buffer로 크기를 설정할 수 있고 defualt는 8kb입니다.

autoFlush로 그 만큼 차게 되면 자동으로 출력하면서 내보내줄 수 있습니다.

 

하지만 위에는 JSP 페이지의 결과를 한 번에 출력할 수 있다고 이야기 했는데 왜 이런짓을 하나요?

만약 웹툰을 본다고 하면 웹툰 전체페이지가 다 전송될 때까지 기다렸다가 볼 수 있으면 그 시간동안 기다려야해요

근데 실질적으로 한번에가 아니라 순차적으로 보여지면서 계속 업로드되면서 우리는 앞에 있는 만화장면을 보잖아요

또한 영상도 한번에 다 전송시킬때까지 기다리는게 아니라 보면서 전송되는 형식이잖아요

이게 버퍼를 채우면 그걸 웹브라우저에 보이게 하는 겁니다.

 

out.getBufferSize()

버퍼의 크기가 얼마인지

 

out.getRemaining()

버퍼의 얼마나 찼는지 알 수 있습니다.

 

out.isAutoFlush()

자동적으로 비워주는지 알 수 있습니다.

<%@ page contentType = "text/html; charset=UTF-8" %>
<%@ page buffer="1kb" autoFlush="false" %>
<html>
<head><title>autoFlush 속성값 false 예제</title></head>
<body>

<%  for (int i = 0 ; i < 1000 ; i++) {   %>
1234
<%  }  %>

</body>
</html>

​만약 buffer가 꽉찼는데 자동적으로 안 비워주게 되면 버퍼 오버플로우라는 오류가 나옵니다.

 

<%@ page contentType = "text/html; charset=UTF-8" %>
<%@ page buffer="1kb" autoFlush="True" %>
<html>
<head><title>autoFlush 속성값 true 예제</title></head>
<body>

<%  for (int i = 0 ; i < 1000 ; i++) {   %>
1234
<%  }  %>

</body>
</html>

 

반응형