본문 바로가기

이것저것 스터디📚/CS 스터디

쿠키와 세션

- HTTP는 Connectionless(비연결지향)과 Stateless(상태 비유지)의 특징을 갖는다.

- 하지만, HTTP 통신을 할 때 실제로 데이터 유지가 필요한 경우(로그인 상태와 같은 상태 유지 필요)가 있고 이때 쿠키와 세션을 사용한다.

 

쿠키(Cookie)

* 쿠키란?

- 쿠키는 클라이언트(브라우저) 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일이다.

- 사용자 인증이 유효한 시간을 명시할 수 있으며, 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지된다는 특징이 있다.

- 쿠키는 클라이언트의 상태 정보를 로컬에 저장했다가 참조한다.

- 쿠키는 사용자가 따로 요청하지 않아도 브라우저가 Request시 Request Header를 넣어서 자동으로 서버에 전송한다.

 

* 쿠키 구성요소

- 이름 : 각각의 쿠키를 구별하는 데 사용되는 이름

- 값 : 쿠키의 이름과 관련된 값

- 유효시간 : 쿠키의 유지시간

- 도메인 : 쿠키를 전송할 도메인

- 경로 : 쿠키를 전송할 요청 경로

 

* 쿠키의 동작방식

- 클라이언트가 페이지를 요청

- 서버에서 쿠키를 생성

- HTTP 헤더에 쿠키를 포함 시켜서 응답

- 클라이언트(브라우저)는 쿠키를 보관(브라우저가 종료되어도 쿠키 만료 기간이 있다면 클라이언트는 쿠키를 보관한다)

- 같은 요청을 할 경우 HTTP 헤더에 쿠키를 함께 보냄

- 서버에서 쿠키를 읽어 이전 상태 정보를 변경할 필요가 있을 때 쿠키를 업데이트 하여 변경된 쿠키를 HTTP 헤더에 포함시켜 응답

 

* 쿠키의 사용 예시
1. 장바구니에 상품 추가
 - 사용자가 온라인 쇼핑 웹 사이트를 방문하여 상품을 장바구니에 추가한다.
 - 서버는 이러한 장바구니 정보를 사용자별로 추적하려고 한다.

2. 쿠키 생성
- 서버는 사용자의 장바구니에 대한 정보를 담은 쿠키를 생성한다.
 - 이 쿠키에는 장바구니에 추가된 상품의 식별자(ID)나 수량 등의 정보가 포함된다.

3. 장바구니 페이지 접속
 - 사용자가 장바구니 페이지로 이동하려고 하면, 브라우저는 이전에 설정된 장바구니 쿠키를 서버에 함께 전송한다.

4. 장바구니 정보 업데이트
 - 서버는 클라이언트로부터 받은 쿠키를 통해 사용자의 장바구니 정보를 식별하고, 해당 정보를 화면에 표시한다.
 - 사용자가 추가하거나 삭제하는 상품을 식별하여 쿠키를 업데이트 한다.

5. 주문 및 결제
- 사용자가 장바구니에 담긴 상품을 주문하고 결제를 진행하면, 서버는 쿠키를 통해 장바구니 정보를 확인하고 주문을 처리한다.

6. 세션 유지
 - 쿠키를 사용하면 사용자가 브라우저를 닫아도 장바구니 정보를 계속 유지할 수 있다.
 - 사용자가 로그아웃하거나 장바구니를 비울 때, 쿠키를 삭제하거나 초기화하여 상태를 업데이트 한다.

세션(Session)

* 세션이란?

- 세션은 쿠키를 기반으로 하고 있지만, 사용자 정보파일을 브라우저에 저장하는 쿠키와 달리 세션은 서버 측에서 사용자 정보를 관리한다.

- 서버에서는 클라이언트를 구분하기 위해 세션 ID를 부여하여 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증상태를 유지한다.(접속 시간에 제한을 두어 일정 시간 응답이 없다면 정보가 유지되지 않게 설정도 가능)

- 사용자에 대한 정보를 서버에 두기 때문에 쿠키보다 보안에 좋지만, 사용자가 많아질수록 서버 메모리를 많이 차지하게 된다.(서버 과부화 및 성능 저하의 요인이 될 수 있다.)

- 클라이언트가 Reqeust를 보내면, 해당 서버의 엔진이 클라이언트에게 유일한 ID를 부여하는 데 이것이 세선 ID이다.

 

* 세션의 동작 방식

