//1. request 가 유ㅎ효한 동안 존재 (reqeust ==> response => 소멸
request.setAttribute("company", "신한DS");
//2.Browser 가 최초 접속시 생성 sessionId 가 Browser 에 쿠키 저장
//쿠키에서 session id 를 delete 하거나 logout (session.invalidate) 하면 제거
HttpSession session = request.getSession();
session.setAttribute("company", "기업은행");
//3. 서버가 시자되면 생성 , 종료되면 소멸
ServletContext context = getServletContext();
context.setAttribute("company", "기업은행");
request.getRequestDispatcher("받을 jsp ").forward(request,response);
response.getWriter().append("<h1>ScopeTest Setting</h1>");
1..${requestScope.company}
2..${sessionScope.company}
3..${applicationScope.company}
웹 개발에서 **스코프(Scope)**는 주로 서버와 클라이언트 간의 데이터와 객체의 유효 범위를 정의합니다. Java 웹 개발에서는 Servlet, JSP, Spring Framework 등 다양한 기술에서 스코프를 다룹니다. 여기서는 Java 웹 애플리케이션을 중심으로 웹에서 쓰이는 주요 스코프를 설명하겠습니다.
1. 웹 애플리케이션의 주요 스코프
웹 애플리케이션에서 데이터와 객체를 저장하고 사용할 때, 스코프는 객체의 생명주기(lifespan)와 범위를 정의합니다. Java 웹 개발에서는 주로 아래 네 가지 스코프를 사용합니다:
1.1 Request Scope
- 정의: 하나의 HTTP 요청 동안 데이터를 저장합니다.
- 유효 범위: 해당 요청이 끝날 때까지 (예: 서버가 응답을 반환할 때까지) 유지됩니다.
- 용도:
- 요청마다 다른 데이터를 처리할 때 사용 (예: 폼 입력 데이터, 검색 결과 등).
- 요청 간 데이터가 공유되지 않아야 할 때 사용.
- 저장 방법:
- HttpServletRequest 객체에 데이터 저장
- JSP에서: <jsp:useBean scope="request" />
- 예시 (Servlet):
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setAttribute("message", "Hello, Request Scope!");
RequestDispatcher dispatcher = request.getRequestDispatcher("example.jsp");
dispatcher.forward(request, response); // message는 example.jsp에서만 유효
}
1.2 Session Scope
- 정의: 하나의 사용자 세션(session) 동안 데이터를 저장합니다.
- 유효 범위:
- 클라이언트와 서버 간의 세션이 유지되는 동안 (세션이 종료되거나, 명시적으로 무효화될 때까지).
- 용도:
- 사용자 로그인 정보, 장바구니 등 사용자별로 유지해야 할 데이터.
- 저장 방법:
- HttpSession 객체 사용
- JSP에서: <jsp:useBean scope="session" />
- 예시 (Servlet):
- 주의사항:
- 세션 데이터는 서버 메모리를 사용하므로, 많은 사용자 데이터를 저장하면 서버 부담이 커질 수 있습니다.
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession();
session.setAttribute("username", "JohnDoe"); // 세션에 데이터 저장
response.sendRedirect("dashboard.jsp"); // username은 모든 요청에서 유지됨
}
1.3 Application Scope
- 정의: 애플리케이션 전체에서 데이터를 저장합니다. 모든 사용자와 모든 요청이 공유합니다.
- 유효 범위:
- 애플리케이션 시작부터 종료될 때까지 유지됩니다.
- 서버 재시작 시 사라짐.
- 용도:
- 애플리케이션에서 공통으로 사용되는 데이터 (예: 설정 정보, 전체 방문자 수 등).
- 저장 방법:
- ServletContext 객체 사용
- JSP에서: <jsp:useBean scope="application" />
- 예시 (Servlet):
- 주의사항:
- 모든 사용자가 데이터를 공유하기 때문에, 동기화를 신경 써야 함.
@Override
public void init() throws ServletException {
getServletContext().setAttribute("appName", "My Web App");
}
1.4 Page Scope
- 정의: 하나의 JSP 페이지 내에서만 데이터를 저장합니다.
- 유효 범위:
- JSP 페이지의 실행이 끝날 때까지.
- 용도:
- 특정 JSP 페이지 내에서만 사용해야 하는 임시 데이터.
- 저장 방법:
- JSP에서: <jsp:useBean scope="page" />
- 예시 (JSP):
<jsp:useBean id="localBean" class="com.example.MyBean" scope="page" />
2. 주요 스코프 비교
스코프유효 범위유지 시간용도
Request | 현재 HTTP 요청 | 요청 처리 완료 시까지 | 요청별 데이터 (폼, 검색 결과 등). |
Session | 사용자 세션 | 세션 종료 시까지 | 로그인 정보, 사용자별 데이터. |
Application | 애플리케이션 전체 | 서버 종료 시까지 | 공통 데이터 (예: 설정, 방문자 수). |
Page | 현재 JSP 페이지 | 페이지 처리 완료 시까지 | 특정 JSP 내의 임시 데이터. |
3. 스코프 사용 예시
JSP에서 스코프 사용
<jsp:useBean id="user" class="com.example.User" scope="session" />
<%
user.setName("Alice");
%>
<p>Welcome, <%= user.getName() %>!</p>
Servlet에서 데이터 전달 (Request Scope)
request.setAttribute("error", "Invalid username or password.");
RequestDispatcher dispatcher = request.getRequestDispatcher("login.jsp");
dispatcher.forward(request, response);
4. Spring Framework에서의 스코프
Spring Framework에서는 빈(bean)의 스코프를 설정하여 객체의 생명주기를 제어합니다. 주요 스코프는 다음과 같습니다:
- Singleton: 애플리케이션 전체에서 하나의 인스턴스만 생성.
- Prototype: 요청할 때마다 새로운 인스턴스 생성.
- Request: HTTP 요청마다 새로운 인스턴스 생성.
- Session: HTTP 세션마다 새로운 인스턴스 생성.
- Application: ServletContext 범위에서 인스턴스 생성.
웹 개발에서 스코프를 이해하면 데이터의 유효 범위를 적절히 설정하고, 메모리 낭비를 방지하며, 성능을 최적화할 수 있습니다. 특정 상황에 맞는 스코프를 선택하여 데이터를 효율적으로 관리
'WEB' 카테고리의 다른 글
SQL Session Factory (0) | 2024.12.02 |
---|---|
이미지 파일저장 (0) | 2024.11.21 |
JSP INCLUDE (0) | 2024.11.21 |
서블릿 리스너 (0) | 2024.11.20 |
서블릿 filter 설명 (0) | 2024.11.20 |