본문 바로가기

기술면접대비

쿠키(Cookie)와 세션(Session)은 무엇이고 어떤 차이점이 있을까?

쿠키세션은 왜 사용하는 것일까? 쿠키와 세션을 사용하는 이유는 HTTP의 특징이자 약점을 보완하기 위해서이다. 그렇다면 이 HTTP의 특징은 무엇이고, 그로 인한 약점은 무엇일까? 쿠키(Cookie)와 세션(Session)은 각각 어떤 것이며 둘은 어떤 차이점을 가지고 있을까?

 

HTTP 프로토콜

HTTP(Hypertext Transfer Protocol)는 인터넷 상에서 데이터를 주고받기 위해 서버 · 클라이언트 모델을 따르는 통신 규약이다. 이 HTTP 프로토콜의 특징은 비연결성(Connectionless) 비상태성(Stateless)이다.

  1. 비연결성(Connectionless) : HTTP는 클라이언트가 서버에 요청을 보내면, 서버는 클라이언트에게 요청에 맞는 응답을 해 준 뒤 접속을 끊는다. 이에 대해서는 논란이 되는 부분이 있으나 여전히 접속을 끊음으로써 연결 비용을 줄이는 것이 HTTP의 장점이기 때문에 비연결성을 가지고 있다고 말한다.
  2. 비상태성(Stateless) : 상태 정보를 유지하지 않는다는 의미이다. 연결을 끊는 순간 클라이언트와 서버의 통신이 끝나게 되며, 상태 정보는 유지하지 않는다.

비연결성이라는 특징 덕분에 통신 연결을 계속 유지하기 않으므로 리소스의 낭비가 줄어드는 장점을 가지고 있으나 동시에 통신이 필요할 때 커넥션을 새로 열어 줘야 하기 때문에 클라이언트는 그때마다 로그인을 반복해야 하는 단점이 생기게 되는 것이다.

 

장점을 유지하면서 단점을 보완하기 위하여 어떻게 해야 할까?

 

우리가 평소 사용하는 사이트들은 로그인 상태를 유지해 주기 때문에 일정 시간을 사용하지 않거나 하는 경우가 아닌 이상 로그인 상태를 유지하며, 사이트를 종료한 후 다시 접속했을 때에도 로그인 상태가 유지되도록 할 수도 있다. 바로 이 기능을 가능하게 해 주는 것이 쿠키와 세션이다.

*쿠키와 세션이 없다면 어떤 페이지에서 다른 페이지로 옮겨 다닐 때마다 다시 로그인을 해야 한다.

 

쿠키는 무엇일까?

HTTP의 일종으로, 어떤 웹 사이트를 방문할 경우 사이트가 사용하고 있는 서버에서 인터넷 사용자의 컴퓨터에 설치하는 키(key)와 값(value)이 들어가 있는 작은 데이터 파일(4KB 이하)이다. 문자열(String) 형식이다. 이름, 값, 쿠키 저장 기간(만료 날짜), 경로 정보가 들어간다. 쿠키는 서버를 대신하여 이러한 정보들을 웹 브라우저에 저장하고, 사용자의 요청이 있을 시 해당 정보를 함께 보내 서버가 사용자를 식별할 수 있도록 돕는다.

쿠키의 사용 목적

  1. 세션 관리(Session Management) : 로그인, 닉네임, 접속 시간, 장바구니 등 서버가 알아야 하는 정보를 저장한다.
  2. 개인화(Personalization) : 사용자마다 다르게 그 사람에 적절한 페이지를 보여줄 수 있습니다.
  3. 트래킹(Tracking) : 사용자의 행동과 패턴을 분석하고 기록합니다.

쿠키의 동작 순서

  1. 브라우저에서 웹 페이지에 접속하게 되면 웹 서버는 쿠키를 생성하여 클라이언트 로컬(하드)에 저장한다.
  2. 서버는 HTTP 화면을 돌려줄 때 클라이언트에게 쿠키 정보를 함께 보낸다.
  3. 웹 서버는 정보를 변경할 필요가 있으면 쿠키를 업데이트하여 응답과 함께 변경된 쿠키를 클라이언트에게 돌려준다.
  4. 클라이언트가 다시 페이지를 요청하게 되면, 요청 페이지와 함께 쿠키값을 함께 전송하여 지속적으로 로그인 정보를 가지고 있는 것처럼 사용한다.

