쿠키와 세션 사용 이유
쿠키와 세션의 이해를 돕기 위해 HTTP 특징을 먼저 살펴보겠습니다.
HTTP 프로토콜의 특징
1. Connectionless(비연결지향)
HTTP는 사용자가 Request(요청)를 서버에 보내면 서버는 클라이언트에게 Response를 주고 연결이 끊기는 특성이 있습니다.
2. Stateless(상태없음)
커넥션이 끊기는 순간 클라이언트와 서버의 통신은 완전 종료가 되며 상태 정보는 유지하지 않는 특성이 있습니다.
위와 같은 특징을 갖고 있기 때문에 서버의 리소스 낭비가 줄어드는 장점을 가지고 있지만, 이로 인하여 통신을 할때마다 서버는 클라이언트가 누구인지 인증을 계속해야 합니다. 즉, 로그인 후에 페이지를 이동하면 다시 로그인을 해야하는 상황이 발생할 수 있습니다.
하지만 위와 같은 Connetionless(비연결지향)과 Stateless(상태없음)를 보완해주며 서버가 클라이언트를 식별하게 해주는 것이 쿠키와 세션입니다.
쿠키(Cookie)
쿠키란, 사용자가 웹 사이트에 방문하였을때, 해당 사이트 서버에서 사용자의 컴퓨터(클라이언트 로컬)에 저장하는 작은 기록 정보 파일이며, HTTP에서 필요시 저장한 해당 정보(쿠키)를 참조하거나 재사용하여 사용합니다.
1. 쿠키는 클라이언트(브라우저) 로컬에 저장되며 (Key, Value) 형태로 구성되어 있습니다.
2. 쿠키는 사용자 인증이 유효한 시간을 명시 할 수 있으며, 유효 시간을 지정하면 브라우저를 끄더라도 인증이 유지되는 특징이 있습니다.
3. Response Header에 Set-Cookie 속성 사용하여 클라이언트에 쿠키를 만들 수 있습니다.
4. 클라이언트에 총 300개의 쿠키를 저장할 수 있습니다.
5. 하나의 도메인 당 20개의 쿠키를 가질 수 있습니다.
세션 쿠키 (Session Cookie) 와 지속 쿠키(Persistent Cookie)
세션 쿠키(Sesstion Cookie)란, 만료 날짜/시간을 지정한 쿠키를 말합니다.
세션 쿠키는 브라우저 메모리에 저장되므로 브라우저가 종료되면 쿠키는 사라지게 됩니다.
지속 쿠키(Persistent Cookie)란, 만료 날짜/시간을 지정하지 않아 항상 유지하는것으로 판단되는 쿠키를 말합니다.
지속 쿠키는 파일로 저장되므로 브라우저가 종료되어도 쿠키는 계속 남게 됩니다.
쿠키의 동작방식
1. 클라이언트가 브라우저에 접속하여 페이지를 Request(요청)
2. 서버에서 쿠키를 생성하여 HTTP에 쿠키를 포함하여 Response(응답)
3. 클라이언트가 서버에 재요청 시 응답 받은 쿠키 정보도 같이 HTTP 헤더에 담아서 Request(요청)
4. 서버에서 쿠키를 읽어 상태 정보를 변경할 필요가 있으면 쿠키를 업데이트하여 HTTP 헤더에 포함하여 Response(응답)
쿠키 사용 예제
1. ID 저장, 로그인 상태 유지
2. "오늘 더 이상 이 창을 보지않음" 체크
3. 쇼핑몰 사이트 장바구니
세션(Session)
쿠키를 기반하고 있지만, 사용자 정보 파일을 브라우저(클라이언트 로컬)에 저장하는 쿠키와 달리 서버 측에서 관리합니다.
1. 서버에서는 클라이언트를 구분하기 위해 세션 ID를 부여하며 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증상태를 유지합니다.
2. 클라이언트가 Request(요청)을 보내면, 해당 서버 엔진이 클라이언트에게 유일한 세션ID 값을 부여한다.
3. 사용자에 대한 정보를 서버에 저장하기에 쿠키보다 보안이 좋습니다.
4. 사용자가 많아질수록 서버 메모리를 많이 차지하게 됩니다.
세션의 동작방식
1. 클라이언트가 브라우저에 접속하여 페이지를 Request(요청)
2. 서버에서 세션에 클라이언트에 대한 데이터를 저장하고 이를 알 수 있는 세션ID를 생성하여 쿠키에 세션ID를 포함하여 Reponse(응답).
3. 클라이언트가 서버에 재요청 시 세션ID가 포함된 쿠키 정보도 같이 HTTP 헤덩 담아서 Requst(요청)
4. 서버에서 세션ID가 포함된 쿠키 값을 읽어 세션ID의 상태 파악 처리 후 Request(응답)
결과적으로, 세션을 통해 클라이언트의 정보는 서버에 두고 세션 아이디를 이용해서 인증받고 정보를 이용하는 방식입니다.
세션 사용 예제
1. 로그인 정보 유지
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
'프로그래밍 > Web Program' 카테고리의 다른 글
GET / POST (0) | 2022.03.05 |
---|---|
CSS 적용하는 방법 (0) | 2020.09.28 |
Substitution (0) | 2020.02.24 |
Output Cache (출력캐시) (0) | 2018.07.26 |