본문 바로가기
Record/boostcourse

[boostcourse] 2. 웹 백엔드 프로그래밍 기초 생각해보기 #5

by doongjun 2021. 7. 21.

#5 scope

 

1) 회사 관리 프로그램을 만듭니다. 회사 전체적으로 사용되는 특정 정보가 약 1메가 정도 있습니다.
이 정보는 자주 바뀌지 않고, 모든 사원들이 공통적으로 사용하는 코드입니다.
이러한 정보는 어떤 scope로 사용하는 것이 좋을까요?

자주 바뀌지 않고, 공통적으로 사용하기 때문에 애플리케이션 범위 내의

매개변수/속성을 모든 요청 및 세션에서 사용할 수 있는 Application Scope가 적당하다고 생각한다.

4가지 Scope

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

Session : 웹 브라우저 별로 변수가 관리되는 경우 사용

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

Page : 페이지 내에서 지역변수처럼 사용

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

2) page scope를 이용하여 사용되는 변수와 지역변수는 거의 유사합니다.
하지만, 앞으로 배울 EL과 JSTL을 이용할 경우에는 구분되어 사용될 경우가 발생합니다.
page scope가 지역변수와 유사하다고 하였는데요. 어떤 부분에서 유사할까요?

지역변수는 일정 구역{ } 안에 생성되어 그 구역에만 사용할 수 있고,

구역을 벗어나면 소멸하게 되는 특징을 가진 변수입니다.

page scope도 마찬가지로 일정 구역에서 생성되어 사용하고

forward가 될 경우 사용할 수 없게 되는 특징을 가졌으므로

지역변수와 유사하다고 할 수 있습니다.

 

3-1) 리다이렉트 될 경우에도 request scope를 이용하면 정보를 유지할 수 있을까요?

아니요.

 

3-2) 만약 정보를 유지할 수 없다면 이유가 무엇인가요?

redirect란 말 그대로 다시(re) 지시하는(direct) 것입니다.

예를 들어, 브라우저가 url1을 웹 서버에 요청했을때

서버는 HTTP 응답 메시지를 통해 "url2로 다시 요청하세요" 라고 브라우저에게 다른 url을 지시할 수 있습니다.

request의 경우 HTTP요청을 WAS가 받아서 웹 브라우저에게 응답할 때까지

변수가 유지되므로 리다이렉트를 했을때 정보는 유지되지 못할 것입니다.

 

4) session scope는 어떤 경우에 이용하는 것이 좋을까요?

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

로그인 정보를 유지해야 할 때 이용하는 것이 좋을 것 같습니다.

 

5) application scope에 List객체를 저장했습니다.
이 List 객체에 주기적으로 값이 저장은 되지만, 삭제는 되지 않고 있습니다.
이 경우에 어떤 문제가 발생할 수 있나요?

List를 구현하는 구현체에 따라 다양한 메모리 문제가 발생할 것 같습니다.

하지만 자바 애플리케이션의 메모리를 jvm 에서 관리하기 때문에

너무 많은 element가 List 구현체에 저장된다면 예외를 뱉어낼 것입니다.

 

댓글