본문 바로가기
Java 웹 프로그래밍

쿠키, 세션

by irerin07 2019. 1. 10.
728x90

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

서버가 허용하는 한 용량에 제한이 없음

 

 


728x90