쿠키의 단점 

  1. 방문했던 웹 사이트에 대한 정보 및 개인 정보가 기록되어 있기 때문에 사생활을 침해할 소지가 있다.
  2. 사생활 침해를 방지하기 위하여 브라우저의 쿠키 거부 기능을 활성화할 경우, 쿠키의 본래 본적인 웹 브라우저와의 연결을 지속시키는 기능을 수행할 수 없는 경우가 발생한다.
  3. 정보를 서버가 가지고 있는 것이 아니라 사용자의 로컬 하드에 저장되기 때문에 임의로 고치거나 지울 수 있고, 가로채기가 어렵지 않아 보안에 취약하다. 중요하거나 민감한 정보가 쿠키에 저장되어 있을 경우 위험에 놓이기 쉽다.

 

그렇다면 이러한 쿠키의 단점을 보완하기 위해서는 어떻게 하면 좋을까?

 

 

세션은 무엇일까?

일정 시간 동안 같은 사용자(동일 브라우저)로부터 들어오는 요구를 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술을 말한다. 방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그 상태를 유지시키는 것이 세션이다. 세션은 웹 브라우저 하나에 1개씩 생성되어 웹 컨테이너에 저장되며, 브라우저 종료 시 소멸된다. 아이디와 닉네임 등의 정보를 세션에 담아 유지하게 되면 요청이 있을 때마다 데이터베이스에 접근할 필요가 없어 효율적인 브라우저 사용이 가능하다.

세션의 동작 순서

  1. 클라이언트가 서버로 접속을 요청하면 서버는 해당 클라이언트가 세션 ID를 가지고 있는지 확인한 후, 없을 경우에는 새로운 세션 ID를 부여한다. (session 객체의 setAttribute() 메소드를 사용하여 세션의 속성을 지정하게 되면 계속 상태를 유지하는 기능을 사용할 수 있게 된다.)
  2. 서버는 클라이언트에게 발급한 세션 ID를 쿠키에 저장한다.
  3. 클라이언트가 재접속을 시도할 경우, 쿠키에 저장되어 있는 세션 ID의 값을 서버에 전달하여 클라이언트임을 확인한다. 쿠키는 자동으로 서버에 전송되기 때문에 서버에서 세션 ID에 따른 알맞을 처리를 할 수 있다.

세션의 장단점

세션은 각 클라이언트에게 고유 ID를 부여하게 되므로, 클라이언트를 구분하여 요구에 맞는 서비스를 제공할 수 있으며 정보를 서버에 저장하기 때문에 쿠키보다 보안이 우수하다. 그러나 동시에 서버에 저장 공간이 따로 필요하며, 서버의 처리량이 많을 경우 부하가 발생할 수 있다.

 

쿠키와 세션의 차이점
  쿠키(Cookie) 세션(Session)
저장 위치 클라이언트 서버
저장 형식 text Object
용량 제한 도메인당 20개, 쿠키당 4KB 용량 제한 없음
만료 시점 쿠키 저장 시 설정 가능. 따로 설정하지 않을 경우, 브라우저가 종료될 때 만료 정확한 시점을 알 수 없음
리소스 클라이언트의 리소스 서버의 리소스

 

 

 

쿠키와 세션은 모두 사용자의 편의를 위하여 만들어졌다. 쿠키는 자동완성, 팝업 보지 않기 등으로 보안에 취약하기 때문에 가로채이거나 조작되어도 큰 지장이 없는 정보를 저장하는 용도로 사용된다. 타인에게 노출되지 않아야 하는 중요한 정보들은 세션으로 클라이언트의 로컬 하드가 아닌 서버에 저장되어 보다 우수한 보안으로 관리된다.

쿠키는 보안에 약하고, 세션은 남발할 경우 과부하를 있으킬 수 있으므로 웹을 설계할 때 어떤 정보를 쿠키에 담을 것인지, 또 세션에는 어떤 정보를 담아 사용할 것인지 잘 판단할 수 있어야 한다.