Session과 Cookie
HTTP 프로토콜은 Connectless, Stateless의 특징이 있다.
즉, 연결을 유지하지 않고 이로인해 상태 정보를 가질 수 없다는 특징이다.
이러한 HTTP 프로토콜의 특성은 장점이자 단점이 되는데 단점을 커버하고자 쿠키와 세션이 사용된다.
1. Cookie
1.1. Cookie
- 쿠키는 상태 관리를 위해 사용되는 작은 파일로 상태를 저장하는 위치는 Client(브라우저)이다.
- 쿠키는 key-value 형태의 데이터들로 이름, 값, 만료날짜 등의 정보가 있다.
- 쿠키 크기는 4kb로 제한된다.
- 하나의 도메인당 20개까지 제한된다.
- 모든 도메인을 통틀어 300개로 제한된다. 만약 이 범위를 넘어서면 오래된 쿠키부터 지운다.
1.2. Cookie 원리
로그인이 유지되는 것도 쿠키를 이용한 것이다.
- 브라우저를 통해 웹페이지에 접속한다.
- 서버는 쿠키를 설정해 Client(브라우저)에게 응답한다. (Response Header에 Set-Cookie 속성을 사용)
- 브라우저는 쿠키를 메모리에 저장한다.
- 이후 웹페이지 접속 시 Request에 쿠키를 함께 전송한다.
- 서버는 Client로 부터 전달된 쿠키를 통해 상태 관리를 할 수 있게된다.
1.3. Coockie 사용 예
- 쇼핑몰 장바구니
- 해당 사이트의 사용자 언어 설정 및 기타 정보
- 팝업 “오늘 더 이상 이 창을 보지 않습니다.”
- 로그인 정보 (세션을 사용하여)
2. Session
로그인과 같은 보안상 중요한 작업은 세션을 통해 이뤄진다.
2.1. Session
- 세션은 Client-Server 간 연결이 유지되고 있는 상태를 말한다.
- Client가 Request를 보내면 서버는 유일한 ID를 생성하여 이 값을 반환하는데 이 값이 세션이다.
2.2. Session 원리
- 브라우저가 웹페이지에 접속한다.
- 서버는 세션 ID를 만들고, 그 값을 내부적으로 관리한다.
- 생성한 세션ID는 쿠키를 이용해 리턴한다. (쿠키 이름은 JSESSIONID)
- 브라우저는 재접속시 이 쿠키(JSESSIONID)를 이용해 세션 ID를 서버에 전달한다.
- 서버는 세션ID를 통해 유일한 Client를 구분할 수 있게된다.
2.3. Session의 장단점
- 세션을 통해 서버는 접속한 Client를 유일하게 구별할 수 있고, 클라이언트를 구별해야 하는 정보를 서버에서 관리할 수 있게 된다.
- 정보 저장이 서버에서 이뤄지므로 쿠키만 사용하는것보다 보안에 안전하다. (쿠키는 클라이언트가 관리하는것. 세션은 서버에서 관리하는것)
- 세션에 따라서 부가 정보를 서버가 관리하므로 서버 부하가 커진다. (쿠키보다 느리다.)
- 쿠키는 클라이언트 로컬에 저장되기 때문에 변질되거나 request에서 스니핑 당할 우려가 있어서 보안에 취약하지만 세션은 쿠키를 이용해 sessionId만 저장하고 실제로 이걸로 처리하는 작업은 서버에서 하기 때문에 보안에 더 안전하다.
[참고 문서]
댓글남기기