본문 바로가기

CS

쿠키와 세션

네이버, 인스타그램등 기타 여러가지 사이틀 사용하면서 가장 편하다고 느끼는 기능은 한번 로그인 하면 또 안해도 된다는 점인것 같습니다. 로그인을 여러번하는건 저는 굉장히 귀찮다고 생각하기 때문입니다.

 

그래서 오늘은 한번 로그인 했는데 새 탭을 열었을 때 로그인 상태가 유지 될 수 있는지에 대해 정리해 보려고 합니다.

 

글을 전개 하기 전에 소신 발언 하나 하겠습니다. 

 

세상에는 쿠키만 존재한다.

구글링하면 다 쿠키와 세션의 차이점에 대해 설명하고 있는데 이게 무슨 소리냐 라고 하실 수 있습니다. 세션은 결국 쿠키를 사용합니다. 즉, 쿠키의 한 부분 집합이 세션인거죠

 

그럼 왜 쿠키라고 하지 않고 세션이라고 하느냐? 라는 궁굼증이 있을 수 있습니다. 그 내용은 이후에 정리 하겠습니다. 

 

앞으로의 글을 정리하면서 한가지만 정리하고 가겠습니다.

 

"이해하기 쉽도록 쿠키와 세션은 나눠서 명칭을 쓰겠지만 본래 세션은 쿠키의 일종이다." 

 

 

 

  • 쿠키(Cookie) 란?

자 이제 논란의 중심이 됬던 쿠키에 대해 정리하겠습니다. 쿠키와 세션의 가장 큰 차이점은 클라이언트 쪽에 정보(사용자 정보) 를 저장 하느냐, 서버에 정보를 저장하느냐 차이입니다. 

 

사용자 정보를 저장한다는 점에서 그 기능 동일합니다. (제가 왜 세상에는 쿠키만 존재한다고 했는지 아시겠죠?)

 

그럼 클라이언트에 정보를 저장한다는 말의 의미를 생각해 봅시다. 예를 들어 모든 사용자 정보를 서버에 저장하는 프로그램이 존재 한다고 가정해 봅시다. 서버도 하나의 컴퓨터로써 작동할텐데 컴퓨터의 자원은 무한하지 않다는게 핵심이죠. 즉, 컴퓨터의 사양이 좋아지는 현 상황에서 서버의 부하를 줄여 주기 위해 클라이언트 쪽 컴퓨터에 사용자의 정보를 저장하고 그 정보를 사용하는 방법이 "쿠키" 인것 입니다. 

 

그럼 쿠키를 사용하게 된 이유는 뭘까요? 

 

기본적으로 HTTP 프로토콜은 "Stateless" 특징을 가지고 있습니다. 즉, 상태 값을 저장하지 않는 다는 것입니다. 

이말의 의미는 www.naver.com  라는 요청을 보냈고 새로고침해 다시 www.naver.com  요청을 보낸다면 이 둘은 독립적으로 작동한다는 의미입니다. 즉, 다른 요청에 대한 결과값을 받는 것이죠 (그 결과 값이 동일하더라도요..)

 

이 특성을 보완하기 위해 쿠키를 사용합니다. (번거롭게 자꾸 로그인하라고 하면 귀찮으니까요)

 

쿠키가 뭔지에 대한 개념과 왜 사용하는지 알았으니까 이제는 쿠키가 어떻게 동작하는지 알아 봅시다. 

 

  • 쿠키의 동작순서

1. 클라이언트가 페이지를 요청한다.

2. 서버에서 쿠키를 생성한다.

3. HTTP 헤더에 쿠키를 포함시켜 응답한다.

4. 브라우저가 종료되어도 쿠키 만료 기간이 있다면 클라이언트에서 보관하고 있다 .

5. 같은 요청을 할 경우 HTTP 헤더에 쿠키를 함께 보낸다.

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

 

 

  • 세션 (Session) 이란?

이번에는 세션에 대해 알아 보겠습니다. 세션은 쿠키의 역할을 하지만 굳이 쿠키로 부르는 이유는 아까도 설명 드렸다싶이 쿠키가 저장되는 공간이 쿠키와 다르기 때문입니다. 세션은 일반적으로 서버에 저장되어있죠

 

때문에 세션은 쿠키와 달리 개개인의 클라이언트에 보관되는것이 아닌 하나의 서버에 저장되기 때문에 다수의 클라이언트가 접속하고 있는 서버일 경우 어느 클라이언트의 세션인지 구분할 필요성이 있습니다. 

 

때문에 세션은 클라이언트를 구분하기 위해 세션 ID를 부여하여 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증상태를 유지 합니다.

 

세션이 뭔지에 대해 알았으니 이제 동작 순서에 대해 알아 봅시다.

 

  • 세션 동작 방식

1. 클라이언트가 서버에 접속시 세션 ID를 발급 받는다.

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

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

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

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

 

 

지금 까지 쿠키와 세션에 대한 개념을 정리했습니다. 이제부터는 가장 중요한 각각의 장단점에 대해 정리해 보겠습니다. 

어떤 경우에 쿠키를 사용할지, 세션을 사용할지 자신만의 철학을 가지는 건 매우 중요하기 때문이죠

 

 

  • 쿠키와 세션의 장단점

1. 보안성

쿠키는 클라이언트 로컬 PC에 정보를 저장하고 있기 때문에 정보가 변질 되거나 request에서 스니핑 당할 우려가 있어 보안에 취약합니다. 스니핑을 간단한 비유를 들어 설명하자면 "전화기 도청장치" 같은 개념 입니다. 자세한 내용은 아래의 링크를 참고해 주세요

 

 

[해킹기법] ⑤ 스니핑 (sniffing) (1)

스니핑이란? 사전적인 의미로 스니핑(Sniffing)이란 ‘코를 킁킁거리다’, ‘냄새를 맡다’ 등의 뜻이 있다. 사전..

www.ahnlab.com

 

세션은 쿠키를 이용해서 sessionID만 저장하고 그것으로 구분하여 서버에서 처리하기 때문에 비교적 보안성이 높습니다.  

 

정리하자면 민감한 정보를 다뤄야 하는 SNS같은 사이트는 세션을 통해 로그인 정보를 관리하고 그럴 필요가 없는 일반 뉴스나, 블로그 글 같은 경우에는 단순 정보를 열람하는 사이트이기 때문에 굳이 세션에 저장할 필요가 없겠죠?

 

2. 라이프 사이클

 

쿠키도 만료기간이 있지만 팡이로 저장되기 때문에 브라우저를 종료해도 정보가 유지될 수 있습니다. 또한 만료기간을 따로 지정해 쿠키를 삭제할 때까지 유지할 수도 있습니다. 

 

반면 세션도 만료기간을 설정할 수 있지만 브라우저가 종료되면 만료기간에 상관없이 삭제 됩니다. 

 

3. 요청 속도

 

쿠키는 클라이언트에 정보를 저장해 놓고 세션은 정보를 서버에 저장해 놓고 있기 때문에 요청속도가 쿠키가 더빠르다. 

 

 

반응형

'CS' 카테고리의 다른 글

REST API 란?  (0) 2022.08.29
오픈소스 라이선스  (2) 2022.08.15
유니코드의 개념과 사용 목적  (0) 2022.01.12
MIME 의 개념과 사용 목적  (1) 2022.01.12
WEB 서버와 WAS의 차이  (0) 2022.01.12