/* 본 게시물은 '쿠키와 세션이란? ' 의 내용을 토대로 작성되었습니다. */
참고 자료
기본적으로 쿠키와 세션은 http 프로토콜의 약점을 커버하기 위해서 존재한다. http 프로토콜은 다음과 같은 2가지 특성을 가지고 있다.
- Connectionless : 클라이언트가 request를 서버에 보내면, 서버는 클라이언트에게 response를 서로 접속을 끊는 특성이다.
- Stateless : 접속을 끊는 순간 클라이언트와 서버의 통신은 끝나고 상태 정보는 유지되지 않는 특성이다.
이 2가지 특성이 http의 장점이자 약점이다. 장점은 통신을 유지하고 있을 때 낭비되는 리소스를 줄인다는 것은 큰 장점이지만 동시에 약점이 존재한다.
약점은 통신을 할때마다 계속 내가 누구라는 인증을 계속해야한다. 예를 들어 네이버에 로그인을 하고 서비스를 이용할 때 서비스를 클릭해서 이동할 때 마다 로그인을 새로 다시해야한다. 즉, HTTP는 기본적으로 상태를 가지지 않는 특성을 지녔기 때문에 한 클라이언트가 2회의 API 호출을 했을 때에 같은 클라이언트가 호출했는지 여부를 구분할 수가 없다.
이러한 문제점을 쿠키와 세션을 사용해서 해결한다.
1. 쿠키(Cookie)
쿠키(Cookie)란?
- 쿠키는 클라이언트에 저장되는 키와 값이 들어있는 작은 데이터 파일이다.
- 쿠키는 이름, 값 만료 날짜(쿠키 저장기간), 경로 정보가 들어있다.
- 쿠키는 일정 시간 동안 데이터를 저장할 수 있어서 로그인 상태를 유지한다.
- 쿠키는 클라이언트의 상태 정보를 하드 디스크에 저장하였다가 필요할 때 참조, 재사용한다.
- 쿠키는 사용자가 요청하지 않아도 브라우저는 Request시에 Request Header에 넣어서 알아서 서버에 전송한다.
쿠키의 원리
- 클라이언트가 브라우저로 웹페이지 접속
- 클라이언트가 요청한 웹페이지를 전송받으면서 쿠키(클라이언트의 상태정보) 하드에 저장
- 클라이언트 재 방문시 웹페이지 요청과 함께 쿠키값도 전송
- 지속적으로 로그인 정보를 가지고 있는 것 처럼 사용
쿠키의 사용 예시
- 방문 사이트에서 아이디와 비밀번호를 저장하시겠습니까? -> 쿠키에 정보를 저장하겠다라는 뜻.
- 팝업이 나타날때 "오늘은 이 창을 보지 않음" 을 누르면 오늘 그 창이 뜨지 않는 것.
- 쇼핑몰에서 장바구니 같은 기능을 사용하는 경우 저장형태가 쿠키이다.
쿠키 제약 조건
- 클라이언트당 총 300개까지의 쿠키를 저장할 수 있다.
- 하나의 도메인당 20개의 값만 가질 수 있다. (20개 초과시 가정 적게 참조된 쿠키 삭제)
- 하나의 쿠키 값은 4MB까지 저장이 가능하다.
#모바일 앱에서는?
2. 세션(Session)
세션(Session)이란?
- 세션은 클라이언트와 웹서버 간 네트워크 연결이 지속 유지되고 있는 상태를 말한다.
- 즉, 사용자가 브라우저를 열어 서버에 접속한 뒤 접속을 종료할 때 시점 까지를 말한다.
- HTTP 프로포콜은 비접속형 프로토콜이므로, 매 접속시마다 새로운 네트워크 연결이 이루어지는데, 세션이 연결 유지를 가능하게 해준다.
- 클라이언트가 웹서버에 Request를 보내면, 해당 서버의 엔진이 클라이언트에게 유일한 ID를 부여하는데 이 ID를 세션이라고 부른다.
- 세션 ID는 임시로 저장하여 페이지 이동 시 이용하거나, 클라이언트가 재 접속 했을 때 클라이언트를 유일하게 구분하는 수단이다.
세션의 원리
- 세션 ID를 서버에서 클라이언트가 다시 웹사이트에 접속시 발급해준다.
- 서버에서 클라이언트로 발급해준 세션 ID를 쿠키를 사용해서 저장한다. (쿠키 이름은 JSEEIONID)
- 클라이언트는 다시 접속시, 이 쿠키를 이용해서 세션 ID 값을 서버에 전달한다.
세션의 단점
- 서버에 저장되는 세션 때문에 서버에 처리를 요구하는 부하와 저장 공간을 필요로 한다.
세션의 사용 예
- 로그인과 같이 보안상 중요한 작업은 세션을 통해서 작동한다.
3. 쿠키와 세션의 차이점
쿠키와 세션은 비슷한 역할을 한다. 동작원리 또한 비슷하다. 왜냐하면 세션도 결국 쿠키로 저장해서 사용하기 때문이다.
그러나 큰 차이점은 저장되는 위치이다. 쿠키는 클라이언트 하드에 저장되어서 보내는 역할을 하고, 세션은 서버에 저장되어서 클라이언트에게 알려줘서 사용한다. 쿠키는 서버의 자원을 전혀 사용하지 않는다. 클라이언트 단에서 저장을 해서 사용하기 때문이다. 세션은 서버에 저장되어서 그 고유한 ID를 가지고 있다. 그래서 서버의 자원을 사용한다.