JSP 쿠키, 세션, 에러 페이지, 액션 태그 정리
JSP 개발을 하면서 자주 사용하게 될 쿠키(Cookie)와 세션(Session), 에러 페이지 처리, JSP 액션 태그에 대해 살펴보겠습니다.
페이지 전환 시 많이 사용되는 forward와 sendRedirect의 차이점도 함께 정리해보았습니다.
현업에서 JSP/Servlet 기반으로 개발할 때 한 번씩 꼭 짚고 넘어가야 할 부분들이니, 참고하면 좋을 것 같습니다.
쿠키(Cookie) - Local
1) 개요
- HTTP 프로토콜은 요청-응답이 끝나면 웹 브라우저와의 연결을 끊습니다.
- 이렇게 상태가 유지되지 않는(Stateless) 특성을 보완하기 위해, 쿠키라는 방식을 사용합니다.
- 쿠키는 서버에서 생성되지만, 데이터는 클라이언트(Local) 측에 저장됩니다.
- 서버는 이후 요청 시 쿠키 값을 참조하거나 변경하여 사용자 상태 정보를 유지할 수 있음.
- 쿠키는 개당 4KB 용량 제한, 총 300개까지(약 1.2MB) 저장 가능.
- Chrome > 개발자 도구(Application) > Cookies에서 확인 가능.
2) 쿠키 문법 및 사용 방법
- 쿠키 객체 생성
Cookie cookie = new Cookie("쿠키이름", "쿠키값");
- 쿠키 속성 설정
cookie.setMaxAge(60 * 60); // 쿠키 유효시간: 1시간 cookie.setPath("/"); // 쿠키를 사용할 디렉토리 범위
- 쿠키를 응답 객체(response)에 담아서 전송
response.addCookie(cookie);
- 클라이언트(Local)에 쿠키가 저장
이후 클라이언트(브라우저)는 설정된 유효시간 동안 해당 쿠키를 서버로 전송
3) Cookie 객체 주요 메서드
- setMaxAge(int seconds): 쿠키의 유효 시간(초 단위) 설정
- getName(): 쿠키 이름 반환
- getValue(): 쿠키 값 반환
- setPath(String uri): 쿠키를 사용할 유효 디렉토리 설정
- setValue(String value): 쿠키의 값 설정
- setVersion(int v): 쿠키 버전 설정
- getMaxAge(): 쿠키 유효 기간 정보 반환
- getPath(): 쿠키 사용 경로 반환
- getVersion(): 쿠키 버전 반환
세션(Session) - Server
1) 개요
- 세션도 연결을 유지하기 위한 수단이지만, 쿠키와 달리 서버 측에 객체 형태로 존재
- 브라우저별로 고유한 세션 객체를 생성 (브라우저 창을 닫으면 세션 만료)
- 보안성이 뛰어나고, 저장 가능 데이터 용량에 큰 제약이 없음
- 서버가 생성한 세션 객체에 할당된 고유 ID를 쿠키에 저장하여, 브라우저에서 매 요청마다 서버로 전달
- JSP에서는 session 내장 객체, Servlet에서는 HttpSession 객체를 사용
- 기본 유효 시간: 30분 (가장 최근 요청 시점을 기준으로 연장 가능)
2) HttpSession 객체 주요 메서드
- setAttribute(String name, Object value) : 세션에 데이터 저장
- getAttribute(String name) : 세션으로부터 데이터 반환
- removeAttribute(String name) : 세션에서 특정 속성 제거
- invalidate() : 모든 세션 속성 제거(세션 무효화)
- setMaxInactiveInterval(int seconds) : 세션 유효시간 설정
- getMaxInactiveInterval() : 세션 유효시간(초 단위) 반환
- getAttributeNames() : 세션에 저장된 모든 속성 이름 반환
- getId() : 세션 ID 반환
- getCreationTime() : 세션 생성 시각 반환
- getLastAccessedTime() : 세션에 가장 마지막으로 접근한 시각 반환
쿠키 vs 세션
- 보안성:
- 쿠키(Cookie)는 데이터를 클라이언트 측(브라우저)에 저장 → 상대적으로 보안 취약
- 세션(Session)은 데이터를 서버 측에만 저장 → 보안 우수
- 데이터 제한:
- 쿠키는 개당 4KB, 최대 300개로 제한
- 세션은 서버 메모리에 의존하므로 상대적으로 제약이 적음
- 브라우저 차단:
- 쿠키는 사용자가 브라우저 설정에서 쿠키를 막을 수 있음
- 세션은 쿠키 차단 시에도 URL Rewriting 등을 통해 어느 정도 대안 가능(단, 구현이 번거로울 수 있음)
- 서버 확장성:
- 세션은 서버 자원을 사용 → 서버가 여러 대인 경우 세션 공유 작업 필요(세션 클러스터링)
- 쿠키는 도메인 기반으로 공유 가능 → 대형 포털 사이트(네이버, 구글 등)가 쿠키 방식을 선호
application 객체와 생명주기
application 객체
- 특정 웹 애플리케이션 전역에서 공유되는 객체
- 모든 JSP 페이지가 하나의 application 객체를 공유
- ServletContext 인터페이스로 접근 가능
JSP 주요 객체의 생명주기
- request: 사용자 요청이 발생할 때마다 생성, 응답이 완료되면 소멸
- session: 브라우저(사용자) 단위로 생성, 일정 시간 동안 유지 (기본 30분)
- application: **서버(WAS)**가 시작될 때 생성, 서버 중단(또는 앱 종료) 전까지 유지
예외 페이지 처리
1) 개요
- JSP/Servlet 실행 도중 **오류(예외)**가 발생하면, 기본적으로 톰캣이 제공하는 에러 화면이 나타남
- 사용자 친화적인 UI와 보안을 위해, 커스터마이징된 에러 페이지를 제공하는 것이 일반적
2) 주요 HTTP 응답 상태 코드
- 404 Not Found : 요청한 URL(리소스)이 존재하지 않음
- 500 Internal Server Error : 서버 내부 오류(주로 코드 버그, 예외 등)
- 200 OK : 요청 성공
- 307 Temporary Redirect : 임시 리다이렉트
- 400 Bad Request : 잘못된 요청 구문
- 405 Method Not Allowed : 허용되지 않은 요청 방식 (GET, POST 등)
- 503 Service Unavailable : 서버 일시적 과부하 또는 점검
3) 에러 페이지 우선순위
- page 지시자의 errorPage 속성으로 지정된 페이지
- web.xml에 지정된 **에러 타입(Exception)**별 페이지
- web.xml에 지정된 응답 상태 코드별 페이지
- 위 세 가지에 해당하지 않으면 톰캣 기본 에러 페이지 표시
4) 에러 처리 방법
- 직접 예외 처리
- try ~ catch 문으로 개발자가 직접 예외 처리를 구현
- 에러를 처리할 페이지 지정(지시자 활용)
- 에러가 발생할 가능성이 있는 JSP 페이지에서:
<%@ page errorPage="errorPage.jsp" %>
- 에러 페이지로 지정된 errorPage.jsp에서는:
<%@ page isErrorPage="true" %>
- isErrorPage="true" 설정 시, exception 내장 객체 사용 가능
- 에러가 발생할 가능성이 있는 JSP 페이지에서:
- web.xml을 통한 에러 페이지 지정
<error-page> <error-code>404</error-code> <location>/errorpage/error_404.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/errorpage/error_500.jsp</location> </error-page> <error-page> <exception-type>java.lang.NullPointerException</exception-type> <location>/errorpage/error_null.jsp</location> </error-page>
- error-code: 상태 코드별 페이지 지정
- exception-type: 예외 타입별 페이지 지정
JSP 액션태그(Action Tag)
- JSP 페이지 내에서 특정 동작을 지시하는 태그
- 주로 페이지 이동, 다른 페이지 삽입, 파라미터 전달, JavaBean 객체 활용 등에 사용
- 주요 액션 태그 종류:
- <jsp:forward> : 현재 페이지에서 다른 페이지로 전환
- <jsp:param> : forward나 include 태그로 데이터 전송할 때 사용 (name/value 속성)
- <jsp:useBean> : Java **클래스(Bean)**를 JSP 페이지에서 사용할 때 생성 및 연동
- <jsp:include> : 현재 JSP 페이지에 다른 페이지를 삽입
- <jsp:setProperty>, <jsp:getProperty> : JavaBean 속성 setter/getter 역할
<jsp:useBean id="user" class="com.example.User" scope="page" />
<jsp:setProperty name="user" property="userName" value="홍길동" />
<jsp:forward page="nextPage.jsp">
<jsp:param name="msg" value="안녕하세요" />
</jsp:forward>
forward vs sendRedirect
1) forward
- 요청 받은 request 객체를 **다른 페이지(컴포넌트)**에 그대로 넘겨줌
- 즉, 이전 요청 정보(파라미터, 속성 등)가 유지됨
- 처리 결과를 즉시 보여줄 필요가 있을 때 사용 (예: 게시판 글 제목 클릭 → 글 내용 즉시 표시)
- 사용 예시 (Servlet):
RequestDispatcher dispatcher = request.getRequestDispatcher("otherPage.jsp"); dispatcher.forward(request, response);
2) sendRedirect
- 기존 request 객체는 버려지고, 브라우저에게 새로운 요청을 하도록 리다이렉트
- URL이 바뀌며, 새로운 request 객체가 생성됨
- 예: 글 작성 완료 후, 게시판 목록으로 다시 이동 시킬 때
response.sendRedirect("list.jsp");
- POST/Redirect/GET 패턴 등에서 자주 사용 (중복 폼 전송 방지)
- 쿠키(Cookie): 클라이언트(Local) 저장, 용량 제한, 상대적으로 보안 취약
- 세션(Session): 서버 저장, 보안성 우수, 서버 부담 증가 가능
- 에러 페이지: 톰캣 기본 페이지 대신, 사용자 친화적인 페이지로 커스터마이징
- JSP 액션태그: JSP 내에서 페이지 이동, 삽입, Bean 연동 등에 활용
- forward vs sendRedirect: 요청 객체 유지 vs 새로운 요청 생성
실무에서 MVC 패턴을 적용해 JSP와 Servlet을 함께 다루다 보면 반드시 알아야 할 개념들이니, 꼭 기억해두면 좋겠습니다. (제가)
'🗄️ Backend > JSP' 카테고리의 다른 글
JSP와 Servlet 기초 정리 - 입사 전 리마인드 (0) | 2025.02.13 |
---|---|
JSP와 MyBatis (4) | 2024.10.18 |
JSP와 MVC2 패턴 (1) | 2024.10.18 |
JSP와 MVC 패턴: DAO/DTO, 커넥션 풀, EL, JSTL (1) | 2024.10.18 |
쿠키(Cookie)와 세션(Session) 완벽 가이드 (0) | 2024.10.18 |