ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 세션과 쿠키(Session과 Cookie)
    백엔드/서블릿&JSP 2021. 1. 7. 18:37

    Http의 Stateless

    우리가 흔히 웹 서비스를 통해 통신할 때 Http 프로토콜을 이용하게 된다.

     

    이때 Http 프로토콜의 큰 특징 중 하나는 상태유지없음(Stateless)라는 것이다.

     

    간단히 말해서 클라이언트가 요청(reqeust)를 보내고 이에 대해 서버가 응답(response)을 하면 통신 종료.

     

    즉 클라이언트가 서버에 많은 요청을 보내도 서버는 매번 새로운 요청으로 인식한다.

    Stateless의 한계

    인터넷 초창기 대부분의 웹 서비스는 이미 만들어진 정보를 제공하는 경우가 대부분이었다.

     

    이때는 굳이 세션, 쿠키 같은 개념이 존재할 필요가 많지 않았다.

     

    서버는 만들어진 자료만 넘겨주면되지, 굳이 클라이언트의 상태를 기억할 필요가 없기 때문이다.

     

    하지만 사용자 요구가 많아지고, 웹 서비스의 다양화를 원하면서 이러한 통신 방식은 한계가 드러났다.

     

    쇼핑, 로그인과 같은 기능을 이용하기 위해서 서버는 클라이언트를 기억해야 했다.

     

    그리고 등장한 것이 쿠키와 세션이다.

    쿠키(Cookie)란?

    쿠키란 브라우저에 클라이언트의 상태를 저장하는 데이터의 형태를 의미한다.

     

     

    쿠키는 서버가 만드는데 클라이언트가 첫 요청(request)을 하면 이때는 쿠키가 없이 요청만 전달된다.

     

    그리고 서버는 응답(response)과 함께 쿠키를 클라이언트에게 전달하고 브라우저는 이 쿠키를 저장한다.

     

    그리고 이후부터 요청(request)할 때마다 매번 이 쿠키를 같이 서버에 전달한다.

     

    간단히 말하면 서버가 상태를 기억하지못해서 클라이언트가 매번 요청때마다 자기 상태를 말하는 것이다.

     

    쿠키는 개당 4kb 정도의 크기를 가지고 있으며 여러 개의 쿠키를 만들어서 전달이 가능하다.

     

    다만 쿠키가 많을수록 통신에는 부담이 가기때문에 적당한 수준을 유지해야 한다.

     

    이러한 쿠키의 등장은 웹 서비스의 폭을 넓혔지만, 한편으론 그 한계가 명확했다.

    쿠키의 한계

    쿠키의 한계는 명확하다.

     

    쿠키 저장의 주체가 바로 브라우저 즉 클라이언트 측에 있다는 것이다.

     

    이는 쿠키 데이터의 변조나 유출의 위험이 있다는 것이다.

     

    쿠키에 로그인 정보를 담았는데 쿠키 데이터가 유출되면 로그인 정보도 같이 털리는 것이다.

     

    그래서 현재 쿠키는 민감하지 않은 정보를 담는데 주로 이용된다.

    세션의 정의

    세션이란 쿠키와 달리 클라이언트의 상태를 서버에 저장하는 것이다.

     

    이는 쿠키와 거의 기능이 비슷한데 저장 주체가 다르다고 보면 된다.

     

     

    사용자가 첫 요청을 하면 서버는 response와 함께 ssid(Session Id)를 발급하다.

     

    해당 ssid는 쿠키 형태로 브라우저에 저장되고 이후 요청부터 ssid를 저장한 쿠키를 서버에 보낸다.

     

    서버는 ssid에 맞는 데이터를 클라이언트에게 보여준다.

     

    이때 중요한건 쿠키만 사용할 때와 달리 민감한 정보가 쿠키에 저장되지 않는다는 점이다.

    세션의 장점

    극단적인 예를 들어보자.

     

    pc방에서 로그인 정보 저장하기를 체크하고 로그인을 하면 컴퓨터를 껐다켜도 로그인 정보는 남는다.

     

    결국 다른 사람이 와서 내 정보를 모두 볼 수 있다.

     

    하지만 그건 결국 ssid통해 허용된 정보에 한해서 볼 수 있는 것이다.

     

    쿠키는 아이디, 패스워드 따위의 정보를 가질 수 없기 때문에 계정에 대한 정보 변경이 불가하다.

     

    물론 이것도 어떤 보안 없이 아이디, 비번 변경이 가능하다면 변경이 가능하다.

     

    하지만 일반적으로 개발을 한다면 민감 정보를 바꿀 때 개인 확인을 재차 하지 않는 경우는 거의 없다.

     

    즉 털릴거 다 털려도 마지노선은 지킬 수 있다는 이야기다.

     

    하지만 이건 극단적인 예일 뿐이다.

     

    일반적으로 세션은 별다른 조치가 없으면 프로세스가 종료되면 서버에서 자동 삭제된다.

     

    즉 로그인했던 브라우저를 끄고나서 다시 켜면 자동으로 로그아웃된다는 것이다.

     

    결국 세션은 쿠키에 비해서는 훨씬 보안에 있어서 훨씬 안전하다고 볼 수 있다.

     

    개발하는 상황에서 몇가지 경우의 수만 잘 생각하면 세션을 통해서 많은 것이 가능하다.

    '백엔드 > 서블릿&JSP' 카테고리의 다른 글

    서블릿 기초 형태  (0) 2021.01.13
    forward와 sendRedirect 차이  (0) 2021.01.11
    javax.servlet.http 패키지  (0) 2021.01.07
    javax.servlet 패키지  (0) 2021.01.06
    JSP 기초 문법  (0) 2020.11.02
Designed by Tistory.