daniel7481의 개발일지

[웹 프로그래밍(풀스택)] Scope - BE 본문

Naver Boostcourse

[웹 프로그래밍(풀스택)] Scope - BE

daniel7481 2022. 2. 13. 18:46
반응형

1. Scope이란?

웹 프로그래밍에선 이미 약속된 객체들이 존재하고, 그 존재들이 범위가 어디서부터 어떻게 되는지 알아야 한다. 이러한 범위(scope)이 4가지가 있다. 

출처 http://inheritingjava.blogspot.kr/2011/04/chapter-42-scope-of-javabeans-in-jsp.html

- Page Scope : 실제 서블릿, JSP 등의 선언된 한 페이지에서만 사용할 수 있는 것

- Request Scope : 클라가 요청하고 서버는 요청에 대한 응답을 보낸다. Reqeust Scope은 클라로부터 요청이 들어와 서버가 어떤 일을 수행해 응답을 보낼 때까지 사용할 수 있는 Scope(Forward할 때 서블릿1에서 서블릿 2로 보내는 Request 객체는 같았지만 두 서블릿의 Page 영역은 각각 달랐다.)

- Session Scope : 세션 객체가 생성되어 세션 객체가 소멸될 때까지. 앞의 Request Scope은 하나의 요청이 완료될 때까지라고 하면, Session Scope은 요청이 하나가 아니라 여러 개의 요청이 들어와도 계속 남아있는 Scope.

- Application Scope : 하나의 어플리케이션이 소멸될 때까지 유지하는 것.

2. Page Scope

- PageContext라는 추상 클래스를 사용한다.

- JSP 페이지에서 pageContext라는 내장 객체로 사용가능하다(JSP가 서블릿을 변환된 문서를 살펴보면 자동으로 선언된 다양한 객체 중에 pageContext가 선언된것을 확인할 수 있다).

- forward가 될 경우 해당 Page Scope에 지정된 변수는 사용할 수 없다. 클라가 서버에게 하나의 요청을 보낼 때, 요청을 받은 페이지 하나당 pageContext가 하나가 생기는 것이라고 생각하면 된다. 이 pageContext는 페이지가 이용될 때까지만 유효하다. forward는 1번 페이지에서 2번 페이지로 넘어가므로 1번 pageContext는 사라지고 새로운 것이 생기는 것이다. 반대로 Request 객체는 요청이 끝날 때까지 유지가 된다. Page Scope은 pageContext라는 내장 객체에 .setAttribute, .getAttribute으로 사용가능하다고 하다.

- Forward의 setAttribute, getAttribute와 같이 사용하면 된다.

- 다른 점은 page scope은 지역변수처럼 사용된다. 자주는 사용이 되지 않는다고 한다

- 다만 jsp에서 pageScope에 값을 저장한 후 해당 값을 EL 표기법 등에서 사용할 때 사용된다. 지역변수처럼 해당 Jsp나 서블릿이 실행되는 동안에만 정보를 유지하고자 할 떄 사용된다. 

3. Request Scope

- http 요청을 WAS가 받아서 웹 브라우저에게 응답할 때까지 변수값을 유지하고자 할 때 사용된다(ex: forward의 request 객체)

- Forward 과정에서 값을 맡겨놓고 넘겨주었을 때, 맡겨놓은 객체가 HttpServletRequest 객체이다.

- 모든 요청에 대하여 WAS는 reqeust response 객체를 만드는데, 이를 서비스 메서드의 인자로 넣어줬다. 응답이 나갈 때는 reqeust, response 객체는 사라진다. JSP에서는 request 내장 변수를 사용하고, 서블릿에서는HttpServletRequest 객체를 사용한다

- 값을 저장할 때는 request 객체의 setAttribute() 메소드를 사용한다

- 값을 읽어들일 때는 request 객체의 getAttribute() 메소드를 사용한다

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

- 앞에서 forward를 할 때 유지되는 값이 Request scope을 이용했다고 한다

4. Session Scope

- 웹 브라우저(클라이언트) 별로 변수를 관리하고자 할 때 사용한다. 클라이언트가 여러개 있을수도 있다. 이 클라이언트마다 하나의 객체를 만드는 것이 세션이다. 세션 객체는 상태 정보를 유지하고 위해서 사용되니, 각 클라이언트마다 세션 정보는 다르다. 

- 웹 브라우저간 텝(한 브라우저에서 여러 개의 사이트를 띄워놓을 때 각 창)간에는 세션정보가 공유되기 때문에, 각 탭에서는 같은 세션정보를 사용할 수 있다.

- HttpSession 인터페이스를 구현한 객체를 사용한다.

- JSP에서는 session으로 선언되어 있다.(session.setAttribute, session.getAttribute으로 이용하면 된다)

- 서블릿에서는 HttpServletRequest의 getSession() 메소드를이용하여 session 객체를 얻는다. 요청을 보낸 클라이언트에 대한 세션 정보를 얻어야하기 때문에 request에서 세션을 얻을 수 있는 메소드다.

- 값을 저장할 때는 setAttribute, 읽어들일 때는 getAttribute 메소드를 이용하면 된다.(모든 Scope이 다 같다)

- 장바구니처럼 사용자별로 유지가 되어야 할 정보가 있을 때 사용한다. 요청이 들어오고 응답이 된 후에도 세션 객체는 사라지지 않는다. 프로그래밍할 때 적당한 시간을 지정하거나 브라우저가 닫히게 될 때 없어진다.

- 상태 정보 유지를 나중에 배울건데 이 때 session scope이 사용된다고 한다.

5. Application Scope

- 우리가 실습을 할 때 사용했던 프로젝트 하나가 웹 어플리케이션이다. URL에서 localhost/firstweb이라고 나오는데 이 firstweb이 하나의 웹 어플리케이션이다. Application scope은 웹 어플리케이션이 시작되고 종료될 때까지 변수를 사용할 수 있다. 

- ServletContext 인터페이스를 구현한 객체를 사용한다.

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

- 서블릿의 경우는 getServletContext() 메소드를 이용하여 application 객체를 이용한다.

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

- 모든 클라이언트가 공통으로 사용해야할 값들이 있을 때 사용한다(중요!).

 

반응형