본문 바로가기
Programming/Web

[Web 기초] 쿠키와 세션이란?

by soccerman 2021. 2. 26.
반응형

컴퓨터를 자주 사용하시는 분들이라면, 아마 쿠키에 대해서는 다소 친숙하실거라 생각합니다.

 

최근 면접에서 쿠키와 세션에 대한 질문에 답변을 잘하지 못해 이를 보완하고자 글을 작성하여 정리합니다.

 

쉬운 것부터 알아볼까요?


차이점

  • 쿠키 : 클라이언트와 관련된 데이터를 로컬에 저장
  • 세션 : 클라이언트와 관련된 데이터를 서버에 저장

그럼 굳이 왜 웹에서 쿠키와 세션을 사용할까요?

 

바로 웹에서 사용하는 HTTP통신의 단점을 보완하기 위해서 인데요.


HTTP 프로토콜 특징

  1. 비연결지향(Connectionless)
    • 클라이언트가 요청을 보내고, 서버가 응답을 한 후 연결을 끊는 특성
  2. 상태없음(Stateless)
    • 연결을 끊는 순간 클라이언트와 서버의 통신이 끝나고 상태 정보는 유지하지 않는 특성

위의 두가지 특성을 통해 서버리소스의 효율적 사용을 꾀합니다.

 

반면, 서버에 요청시 사용자 인증을 매번 해야한다는 단점이 있습니다. 이는 클라이언트 입장에서 비효율을 초래합니다.

 

만약 클라이언트가 인증 관련 정보를 로컬에 가지고 있으면 HTTP을 통해 서버와 통신할 때 이를 요청하고 응답받을 필요가 없게 됩니다.

 

이러한 통신의 효율을 꾀하기 위해 쿠키(로컬)를 사용합니다.


 

그럼 쿠키에는 어떤 정보들이 들어 있을까요?


쿠키의 구성요소

  • 이름 : 각각의 쿠키를 구별하는 데 사용되는 이름
  • 값 : 쿠키의 이름과 관련된 값
  • 유효시간 : 쿠키의 유지시간
  • 도메인 : 쿠키를 전송할 도메인
  • 경로 : 쿠키를 전송할 요청경로
  • 등등등

클라이언트와 서버가 응답, 요청할 때 HTTP 헤더에 쿠키를 포함합니다. 상태정보 수정이 필요한 경우 서버측에서 쿠키를 업데이트하여 응답합니다.

 

쿠키 사용 예시로는 아이디/비밀번호 기억, 쇼핑몰의 장바구니 등이 있습니다.


 

그럼 쿠키를 사용하면 되는데 굳이 왜 세션을 사용할까요?

 

쿠키는 로컬에 저장되기 때문에 조작가능성이 존재하고, 통신과정에 정보가 탈취될 우려가 있습니다.

 

이와 같은 보안 이슈 때문에, 세션을 사용합니다.

 

세션에도 장단점이 있는데요. 세션에 대해 알아봅시다.


세션

  • 쿠키와 같은 정보들을 서버에 저장합니다.
  • 클라이언트에서 세션 ID를 제공합니다.
  • 통신시 세션 ID(Key)에 해당하는 정보(Value) 값을 활용하여 사용자를 인증합니다.
  • 인증정보가 외부에 유출되지 않기 때문에 보안관점에서 이점이 있습니다.
  • 사용자가 많아질수록 서버에서 저장해야하는 세션데이터가 늘어납니다.

세션은 위의 방식으로 작동합니다.

 

특징에서 설명했듯 세션이 쿠키보다 보안관점에서 이점이 있기에 로그인 등에서 활용됩니다.


종합

 

쿠키와 세션

  • 저장위치
    • 쿠키는 클라이언트의 로컬에 저장되고, 세션은 서버에 저장됩니다.
  • 보안
    • 쿠키의 경우 로컬에 저장되기 때문에 탈취, 변조될 가능성이 있습니다.
    • 또한 요청/응답 과정에서 스나이핑 당할 위험이 있어 보안이 세션에 비해 취약합니다.
    • 세션은 클라이언트 정보 자체는 서버에 저장되기 때문에 보안부분에서 이점이 있습니다.
  • 라이프사이클
    • 쿠키는 지속쿠키의 경우, 브라우저를 종료하더라도 로컬에 저장되어 계속 사용할 수 있습니다.
    • 세션의 경우 서버에서 만료시간/날짜를 정해 지워버릴 수 있고, 클라이언트 측에서 세션 쿠키에 세션ID를 저장하는 경우 브라우저 종료시 세션ID가 날아갈 수 있습니다.
  • 속도
    • 쿠키에 정보가 있기 때문에 서버 요청시 헤더를 바로 참조하면 되므로 속도면에서 유리합니다.
    • 세션의 경우 세션ID를 활용해 서버에서 데이터를 참조해야하므로 비교적 속도가 느릴 수 있습니다.

세션만 사용하면 안전성을 확보할 수 있지만, 서버자원을 불필요하게 사용하는 것을 방지하는 차원에서 높은 보안이 필요한 부분에서 세션을 활용하고, 보안이 중요하지 않고 속도를 중요시하는 부분은 쿠키를 활용하는 것이 바람직해 보입니다.

 

다음으로는 HTTP 프로토콜에 대해 자세히 알아보는 것도 재미있을 것 같네요.


참고자료

interconnection.tistory.com/74

jeong-pro.tistory.com/80

devuna.tistory.com/23


 

반응형

댓글