HTTP 프로토콜
- 비연결지향
n 클라이언트가 먼저 요청을 보내면 서버는 요청에 맞는 응답을 한 뒤 접속을 끊는다.
u http1.1 버전부터는 keep-alive라는 값을 줘서 연결을 유지 할 수 있다. 다만 비연결지향의 연결 비용 절감이 큰 장점이기에 비연결지향을 디폴트로 둔다.
- 상태 정보 비유지
n 연결을 끊는 순간 클라이언트와 서버의 통신이 끝나며 상태 정보는 유지하지 않는다.
- 이 두가지 특성을 보완하기 위해 쿠키와 세션을 사용한다.
n 비연결지향 & 상태 정보 비유지 -> 통신을 할 때마다 새로 커넥션을 열기 때문에 클라이언트는 매번 내가 누구인지 인증을 계속 해야한다.
n 페이지를 옮겨 다닐 때마다 로그인을 다시 해줘야 한다.
쿠키
- 구성요소
n 이름 – 각각의 쿠키를 구별하는데 사용되는 이름
n 값 – 쿠키의 이름과 관련된 값
n 유효기간 – 쿠키의 유지 시간
n 도메인 – 쿠키를 전송 할 도메인
n 경로 – 쿠키를 전송 할 요청 경로
- 클라이언트 로컬에 저장되는 작은 파일
n 웹 사이트에 접속할 때 생성되는 상태 정보를 담는 임시 파일
n 키와 값이 들어있다.
n 일정 시간 동안 데이터를 저장 할 수 있어서 로그인 상태를 유지할 수 있다.
n 클라이언트의 매 요청 마다 웹 브라우저로부터 서버에게 전송되는 정보 패킷의 일종
n 위/변조의 위험이 있다.
n 클라이언트에 총 300개의 쿠키 저장 가능
n 도메인 당 20개의 값을 가질 수 있다.
u 쿠키 값이 20개를 초과하면 가장 적게 사용된 쿠키부터 삭제
n 쿠키는 4kb까지 저장 가능
- 동작 방식
n 클라이언트가 페이지 요청
n 서버에서 쿠키를 생성
n HTTP헤더에 쿠키를 포함 시켜 응답
n 브라우저가 종료 되어도 쿠키 만료 기간이 있다면 클라이언트에서 보관
n 같은 요청을 할 경우 HTTP 헤더에 쿠키를 함께 보냄
n 서버에서 쿠키를 읽어 이전 상태 정보를 변경 할 필요가 있을 때 쿠키를 업데이트 하여 변경 된 쿠키를 HTTP헤더에 포함시켜 응답
세션
- 브라우저를 통해 웹 서버에 접속한 이후로 브라우저를 종료할 때 까지 네트워크 연결이 유지되는 상태
- 사용자가 브라우저를 열어 서버에 접속한 뒤 접속을 종료할 때까지의 시점
- HTTP 프로토콜은 비접속형 프로토콜이므로, 매 접속 시마다 새로운 네트워크 연결이 이루어지는데, 세션이 연결 유지를 가능하게 해줍니다
- 클라이언트가 웹 서버에 Request를 보내면, 해당 서버의 JSP 혹은 ASP 엔진이 클라이언트에게 유일한 ID를 부여하는데, 이 ID를 세션이라고 부릅니다.
- 세션 ID는 임시로 저장하여 페이지 이동 시 이용하거나, 클라이언트가 재 접속 했을 때 클라이언트를 유일하게 구분하는 수단이 됩니다.
- 세션의 장점
n 각각의 클라이언트마다 고유의 ID를 부여
n 세션 객체 마다 저장해 둔 데이터를 이용하여 서로 다른 클라이언트의 요구에 맞게 서비스 제공
n 클라이언트 자신만의 고유한 페이지를 열어놓아서 생길 수 있는 보안상의 문제 해결 용이
- 단점
n 서버에 저장되는 세션 때문에 서버에 처리를 요구하는 부하와 저장 공간을 필요로 한다.
- 동작 방식
n 클라이언트가 서버에 접속시 세션 ID 발급
n 서버에서는 클라이언트로 발급해 준 세션 ID를 쿠키를 사용해 저장(JSESSIONID)
n 클라이언트에서 다시 요청을 할 때 세션 id 값을 서버에 전달하면, 서버에서 id를 통해 client의 상태 정보를 가져옴
u 즉 세션을 구별하기 위해 ID가 필요하고 해당 ID만 쿠키를 사용해 저장
u 쿠키는 자동으로 서버로 전송이 되기 때문에 서버에서 세션ID에 따른 처리를 할 수 있다.
차이점
- 저장 위치
n 쿠키는 클라이언트에 파일로, 세션은 서버에 저장
- 보안
n 쿠키는 클라이언트에 로컬로 저장되기 때문에 변질되거나 request에서 스나이핑 당할수도 있다.
n 세션은 쿠키를 이용해 sessionid만 저장하고 sessionid로 구분해서 서버에서 처리. 비교적 보안성이 좋다.
- 라이프 사이클
n 쿠키도 만료 시간이 있지만 클라이언트에 파일로 저장되기 때문에 브라우저를 종료해도 계속해서 정보가 남아있다. 또한 만료 기간을 설정하는 것도 가능.
n 만료 시간을 정할 수 있지만 브라우저가 종료되면 만료 기간에 상관 없이 삭제.
- 속도
n 클라이언트에 정보가 있기 때문에 서버에 요청 시 속도가 빠르다.
n 세션은 정보가 서버에 있기 때문에 처리가 요구되고 비교적 느리다.
왜 쿠키를 사용하는 걸까?
- 세션은 서버의 자원을 사용하기 때문에 무분별하게 만들면 서버의 메모리가 감당 할 수 없어진다.
캐시?
캐시는 이미지나 css, js파일 등이 사용자의 브라우저에 저장되는 것이다.
구분 |
쿠키 |
세션 |
저장 위치 |
클라이언트 |
서버 |
저장 형식 |
텍스트 |
Object |
종료시점 |
쿠키 저장 시 설정 (default: 브라우저 종료 시 소멸) |
설정에 따라 다르지만 기본값은 브라우저 종료시 |
자원 |
클라이언트의 자원 |
서버의 자원 |
용량 제한 |
도메인당 20개, 쿠키 하나당 4kb 300개 |
서버가 허용하는 한 용량에 제한이 없음 |
'Java 웹 프로그래밍' 카테고리의 다른 글
JDBC MySQL 5.1.23 이상 사용시 time zone 관련 에러 발생 시 해결 방법 (2) | 2019.01.12 |
---|---|
forward redirect (0) | 2019.01.10 |
JAVA IO - 깔끔하게 정리 필요 (0) | 2018.12.27 |
1218 강의 - 요약필요 (0) | 2018.12.27 |
1217 강의 - 정리, 요약 필요 (0) | 2018.12.27 |