Network & AWS
[Cookie & Session]란 무엇인가
Haksae
2022. 1. 16. 15:39
1. Cookie란
HTTP 쿠키는 웹 쿠키, 브라우저 쿠키로도 불리는데 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각을 의미한다. 쿠키는 주로 세션 관리( 서버에서 관리하는 로그인 등의 정보를 의미한다. ), 개인 설정유지, 사용자 트래킹( 사용자의 행동을 기록하고 분석하는 것 ) 용도로 사용된다.
쿠키는 유닉스의 매직쿠키에서 이름과 개념이 유래하였고, 루 몬텔루라는 웹 브라우저 개발자가 웹 사이트에 접속한 클라이언트를 확인하기 위해 만들었다. HTTP 통신은 stateless 하기 때문에 클라이언트를 확인하기 위해서는 쿠키라는 개념이 따로 필요했기 때문이다.
HTTP의 stateless 란? statsless 라는 것은 번역하자면 상태가 없다는 뜻이다. H***TTP에서 stateless 하다는건 서버 입장에서 클라이언트의 상태가 없다는 의미로 동일한 클라이언트의 요청이라도 매번 각 요청은 독립적이라는 의미***이다.
2. Cookie의 특징
- 쿠키는 한개에 4KB 까지 저장 가능하며, 최대 300개 까지 저장할 수 있는 텍스트 파일이다.
- 쿠키는 클라이언트에 저장된다.
- 쿠키에는 이름, 값, 만료날짜, 경로 정보가 들어있다.
- 기본적으로 쿠키는 웹 브라우저가 종료되면 삭제된다. ( 만료날짜를 지정해 주면 만료일이 되야 삭제된다.)
- 웹 브라우저에 해당 서버의 쿠키 정보가 있으면 HTTP 요청 (HTTP 헤더의 Cookie)에 무조건 담아 보낸다.
3. Cookie의 작동 방식
- 쿠키도 결국 HTTP 통신에서 이루어지는 것이기 때문에 HTTP 의 응답과 요청에 따라 작동한다.
- 요청을 받은 서버에서 쿠키를 클라이언트(웹 브라우저)로 보내고 클라이언트는 쿠키를 받으면 도메인 서버 이름으로 정렬된 쿠키 디렉토리에 쿠키(정보)를 저장한다.
- 이후 클라이언트가 동일한 서버로 HTTP 요청을 보내면 저장된 쿠키도 같이 전송되며, 만약 서버에서 쿠키에 업데이트된 내용이 있으면 응답할 때 다시 업데이트된 쿠키를 보내준다.
4. Session이란?
Session은 통신을 하기 위해 서로 연결된 순간부터 통신을 마칠 때 까지의 기간을 의미한다. HTTP 세션이란 클라이이언트가 웹서버에 연결된 순간부터 웹 브라우저를 닫아 서버와의 HTTP 통신을 끝낼 때 까지의 기간을 의미한다.
하지만 보통 세션이라고 말할 때에는 서버에 세션에 대한 정보(세션 상태, 클라이언트 상태, 세션 데이터 등)를 저장해 놓고 세션 쿠키( 고유한 세션 ID 값 )를 클라이언트에게 주어 서버가 클라이언트를 식별할 수 있도록 하는 방식자체를 의미하는 경우가 많다.
5. Session의 특징
- 따로 용량의 제한이 없다. ( 서버의 능력에 따라 다를 수 있다. )
- 서버에 세션 객체를 생성하며 각 클라이언트 마다 고유한 세션 ID 값을 부여한다.
- 쿠키를 사용하여 세션 ID 값을 클라이언트에 보낸다.
- 웹 브라우저가 종료되면 세션 쿠키는 삭제된다.
6. Session의 작동방식
- 세션의 작동방식을 보면 우선 클라이언트가 서버에 요청을 보내면 서버에서는 요청헤더( Cookie )를 확인하고 세션 ID가 있는지 확인한다.
- 만약 요청에 세션 ID가 없다면 서버에서는 세션 ID를 생성한 뒤 응답을 보낼 때 쿠키에 세션 ID를 담아 보낸다. (서버에서는 이때 가장 먼저 세션 객체를 생성하여 정보를 저장한다.)
- 클라이언트는 응답에서 받은 세션 쿠키(세션 ID 값)를 저장해두고, 매번 해당 서버에 요청을 보낼 때마다 세션 쿠키를 함께 보내서 자신이 누구인지 인증한다. 세션 쿠키는 브라우저가 종료되면 삭제된다.
7. Cookie와 Session의 관계
- Session
- 서버에서 가지고있는 정보
- Cookie
- 서버에서 발급된 세션을 열기 위한 키 값(세션 ID 라고 칭함)
- 쿠키는 stateless한 HTTP 통신에서 클라이언트에게 정보를 주어 해당 클라이언트를 식별하기 위해 만들어졌다.
- 쿠키는 클라이언트에 정보를 저장하고, 세션은 서버에 정보를 저장하는 것. 그러나 세션도 쿠키를 이용하는 하나의 방식일 뿐이다.
- 쿠키는 보안에 취약하기 때문에, 세션을 통해서 중요한 정보는 서버에 저장하고 쿠키를 통해 클라이언트를 식별하는 방식으로 발전했다고 이해하면 좋을 듯
8. Cookie & Session의 장단점
장점
- 쿠키가 담긴 HTTP 요청이 도중에 노출되더라도 쿠키 자체(세션 ID) 는 유의미한 값을 갖고 있지 않습니다. 중요한 정보는 서버 세션에 존재합니다.
- 고유의 ID 값을 발급받습니다.쿠키 값을 받았을 때 일일이 회원정보를 확인할 필요 없이 바로 어떤 회원인지를 확인할 수 있어 서버의 자원에 접근하기 용이합니다.
단점
- 세션 하이재킹 공격이 가능할 수 있다.해결책은 HTTPS 를 사용해 요청 자체를 탈취해도 안의 정보를 읽기 힘들게 하거나, 세션에 유효시간을 부여할 수 있습니다.
- 서버에서 추가적인 저장공간이 필요합니다.서버에서 세션 저장소를 사용하므로 부하가 높아집니다.