Scope이란?
Web/Java (Spring+JSP)

Scope이란?

- Scope이란 무엇인가?

 => 웹 프로그래밍을 하다 보면 약속된 객체들이 어느 범위 까지 유지가 되는지 정할 필요가 있다.

 

 - 4가지 scope

  1) Application :  웹 어플리케이션이 시작되고 종료될 때까지 변수가 유지되는 경우 사용

  2) Session :  웹 브라우저 별로 변수가 관리되는 경우 사용 (세션 객체가 생성되어 소멸될 때까지 -> 여러개의 요청이 들어와도 남아 있다.)

  3) Request : http요청을 WAS가 받아서 웹 브라우저에게 응답할 때까지 변수가 유지되는 경우 사용

 -> 하나의 요청이 들어와서 응답이 나갈때 까지 유지된다.

  4) Page Scope: 페이지 내에서만 지역변수처럼 사용하고 유지된다.

 

 

1.  Page Scope

   - PageContext 추상 클래스를 사용한다. => JSP 내에서 pageContext라는 내장 객체로 사용 가능하다.

   - 다른 페이지로 forward(다음 페이지로 수행을 넘긴다)될 경우 Page Scope에서 지정된 변수는 사용 불가능하다.

   - 지역변수처럼 사용되는 것이 다른 Scope와는 다르다. => 다른 페이지로 넘어가면 메모리에서 사라지고 새로 생김.

   - pageScope에 값을 저장하고, 해당 값을 EL 표기법 등에 의해서 축약해서 사용할때 주로 쓴다. 해당 jsp나 서블릿이 실행되는 동안에만 정보를 유지하고자 할 때 사용.

 

 

2. Request Scope

   - http 요청을 WAS가 받아서 웹 브라우저에게 응답할 때 까지 변수값을 유지하고자 할 때 사용한다.

  => http 요청이 들어왔을 때 서블릿이 이를 받아서 수행하고, 이를 통해 도출된 값을 다른 서블릿이나 jsp로 forward할 때 등에서 사용됨.

   

   - 실행한 다음 응답이 나가면 해당 request/response 객체는 없어진다.

   - JSP에서는 request 내장 변수 사용한다.

    => 값을 저장할 때는 setAttribute(), 값을 읽어들일 때에는 getAttribute() 메소드를 사용한다.

    -forward 시 값을 유지하고자 할 때 사용한다.

 

 

3. Session Scope

  - 웹 브라우저 별로 변수를 관리하고자 할 때 사용한다. 

 => 각 클라이언트 (서버는 하나) 마다 하나의 객체를 만들어서 관리하는 게 세션 객체 이다. ( 상태 정보를 유지하기 위함)

 

  - 웹 브라우저의 탭 간에는 세션 정보가 공유되기 때문에, 각각 의 탭에서는 같은 세션정보를 사용할 수 있다.

  - JSP에서는 session 내장 변수를 사용한다. ( ex) 값 저장- session.setAttribute(), 값 읽어들임- session.getAttribute()..)

  - 서블릿에서는 HttpServletRequest의 getSession() 메소드를 사용하여 session객체를 얻는다.

  - 장바구니 처럼 사용자 별로 유지가 되어야 할 정보가 있을 때 사용한다. 

 => 응답을 주고받을 때 request 객체는 사라지지만, session은 일정한 시간 정도를 정해주면 그 시간동안 유지된다.

 

 

4. Application Scope

   - 웹 어플리케이션이 시작되고 종료될 때 까지 변수를 사용할 수 있다. 

=> 서버에서는 여러개의 웹 어플리케이션이 존재. 

  ex) shop/index, shop/mypage, shop/order.. 등등은 모두 shop이라는 웹 어플리케이션 안에 존재한다.

  

  - 어플리케이션당 딱 하나만 만들어지기 때문에 모든 클라이언트가 공통적으로 사용해야 할 값이 있을 때 사용한다.

  - jsp에서는 application 내장 객체를 이용한다.

  -servlet에서는 getServletContext() 메소드를 이용하여 application 객체를 이용한다.

  - 웹 어플리케이션 하나당 하나의 application 객체가 사용된다.