-
[CS] 쿠키와 세션Computer Science/CS 2023. 9. 8. 14:20728x90
웹 환경에서는 클라이언트와 서버가 HTTP프로토콜을 이용해 통신합니다.
HTTP는 아래와 같은 특징을 가지기 때문에 쿠키와 세션을 사용합니다.
HTTP
Hyper Text Transfer Protocol
웹 상에서 웹 서버 및 웹 브라우저 상호 간의 데이터 전송을 위한 응용계층 프로토콜입니다.
요청 및 응답 메시지로 대응되는 구조로, 동작 형태가 클라이언트-서버 모델로 동작합니다.
1. Connectionless(비연결성)
클라이언트가 서버에 요청(Request)를 했을 때, 그 요청에 따른 응답(Response)를 보낸 후 연결을 끊는 처리방식입니다.
HTTP1.1버전에서는 커넥션을 계속 유지하고, 요청(Request)를 재활용하는 기능이 추가되었습니다.
HTTP Header에 Keep-alive옵션을 주어 커넥션을 재활용하게 합니다. HTTP1.1버전에선 디폴트옵션입니다.
2. Stateless프로토콜
커넥션을 끊는 순간 클라이언트와 서버의 통신이 끝나며 상태 정보는 유지하지 않는 특성이 있습니다.
클라이언트와 첫 번째 통신에서 데이터를 주고 받았어도, 두번째 통신에서 이전 데이터를 유지하지 않습니다.
정보가 유지되지 않으면, 매번 페이지를 이동할 때마다 로그인 정보가 사라져, 로그인을 다시 하거나 상품을 선택했는데 구매 페이지에서 선택한 상품의 정보가 없어지는 등의 일이 발생할 수 있습니다.
Stateful 경우를 대처하기 위해 쿠키와 세션을 사용합니다.
쿠키(Cookie)
쿠키는 클라이언트(로컬)에 저장되는 키와 값이 들어있는 작은 데이터 파일입니다.
클라이언트에 저장되어 필요 시 정보를 참조하거나 재사용할 수 있습니다.
- 쿠키 특징 1. 이름, 값, 만료일(저장기간), 경로 정보로 구성 2. 클라이언트에 총 300개의 쿠키 저장 3. 하나의 도메인 당 20개의 쿠키를 가짐 4. 하나의 쿠키는 4KB(4096byte)까지 저장 가능 - 쿠키 동작 순서 1. 클라이언트가 페이지를 요청(사용자가 웹사이트에 접근) 2. 웹 서버는 쿠키를 생성 3. 생성한 쿠키에 정보를 담아 HTTP 화면을 돌려줄때, 같이 클라이언트에게 돌려줌 4. 넘겨받은 쿠키는 클라이언트가 가지고 있다가(로컬PC에 저장)다시 서버에 요청할 떄 요청과 함께 쿠키를 전송 5. 동일 사이트 재방문 시 클라이언트의 PC에 해당 쿠키가 있는 경우, 요청 페이지와 함께 쿠키를 전송
세션(Session)
일정 시간 동안 같은 사용자(브라우저)로부터 들어오는 일련의 요구를 하나의 상태로 보고, 그 상태를 일정하게 유지시키는 기술입니다.
세션은 쿠키를 기반으로 하지만 쿠키와 다르게 서버 측에 저장하고 관리합니다.
서버는 세션 ID를 이용해 클라이언트를 구분하며, 웹 브라우저가 서버에 접속해 브라우저를 종료할 때까지 세션을 유지합니다.
-세션 특징 1. 웹 서버에 웹 컨테이너 상태를 유지하기 위한 정보 저장 2. 데이터가 웹 서버에 저장됨 3. 브라우저를 닫거나(세션 연결이 끊어질 경우), 서버에서 세션을 삭제했을 때만 삭제가 되므로, 쿠키보다 비교적 보안이 좋다. 4. 저장 데이터에 제한이 없다.(서버 용량이 허용하는 한에서) 5. 각 클라이언트에 고유 SessionID를 부여한다. SessionID로 클라이언트를 구분해 각 요구에 맞는 서비스 제공 -세션 동작 순서 1. 클라이언트가 페이지에 요청 2. 서버는 접근한 클라이언트의 Request-Header필드인 Cookie를 확인하여 클라이언트가 해당 session-id를 보냈는지 확인 3. session-id가 존재하지 않는다면 서버는 session-id를 생성해 클라이언트에게 넘김 4. 클라이언트는 서버로부터 받은 session-id를 쿠키에 저장 5. 클라이언트는 서버에 요청시 이 쿠키의 session-id 값을 같이 서버에 전달 6. 서버는 전달받은 session-id로 session에 있는 클라이언트 정보를 가지고 요청을 처리 후 응답
쿠키와 세션 차이
-사용자의 정보가 저장되는 위치로 쿠키는 클라이언트에 저장되지만 세션은 서버에 저장됩니다. 쿠키 - 클라이언트 세션 - 서버 - 보안 면에서 세션이 더 우수 쿠키는 클라이언트 로컬에 저장되기 때문에 변질되거나 Request에서 스니핑당할 우려가 있어 보안에 취약. (사용자의 주민번호 같은 민감 정보를 그대로 담아 HTTP요청 보냄 -> 이걸 스니핑 당하면 보안 취약) 세션은 쿠키를 이용해 session-id만 저장하고, 서버에서 처리하기 때문에 비교적 보안성이 높다. -속도 면에서 쿠키가 더 우수 쿠키는 쿠키에 정보가 있기 때문에 서버에 요청 시 속도가 빠르다. 세션은 정보가 서버에 있기 때문에 처리가 요구되어 비교적 속도가 느리다. -라이프사이클 쿠키: 만료기간이 있지만 파일로 저장되기 때문에 브라우저를 종료해도 정보가 유지될 수 있다. 만료기간을 따로 지정해 쿠키를 삭제할 때까지 유지할 수도 있다. 세션: 만료기간을 정할 수 있지만, 브라우저가 종료되면 만료기간에 상관없이 삭제된다.
캐시(Cache)
캐시는 웹페이지 요소를 저장하기 위한 임시 저장소이고,쿠키와 세션은 정보를 저장하기 위해 사용됩니다.
캐시는 웹페이지를 빠르게 랜더링할 수 있도록 도와주고, 쿠키와 세션은 사용자의 인증을 도와줍니다.
-이미지, 비디오, 오디오, css, js파일 등 데이터나 값을 미리 복사해 놓는 리소스 파일들의 임시 저장소 -저장 공간이 작고 비용이 비싼 대신 빠른 성능을 제공 -같은 웹 페이지에 접속할 때 사용자의 PC에서 로드하여 서버를 거치지 않아도 된다. -이전에 사용된 데이터가 다시 사용될 가능성이 많으면 캐시 서버에 있는 데이터를 사용 -> 다시 사용될 확률이 있는 데이터들이 빠르게 접근할 수 있다(페이지의 로딩 속도 빨라짐) -캐시 히트(hit) : 캐시를 사용할 수 있는 경우(이전에 왔던 요청이랑 같은 요청일때) -캐시 미스(Miss) : 캐시를 사용할 수 없는 경우(웹서버로 처음 요청했을 때)
728x90'Computer Science > CS' 카테고리의 다른 글
[CS] URI, URL, URN (0) 2023.12.04 [CS] EAI (0) 2023.10.08 [Network] TCP/IP, OSI 7 Layer, UDP (0) 2023.05.15 [CS] Gradle (0) 2023.03.03 [CS] 정규 표현식 Regular Expression, Regex (0) 2023.01.19