회사 업무로 JSP를 수정하며 운영서버에 배포하였으나,
몇몇 JSP에서 코드가 정상적으로 실행되지 않아 원인을 찾는데 상당히 애먹었다.
수정된 부분은 <% if ( ... ) %> 하나 추가되었어서 설마 출력버퍼 문제일 것이라고는 예상하지 못했다.
1. JSP 출력버퍼
JSP는 클라이언트 요청을 처리 후 화면에 출력하는 과정에 출력버퍼를 이용한다.
웹을 통한 데이터 교환은 작은 단위로 여러번 처리하는 것 보다는 큰 단위로 적은 횟수로 교환하는 것이
일반적으로는 더 이득이다. 즉, 버퍼를 사용하여 단번에 큰 데이터를 교환하면 성능향상을 기대할 수 있다.
2. JSP 버퍼 크기
JSP에 별도로 설정하지 않는다면 디폴트로 8kb 크기의 출력버퍼를 사용한다.
데이터 교환에 만약 8kb보다 큰 데이터를 버퍼에 쌓는 경우 8kb 초과된 만큼 잘리게 되어 화면에 원하는 결과가 나오지 않는다.
3. 해결방법
(1) 버퍼의 크기를 늘려준다.
<%@ page buffer="10kb" %>
(2) 버퍼를 사용하지 않는다.
<%@ page buffer="none" %>
해결방법 외로 버퍼가 초과된 경우 버퍼를 비우는 속성도 있다.
<%@ page buffer="10kb" autoFlush="true" %> // 초과시 자동으로 버퍼 비우기 (기본값)
<%@ page buffer="10kb" autoFlush="false" %> // 초과시 에러를 발생
만약 autoFlush 설정을 false 로 지정한다면 버퍼 초과시 Buffer Overflow 에러를 발생시킨다.
java.io.IOException: Error: JSP Buffer overflow
*** JSP 출력버퍼 잘 정리된 블로그
'SERVLET & JSP' 카테고리의 다른 글
JSP 스크립팅 (0) | 2022.08.29 |
---|