- 클라이언트가 서버에 접속 시 세션ID를 발급 받음

- 클라이언트는 세션ID에 대해 쿠키를 사용해서 저장하고 가지고 있음

- 클라이언트는 서버에 요청할 때, 이 쿠키의 세션ID를 같이 서버에 전달해서 요청

- 서버는 세션ID를 전달 받아서 별다른 작업없이 세션ID로 세션에 있는 클라이언트 정보를 가져와서 사용

- 클라이언트 정보를 가지고 서버 요청을 처리하여 클라이언트에게 응답

 

* 세션의 사용 예시
1. 사용자 로그인
- 사용자가 웹 애플리케이션에 접속하고 로그인을 시도합니다.
- 사용자가 제출한 로그인 정보(아이디와 비밀번호)를 서버로 보냅니다.

2. 세션 ID 발급
- 서버는 사용자를 인증하고, 로그인이 성공하면 세션 ID를 발급합니다.
- 이 세션 ID는 사용자의 고유한 식별자입니다.

3. 세션 쿠키 설정
- 서버는 세션 ID를 쿠키로 설정하여 클라이언트에게 응답합니다.
- 클라이언트 브라우저는 이 쿠키를 저장합니다.

4. 페이지 요청
- 사용자가 다른 페이지로 이동하거나 액션을 취하면, 클라이언트는 해당 페이지 요청 시 세션 쿠키를 함께 서버에 전송합니다.

5. 세션 검증
- 서버는 클라이언트로부터 받은 세션 쿠키를 확인하여 해당 세션 ID로 세션을 식별합니다.
- 세션 ID를 이용하여 로그인한 사용자 정보를 세션에서 가져옵니다.

6. 요청 처리
- 서버는 클라이언트의 요청에 필요한 작업을 수행합니다. 이때 사용자 정보나 권한을 확인하는 데 세션을 활용합니다.

7. 응답 전송
- 서버는 요청을 처리하고 응답을 생성한 뒤, 클라이언트에게 응답을 전송합니다.

8. 세션 유지
- 사용자가 로그아웃하거나 세션 만료 시간이 지나면, 서버는 해당 세션을 무효화하고 클라이언트의 세션 쿠키를 삭제합니다.

이렇게 세션을 사용하면 로그인과 같은 사용자 인증 작업을 효과적으로 관리하고, 클라이언트와 서버 간에 사용자 정보를 안전하게 전달할 수 있습니다.


* 정리

- 쿠키와 세션 모두 HTTP의 Connectionless, Stateless 특징을 보완하기 위해 사용된다. 즉, HTTP의 각 통신은 매번 초기화되어 유저의 로그인 정보와 같이 요청마다 유지되어야 하는 정보를 기억하기 위한 기술이 쿠키와 세션이다. 쿠키는 클라이언트(브라우저) 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일이며, 저장된 이후 요청마다 해당 정보를 HTTP 헤더에 담게함으로써 각 통신마다 정보를 기억하게 한다. 세션은 유저의 정보를 클라이언트의 로컬이 아닌 서버 측에서 가지고 있고, 해당 정보에 대한 세션ID를 쿠키에 저장하게 함으로써 유저 정보를 관리한다.

- 쿠키와 세션의 차이점은 사용자의 정보가 저장되는 위치이며, 보안면에서는 세션이 더 우수하지만, 세션은 서버의 자원을 사용하기 때문에 서버의 메모리를 차지하게 되어 서버 과부화 및 성능 저하의 요인이 될 수 있다. 또한, 쿠키는 만료시간이 있지만, 만료시간 전에는 파일로 저장되기 때문에 브라우저를 종료해도 계속해서 정보가 남아있다. 대신 세션은 쿠키와 마찬가지로 만료시간을 정할 수 있지만, 브라우저가 종료되면 만료시간과 상관없이 삭제된다.


학습 단계로 잘못된 정보가 있을 수 있습니다. 잘못된 부분에 대해 알려주시면 정정하도록 하겠습니다.

참고 : https://interconnection.tistory.com/74

'이것저것 스터디📚 > CS 스터디' 카테고리의 다른 글

HTTP 1.1 VS HTTP 2.0  (0) 2023.12.18
HTTP GET과 POST 차이  (0) 2023.11.14
HTTP 대신 HTTPS를 사용해야하는 이유  (0) 2023.10.16
REST API  (1) 2023.10.16
AJAX란?  (1) 2023.10.16