Development/Spring

Spring의 4개의 저장소

우봉수 2023. 1. 19. 07:38

<기본 전제>

HTTP 특징 - 상태정보를 저장하지 않는다 (stateless) 

만약에 클라이언트가 로그인 후 다시 요청을 보낸다면
HTTP 특성상 로그인 정보를 저장하지 않기 때문에 같은 클라이언트가 보낸건지 알 수 없다.

따라서 상태정보를 저장해줄 저장소가 필요하다

 

공통적인 특징

Map 형태로 데이터가 저장되어 있음 - Key값: 속성(attribute)
접근 범위, 생존 기간 존재
setAttribute() 로 데이터를 쓰기(저장)
getAttribute() 로 데이터를 읽기(저장)
removeAttribute() 로 속성을 삭제 가능
getAttributeNames() 모든 속성의 이름을 반환
서로 간의 읽기 쓰기가 가능

 

pageContext 저장소

  • 유효범위: 1개 JSP 페이지
  • lv(지역변수) 저장
    • request
    • response
  • 접근 범위: 해당 jsp페이지 내부에서만 접근 가능
  • EL 에서 사용하기 위해서 lv(지역변수)를 저장하는 것
    • 문법: ${} 
  • 요청 할때 마다 초기화

 

application 저장소

  • 유효범위: context 전체
  • WebApp 전체에서 공유하고 접근이 가능한 저장소
    • 개별적인 id를 저장하기에는 좋은 저장소가 아님
  • 딱 1개만 존재
  • 어디에서나 접근이 가능
  • 전체 데이터 저장소

 

session 저장소

  • 유효범위: n개 JSP페이지
  • 클라이언트와 1대1로 대응한다.
    • 클라이언트가 로그인 하면 생성
    • 클라이언트가 로그아웃시 삭제
    • 문제점: 사용자 숫자 만큼 객체가 생기기 때문에 수가 많아짐
      • 서버 부담이 가장 큼
      • 따라서 최소한의 데이터만 저장
  • 개별 저장소
    • id, 장바구니
  • id pass 정보를 저장 하는 곳
  • 쿠키를 이용하여 클라이언트와 연결
  • 웹 페이지 들 간의 데이터를 전달할 때 가장 쉽다 (권장 x)-메모리 부담이 큼
    • 사용을 최소하는 것을 권장
    • 사용 하더라도 잠깐 저장하고 삭제하는 방식

 

request 저장소

  • 유효범위: 1개 이상 JSP페이지
  • 요청의 시작부터 응답까지. 다른 JSP로 전달(forward) 가능. 요청마다 1개
  • 클라이언트가 요청 할 때 마다 생성
  • 각각의 request 저장소는 서로 독립적
  • 웹 페이지 들 간의 데이터를 전달할 때 부담이 제일 적게 사용 가능 (최우선)