WWW는 비연결형 구조의 HTTP를 사용하기 때문에 페이지 요청과 응답이 완료되면 연결이 유지되지 않는다. 따라서 클라이언트가 다른 페이지를 요청할 때 부가적인 정보가 없다면 서버는 클라이언트의 현재 상태를 알 수 없기 때문에 처음 접속한 것과 마찬가지로 인식할 수밖에 없다.
이러한 문제를 해결하기 위해 사용하는 방법으로 URL rewriting, 쿠키, 세션이 있다.
HTTP의 Query String을 이용하는 방식으로 URL에 파라미터를 추가해 서버로 요청하는 형식이다. 이 방식은 정보 유지를 위해 파라미터를 매 페이지마다 확인하고 계속 추가해주어야 하며 복잡한 정보 유지는 어렵다는 문제점이 있다.
https://www.example.com/page/page?param1=value¶m2=value....
쿠키란 클라이언트에 저장되는 작은 정보를 의미한다. 서버의 요청에 의해 브라우저가 저장하게 되며 서버가 요청할 때 제공하는 형식이다. 쿠키의 특징은 다음과 같다.
name=value
형식이며 유효 기간, 요청 경로, 도메인 지정 등의 부가 속성을 포함한다.response.addCookie(new Cookie("name", "Hong Gil Dong"));
response.addCookie(new Cookie("tel", "010-1234-1234"));
response.addCookie(new Cookie("email", "gildong@naver.com"));
위의 코드는 HTTP 응답으로 클라이언트에 전달된다.
세션은 클라이언트가 웹 애플리케이션 서버에 접속할 때 서버 쪽에 생성되는 공간으로 내부적으로는 세션 아이디를 통해 참조된다. 즉 브라우저는 서버에 접속할 때 발급받은 세션 아이디를 기억하고 서버는 해당 세션 아이디로 할당된 영역에 접근하는 형식이다.
세션이라는 개념은 자바 웹 개발에만 있는 개념이 아니며 Scope Object 중 하나로 속성 관리와 함께 자바 웹 개발에서 중요한 개념이니 잘 알아둬야 한다.