HTTP 특징
- 클라이언트-서버 구조
- 클라이언트는 서버에 요청 / 서버는 결과로 응답
- 클라이언트는 UI 그리는 것에 집중, 서버는 비즈니스 로직
stateless
, connectionless
무상태, 비연결성
- HTTP 메시지
- 단순함, 확장 가능
stateless
stateful
서버가 클라이언트의 이전 상태를 보존한다는 의미
- 유지해야하기 때문에 같은 서버가 계속 유지되어야 한다.
stateless
반대로 상태를 보존하지 않는다
- 클라이언트의 요청에 어느 서버가 응답해도 상관이 없음.
- 서버 증설이 쉽다
Connectionless
클라이언트가 서버에 요청하고 응답을 받으면 연결을 끊는 것
서버의 자원을 효율적으로 관리하고 많은 클라이언트의 요청에 대응할 수 있다.
한계
연결/해제에 대한 오버헤드가 발생한다.
해결
HTTP 지속 연결 - 일정 시간 사용하지 않을 시 연결 해제
세션 트래킹
stateless인 HTTP 프로토콜에서 웹페이지들을 연결하기 위한 기능
hidden 태그
와 URL Rewriting
- 웹 페이지가 많을 시 정보를 계속 전송해야한다
쿠키
세션
쿠키
웹 페이지 사이 공유 정보를 클라이언트 PC에 저장해 놓고 필요할 때 사용할 수 있게 하는 매개 역할
- 저장 용량 제한
- 보안 취약
- 클라이언트 브라우저에서 사용 유무 설정 가능
- 도메인당 쿠키가 만들어짐
Persistence Cookie
클라이언트에 파일로 정보를 저장하는 기능
- 쿠키를 삭제하거나 설정 값 종료 시 소멸
- 최초 접속 시 서버로 전성
- 로그인 유무, 팝업창 제한 등등
Session Cookie
브라우저 메모리에 생성
- 최초 접속 시 서버로 전송되지 않음
- 사이트 접속 시 Session 인증 정보 유지
- Session 기능과 같이 사용됨
쿠키 기능 실행 과정
- 브라우저로 사이트 접속
- 서버가 정보 저장 쿠키 생성 후 브라우저로 전송
- 브라우저는 서버가 보낸 쿠키 저장
- 재접속 시 서버가 브라우저에게 쿠키 전송 요청
- 브라우저가 쿠키 정보를 서버에 넘겨주고 서버는 넘겨받은 정보로 작업
쿠키 API
HttpServletResponse
의 addCookie()
브라우저에 쿠키 전송 후 저장
HttpServletRequest
의 getCookie()
쿠키를 서버로 가져오기
javax.servlet.http.Cookie
setMaxAge()
유효기간 설정 메소드
- 해당 메소드의 인자에 따라 Persistence, Session 쿠키 종류 결정
세션
웹페이지 사이 공유 정보를 서버에 저장해 두고 웹 페이지들을 매개해주는 방법 서버의 메모리에 생성되어 정보 저장
특징
- 브라우저 세션 연동은 세션 쿠키 사용
- 쿠키보다 보안에 유리
- 브라우저당 하나의 세션 생성
- 유효 시간을 가짐
세션 기능 실행과정
- 브라우저로 사이트 접속
- 서버는 브라우저에 대한 세션 객체 생성
- 생성된 세션 ID 클라이언트 브라우저에 응답
- 브라우저는 서버로 받은 ID를 브라우저가 사용하는 메모리의 세션 쿠키에 저장
- 브라우저가 재접속 하면 세션 쿠키에 저장된 세션 ID 전달
- 서버는 세션 ID를 통해 해당 세션에 접근해 작업
세션 API
HttpServletRequest
의 getSession()
메소드 호출해서 생성