//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)의 스코프를 설정하여 객체의 생명주기를 제어합니다. 주요 스코프는 다음과 같습니다:

  1. Singleton: 애플리케이션 전체에서 하나의 인스턴스만 생성.
  2. Prototype: 요청할 때마다 새로운 인스턴스 생성.
  3. Request: HTTP 요청마다 새로운 인스턴스 생성.
  4. Session: HTTP 세션마다 새로운 인스턴스 생성.
  5. 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

+ Recent posts