Session 이해하기 전에 이부분을 이해하면 Session에 접근하기 더 쉬울 것 같아서 정리하는 부분이댜~~
인터넷 웹 서비스는 클라이언트와 서버가 통신할 때 HTTP프로토콜을 사용한다.
HTTP는 비연결성(Connectionless)과 무상태(Stateless)로 동작하는 프로토콜이라서 이전 연결 때의 상태 정보를 서버가 유지해 주지 않는다.
그러므로 상태정보를 일정시간동안 지속해서 유지해주는 기술이 필요하다. 이러한 기술을 상태 정보 유지 기술이라고 하며 클라이언트 측에 저장하여 유지하는 기술과 서버측에 저장하여 유지하는 기술이 있다.
❓ '상태 정보 유지 기술'의 필요성
1. HTTP의 비연결성을 보완
2. 장바구니와 같이 여러 페이지로 이동하더라도 사용자 정보와 필요 정보 유지 필요
3. 페이지 간의 지속성 서비스를 제공하기 위한 기법
❓ HTTP의 비연결성
웹에서 클라이언트가 요청을 하면 서버는 응답을 한다. 한 페이지의 요청과 그 요청에 대한 응답이 있을 때만 클라이언트와 서버가 연결(Connection)될 뿐, 그 이후에는 연결이 자동으로 종료된다.
웹을 지원하는 HTTP 통신규약은 비연결 또는 무상태 특성을 지니기 때문이다.
❓ 무상태
웹에서 사용하는 HTTP 프로토콜의 통신 방식은 클라이언트로부터 요청이 있을 때마다 클라이언트와 서버가 매번 새롭게 연결하는 방식이다. 요청이 있을 때마다 연결 작업이 새롭게 이루어지고, 서버가 클라이언트에게 응답을 보내는 즉시 끊어진다. 이처럼 클라이언트와 서버 간에 연결상태가 유지되지 않는 통신 방식을 무상태라고 한다.
무상태 통신 방식은 한번 접속한 후 연결이 유지되지 않고 끊어지기 때문에 서비스를 요청한 클라이언트에 대한 정보가 유지되지 않는다. 즉, 클라이언트가 연속해서 서버에 정보를 요청하더라도 요청 단위로 연결이 맺어지기때문에 이전의 작업은 현재의 연결 작업과 아무런 관계가 없다. 그래서 클라이언트가 이전 요청에서의 처리결과를 계속해서 다른 요청에서도 사용하고 싶다면 서버 측이든 클라이언트 측이든 어딘가에 저장해서 정보를 유지해야 한다.
정보를 유지하지 않는 무상태 통신 방식은 다수의 사용자를 상대로 하는 인터넷에서 네트워크나 서버의 오버헤드를 줄일 수 있는 장점이 있다. 그러나 일련의 연속된 작업에서 이전 서비스 처리 결과를 계속해서 사용해야 할 필요가 발생하는데, 이럴 때 서버나 클라이언트 측에 이전의 처리 결과를 저장하여 유지하는 추가 작업을 하지 않으면 지속적인 서비스 처리가 어렵다는 단점도 있다.
서블릿, JSP도 HTTP 프로토콜 기반에서 동작하는 웹 프로그램이므로 무상태 특성을 피해갈 수 없다. 따라서 이전 요청에서 처리된 정보를 계속해서 사용하고 싶다면 반드시 클라이언트나 서버에 저장해서 유지해야 한다. 이처럼 클라이언트나 서버에 저장한 정보들을 '상태정보(State Information)'라고 한다.
❓ 정보를 저장하는 위치에 따라 상태 정보 유지 기술을 분류하기
1. 클라이언트 측에 저장하는 기술
웹에서 클라이언트는 웹 브라우저를 의미한다. 웹 브라우저에서 정보를 유지하는 기술에는 쿠키(Cookie)가 있다.
javax.servlet.http.Cookie(서블릿에서 쿠키 기능을 제공하는 객체)
2. 서버 측에 저장하는 기술
서버 측에 저장한다는 것은 서버의 힙 메모리 영역에 만들어진 객체에 상태 정보를 저장(등록)하는 것을 의미한다.
아래는 서블릿에서 서버측에 상태정보를 저장할 수 있는 객체
javax.servlet.ServletContext
javax.servlet.http.HttpSession
javax.servlet.http.HttpServletRequest
❓ 정보가 유지되는 기간에 따라 상태 정보 유지 기술을 분류하기
클라이언트나 서버 측에 저장된 정보들은 무한정 유지되는 것이 아니라 기간이 한정되어 있다.
1. 웹 애플리케이션 단위 유지
웹 애플리케이션 단위로 유지한다는 것은 웹 애플리케이션이 서비스되고 있는 동안 유지하는 것을 의미한다.
ServletContext 객체(javax.servlet.ServletContext)는 웹 애플리케이션 서비스가 시작될 때 생성되고 종료될 때 소멸된다. ServletContext 객체에 상태정보를 저장하면 웹 애플리케이션이 서비스되고 있는 동안은 계속해서 사용할 수 있다.
2. 클라이언트 단위 유지
클라이언트 단위로 유지한다는 것은 클라이언트별로 구분해서 상태 정보를 유지한다는 의미이다.
Cookie(javax.servlet.http.HttpSession, javax.servlet.http.Cookie)는 클라이언트 측에 상태정보를 유지하는 기술이어서 클라이언트 단위로 상태정보가 유지되어 사용되며, 서버측에서는 클라이언트별로 생성되는 HttpSession객체를 통해 클라이언트 단위로 상태정보를 유지할 수 있다.
3. 요청 단위 유지
요청단위로 유지한다는 것은 클라이언트의 서비스 요청단위로 유지한다는 것이다.
웹에서는 클라이언트로부터 요청이 있을 때마다 새로운 연결 작업이 이루어지며, 클라이언트로 응답이 이루어지면 연결은 바로 해제된다. 클라이언트로부터 요청이 들어오고 응답이 나가기까지 하나의 요청이다. 이렇게 하나의 요청에서만 상태정보를 유지하고자 할 때 HttpServletRequest 객체(javax.servlet.http.HttpServletRequest)를 통해서 할 수 있다.
'JSP' 카테고리의 다른 글
Cookie (0) | 2023.10.14 |
---|---|
Cookie & Session (0) | 2023.10.14 |
서블릿 컨테이너/서블릿 생명주기/HTTP규칙 (0) | 2023.10.11 |
서블릿 맵핑 방법 (2) | 2023.10.11 |
Servlet 실행순서 (1) | 2023.10.10 |