서블릿과 JSP(2) - 유효범위와 속성

BackEnd

서블릿과 JSP 

 

유효범위(scope)와 속성(attribute)

 

 

위 그림을 보면 HTTP 특징에 대해 말하고 있다

 

HTTP 특징 : 상태정보를 저장하지 않는다 영어로 말하면 Stateless

 

반대로 Stateful이라는 것이 존재하는데 상태정보를 저장한다 

 

우리는 4개의 저장소를 가지고 있는데 해당 저장소는

 

1. 접근범위 

2. 생존기간

 

2가지의 기준이 존재한다

 

그 저장소는 Map형태로 존재하는데 우리가 원하는 데이터를 Map안에 넣어주면 된다

 

앞서 저장소가 4개라고 말했는데 4개의 저장소와 유효범위 그리고 설명을 정리해보려고 한다

 

1. pageContext / 유효범위 : 1개의 JSP페이지 / 설명 : JSP페이지의 시작부터 끝까지. 해당 JSP 내부에서만 접근가능. 페이지당 1개

2. request / 유효범위 : 1개이상의 JSP페이지 / 설명 : 요청의 시작부터 응답까지. 다른 JSP로 전달 가능 (forward시킴) 요청마다 1개씩 

                                         * forward란? 우리가 휴대폰이 고장나서 고객센터에 전화하면

                                           해당 담당부서로 연결해주겠다고 하는 경우가 있는데 이게 forward라고 생각하면된다.

3. session / 유효범위 : n개 JSP페이지 / session의 시작부터 종료까지(로그인~로그아웃) 클라이어트마다 1개

4. application / 유효범위 : context전체 / Web Application의 시작부터 종료까지. context내부 어디서나 접근 가능 

                                                                 모든 클라이언트가 공유. context마다 1개 

 

 

4번 같은 경우 전체 어플리케이션에서 관리하기 때문에 

내가 로그인한 아이디가 aaaa인데 다른 유저가 bbbb로 로그인하면 겹치게 되기 때문에 이를 해겨랗기 위해

session이라는 개별저장소를 사용하면 된다 application은 공통저장소인 반면 session은 로그인한 클라이언트 1명당 1개씩 존재한다

 

key,value를 통해서 로그인한 사람의 아이디를 저장하게 된다

이게 가능한 것은 쿠키를 이용하기 때문이다 쿠키에 대해서는 나중에 다시 정리할 생각이다

 

로그인 시 개별저장소가 생겼다가 로그아웃하면 개별저장소를 사라지게 하면 된다 

 

이를 통해 아이디 뿐 아니라 사용자의 장바구니 등을 구현할 때도 쓸 수 있다 

 

하지만 이것도 문제가 있는데 사용자마다 1개씩 부여받기 때문에 사용자가 100만명이라면? 세션도 100만개가 되는 것이다 

최소한의 데이터만 세션에 저장하더라도 메모리 문제가 발생해서 세션저장소가 서버 부담이 가장 크다 

프로그래밍하기에는 세상 편하지만 서버부담이 제일 크다는 것을 알고 있어야한다 편리하다고 막쓰면 안된다

 

마지막으로 request저장소가 있다 

이것 또한 map으로 존재하고 하나의 jsp파일안에서 요청하고 응답할 때 사용하는데 

만약 1번 jsp가 요청을 받았는데 본인이 처리할 수 없어서 응답하지 않고 2번 jsp로 넘겨줘서 응답할 수 도 있는데

이를 포워딩이라고 한다 

 

보통은 request저장소가 하나의 jsp안에서 사용되고 끝나지만 

다른 jsp로 넘겨주게 될 때에도 request저장소를 활용 할 수 있다

 

가장 편한건 세션 하지만 사용자마다 1개씩 있기 때문에 부담이 제일 크다

가장 부담이 적은 것은 request이다 요청이 처리되는 동안만 존재한다 그래서 가장 부담이 적은 것

데이터를 다른 페이지로 전달할 때 가장 우선적으로 고려해야하는 것이 이 request라는 것이다

전달할 수 있는지 고려하고 불가능하면 session을 사용하면 된다

 

 

pageContext는 페이지 안에서만 사용되기 때문에 그닥 추천하지 않는다 el에서는 사용하지만 추천은 하지 않는다

 

속성관련 메서드로는 읽기, 쓰기, 삭제, 반환이 있는데

 

대표적으로 이렇게 정리할 수 있다

 

 

 

void setAttribute(String name, Object value) : 지정된 값(Value)를 지정된 속성 이름(name)으로 저장==(쓰기)

Object getAttribute(String name) : 지정된 이름(name)으로 저장된 속성의 값을 반환==(읽기)

void remove Attribute(String name) : 지정된 이름(name)의 속성을 삭제

Enumeration getAttributeNames() : 기본 객체에 저장된 모든 속성의 이름을 반환

 

getAttribute는 읽기 setAttribute는 쓰기 

 

 

 

 

 

'BackEnd' 카테고리의 다른 글

서블릿과 JSP(4) - JSTL(JSP Standard Tag Library)  (0) 2022.12.17
서블릿과 JSP-(3) URL 패턴  (0) 2022.12.17
서블릿과 JSP  (0) 2022.12.16
관심사의 분리, MVC 패턴 - 실습  (0) 2022.12.15
관심사의 분리, MVC 패턴 - 이론  (0) 2022.12.15