본문 바로가기
개발지식

쿠키와 세션이란? (Cookie & Session)

by devLog by Ronnie's 2021. 3. 26.

들어가며


쿠기와 세션에 대해서 정리한다.

 

 

SESSION 이란?


세션의 정의란

  1. 망 환경에서 사용자 간 또는 컴퓨터 간의 대화를 위한 논리적 연결. 

  2. 프로세스들 사이에서 통신을 하기 위해 메시지 교환을 통해 서로를 인식한 이후부터 통신을 마칠 때까지의 기간.

라고 한다.

 

하지만 이걸로는 느낌이 오지 않는다.

 

조금 더 풀어서 이해하기 쉽게 설명하면 세션이란 일정 시간동안 같은 사용자(브라우저)로부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술이라고 한다.

여기에서 일정 시간이라 함은 사용자가 웹브라우저를 통해 웹서버를 접속한 시점부터 웹브라우저를 종료한 시점까지의 시간을 나타낸다. 즉, 웹브라우저를 닫게 되면 세션도 닫힌다는 것.

 

웹서버에 사용자에 대한 정보를 저장하고 사용자에게는 사용자를 구분할 수 있는 ID를 부여하게 되며, 이것을 세션 아이디라고 한다.

 

 

세션 프로세스


1. 사용자가 서버에 요청(HTTP)했을 때, 세션에 사용자에 대한 데이터를 저장하고 아이디를 응답을 통해 발급해준다.

2. 사용자는 발급받은 세션 아이디를 쿠키로 저장한다. (ex. JSESSIONID)

3. 사용자는 다시 서버에 요청할 때, 세션 아이디를 서버에 전달하여 상태 정보를 서버가 활용할 수 있도록 한다.

 

이처럼 개발자도구에 들어가보면 JSESSIONID를 발급받은 것을 확인 할 수 있다. 

 

그럼 이제 궁금한게 저 쿠키는 무엇인가이다.

 

아마 인터넷 좀 한사람이라면 한번쯤은 봤을법한 단어이다. 바로 인터넷 사용기록을 삭제하려고 보면 쿠키 데이터 삭제라는 것을 봤을 것이다.

 

 

쿠키란?


쿠키란 사용자 로컬에 저장되는 키와 값 (KEY, VALUE)이 들어 있는 작은 데이터 파일을 말한다.

쿠키에는 다양한 정보(이름, 값, 만료날짜, 경로 등등..)들이 들어가 있다.

쿠키는 서버측에서 만료날짜를 지정하여 정해진 시간 동안 상태정보를 유지할 수 있다. (로그인 상태 유지에 활용)

네이버 쿠키 정보들

쿠키는 두가지로 나눌수 있다. 바로 세션쿠키와 지속쿠키이다.

둘의 차이점은 세션쿠키는 만료날짜를 지정한 것, 지정하지 않으면 항상 유지하라는 것으로 판단하여 지속 쿠키에 저장된다. 이때문에 세션쿠키는 브라우저 메모리에 저장되어 브라우저가 종료되면 쿠키도 같이 사라지게 되며, 지속쿠키는 파일에 저장이 되기때문에 브라우저가 종료되어도 쿠키는 남아있다는 점이 중요한 차이이다.

 

단순히 생각하면 정보가 저장되면 편리할 것 같지만 반대로 저장이 되기 떄문에 보안에 취약할 수 있다는 단점도 있다.

 

마지막으로 세션과 쿠키의 전체 흐름을 살펴보자.

 

 

세션과 쿠키의 흐름


 

 

1. 사용자가 로그인을 한다.

2. 서버에서는 디비에서 계정 정보를 읽어 사용자 확인 후, 사용자의 고유한 ID값을 부여하여 세선 저장소에 저장 후 이와 연결되는 세션ID(ex. JSESSIONID)를 발급해준다.

3.사용자는 서버에서 해당 세션ID를 받아 쿠키에 저장한다.

4. 인증이 필요한 요청마다 쿠키를 헤더에 실어서 요청한다.

5.서버에서는 쿠키를 받아 세션 저장소에서 대조 후 대응되는 정보를 가져온다.

6. 인증 완료 후 서버는 사용자에게 맞는 데이터는 전달한다.

 

이처럼 쿠키는 사용자(브라우저) 메모리 또는 파일에 저장되고, 세션은 서버 메모리에 저장되기 때문에 보안에 있어서 세션 정보가 비교적 더 안전하다. 하지만 세션 정보가 많아지게 되며 서버 메모리를 사용하므로 과부하가 올 수도 있다.

 

이렇게 때문에 어느하나만을 사용하는 것이 아닌 두가지를 적절히 사용하는 것.

 

'개발지식' 카테고리의 다른 글

MAC - STS lombok 설치 및 경로 설정  (0) 2021.04.16
Blog - Dark Mode 만들기  (0) 2021.04.09
Framework & Library & API  (0) 2021.04.04
Scope - 객체 범위  (0) 2021.03.30
EL - Expression Language  (0) 2021.03.29

댓글