[Boostcourse] 풀스택/웹 프로그래밍(풀스택)

application scope { ServletContext }

Ben의 프로그램 2023. 7. 17. 19:54
728x90
수업목표
하나의 웹 어플리케이션에 공유하고 싶은 변수가 있을 때 application scope 를 사용합니다. 이번 시간에는 application scope 에 대해서 공부하겠습니다.

 

application scope 란 ?
우리가 흔히 웹 어플리케이션을 사용할 때 Client 가 있고 Server 가 있습니다. Server 에는 Web application 이 여러 개가 있을 수 있습니다. 이때 Web application 은 무엇일까요? 우리가 실습들을 여러개 만들어보았는데요. firstweb 이라는 프로젝트에 주로 작업을 했었는데요. 이 프로젝트 하나가 하나의 웹 어플리케이션이라고 생각하시면 됩니다. URL 을 보았을 때 localhost 밑에 first web 이 있었는데요. 그것이 하나의 웹 어플리케이션이라고 이해할 수 있습니다. 그런데 우리는 firstweb 말고 exam31 이라는 프로젝트도 만들었었는데요. 이처럼 하나의 서버에는 여러 개의 Web application 이 있을 수 있습니다. 이런 상황에서 application scope 란 하나의 web application 안에 있는 객체 하나라고 이해할 수 있습니다. application 영역은 application 당 하나당 하나만 생성이 되기 때문에 어떤 클라이언트가 이 web application 에 접근한다 하더라도 같은 application scope 에 접근하게 됩니다. 이런 특성 때문에 모든 클라이언트가 공통으로 사용해야할 값들이 있을 때 사용하게 됩니다. 

정리하자면
- 웹 어플케이션이 시작되고 종료될 때까지 변수를 사용할 수 있다.
- ServletContext 인터페이스를 구현한 객체를 사용한다
- jsp 에서는 application 내장 객체를 이용한다.
- 서블릿의 경우는 getServletContext 메서드를 이용하여 application 객체를 이용한다.
- 웹 어플리케이션 하나당 하나의 application 객체가 사용된다.
- 값을 저장할 때는 application 객체의 setAttribute 를 값을 읽어들일 때는 application 객체의 getAttribute 메서드를 사용한다. 

 

application scope 실습 
하나의 웹 어플리케이션에서 공유하고 싶은 변수가 있을때 application scope 를 사용합니다. 웹 어플리케이션 안에는 application scope 를 하나씩 쓸 수 있습니다. 예를 들어서 우리의 first web 이라는 어플리케이션이 있다고 가정해봅시다. 웹 어플리케이션은 가져야할 구조가 있고 정해진 위치에 있어야 하는 파일들이 있는데요. application scope 을 가리키는 객체가 하나가 있다고 생각해봅시다. Application01 서블릿이 하나 있고 Application 02 서블릿이 있고 applicationscope01.jsp 가 있다고 생각해봅시다. 우리가 실습에서 하고자 하는 것은 다음과 같습니다. ApplicationScope01 서블릿에서는 Application scope 로 "value" 에 1 값을 저장합니다. ApplicationScope02 에서는 Application scope 로 저장된 "value" 값에 1을 더한 후 결과를 출력합니다. applicationscope01.jsp 에서는 Application scope 로 저장된 "value" 값에 2를 더한 후 결과를 출력합니다. Application scope 는 웹 어플리케이션을 사용하는 모든 브라우저에서 같은 값을 사용하게 합니다. 크롬과 익스플로러를 활용해서 실제로 그런지 확인해보겠습니다

[ApplicationScope01]
ApplicationScope01 서블릿을 먼저 살펴보겠습니다. application scope 는 ServletContext 라는 객체인데요. getServletContext( ) 라는 메서드를 통해서 생성할 수 있습니다. 이 객체에 우리가 저장하고 싶은 값을 setAttribute 해주면 됩니다. 어떤 스코프던 같은 메서드인 setAttribute 와 getAttribute 를 사용하니까 매우 편리한 것을 볼 수 있습니다. 
그 다음 화면에서 바로 볼 수 있도록 html 코드를 추가해주었습니다. 

[ApplicationScope02]
코드를 작성했는데요. application scope 객체인 ServletContext 를 대입 받은 application 변수를 통해 getAttribute 메서드를 사용하여 담겨 있는 값을 꺼내왔습니다. 그런데 다음과 같은 경우를 생각해볼 수 있는데요. 만약 ApplicationScope02 가 먼저 실행되면 어떻게 될까요? 즉, application 변수 안에 가져올 값이 없겠죠. 이랬을 때는 null 값을 출력하게 됩니다. 그러니까 이 경우에는 exception 처리하는 것이 좋겠습니다. 
try catch 구문으로 nullpointerexception 을 처리해주었습니다. 

[ApplicationScope01.jsp]
JSP 는 내장 객체를 이미 갖고 있기 때문에 servletContext 를 얻어내서 사용할 필요는 없습니다. 바로 application 사용하면 됩니다. 2를 더하라고 했으니까 2를 더해줍니다. 또한 예외처리도 같이 진행해주었습니다. 이제 실제로 동작시켜 보겠습니다. 

[ApplicationScope01.jsp 실행]
application01.jsp 를 먼저 실행시켜 보았는데요. 위와 같이 예외 처리에 따라 구문이 출력된 것을 확인할 수 있습니다. 

[ApplicationScope02 서블릿 실행]
이번에는 ApplicationScope02 서블릿을 실행시켰습니다. 역시 예외 구문이 잘 출력되는 것을 볼 수 있습니다. 

[ApplicationScope01 서블릿 실행]
ApplicationScope01 서블릿을 실행시키니까 값이 잘 출력되는 것을 볼 수 있습니다. 이제 순차적으로 ApplicationScope02 와 applicationScope01.jsp 를 실행시켜 보겠습니다.

[ApplicationScope02 서블릿 실행]


[ApplicationScope01.jsp 실행]

이제 정상적으로 값이 출력되고 있는 것을 볼 수 있습니다. Applcation scope 영역에 값을 저장하여 여러 개의 웹 페이지에서 확인해보았습니다. 

 

 

 

 

 

 

 

출처 : boostcourse 웹 프로그래밍(풀스택) 
https://www.boostcourse.org/web316/lecture/20655?isDesc=false