티스토리 뷰

[WEB] 쿠키와 세션

Odol87 2017. 8. 30. 19:37

쿠키와 세션

HTTP는 Stateless

HTTP 프로토콜은 stateless인 형태이다.
내부적으로 OSI 7 Layer 구조를 따라 application layer인 HTTP를 활용하므로 TCP의 3-WAY Handshaking과 같은 연결을 맺는 과정이 있겠지만 요청 하나의 흐름 과정에 TCP 연결을 맺는 것이 있는 개념이지 HTTP 자체가 지속해서 연결된 것은 아니다.


이를 HTTP 1.1 부터 Keep-Alive를 통해 이전에 들어온 클라이언트의 연결을 유지할 수 있다. 


요청과 요청 사이의 시간 값을 줘 그 시간 동안은 상태를 유지하여 서로를 알 수 있다.


하지만 근본적으로 서버와 클라이언트가 지속해서 상태를 연결해야 하는 상황은 필연적이다.


로그인 후 다른 페이지로의 이동 같은 상황을 stateless로 다시 인증작업을 거치거나 Keep-Alice로 커버하긴 어려울 것이다.



쿠키와 세션의 차이점

위에서 말한 상황에서 해결하기 위해 쿠키와 세션이라는 개념이 생기게 되었다.


요청과 요청 사이에 필요로 하는 정보를 저장하기 위함이라는 존재 이유는 둘 다 같다.


가장 큰 차이점은 저장되는 위치이다. 


쿠키는 클라이언트에 저장되고(브라우져) 세션은 서버에 저장되는 데이터이다.


과거에는 온갖 데이터를 쿠키에 넣어둬 개발자(혹은 서버 관리자)가 편해지는 형태의 구현이 많았다. 


로그인 유지는 물론 각종 서비스의 민감 정보가 저장되어 해당 클라이언트가 외부 공격으로 노출되게 되면 쉽게 정보를 탈취되는 사례가 많이 있었다. 


이런 문제를 해결하기 위해 서비스들은 클라이언트에 민감정보를 저장하지 않는 형태로 발전하게 되었다.


쿠키에는 단순 세션키(서블릿의 경우 jsession id)라는 해당 클라이언트를 서버에서 식별할 수 있는 값만을 전달하고 그 세션키와 맵핑되는 데이터는 서버에서 관리하는 형태가 일반적인 방법이다.



결론

아주 기본적인 개념이고 웹에 대해 조금이라도 관심이 있다면 쿠키와 세션에 대해 아는 사람이 많다.


그럼에도 이 포스팅을 작성한 계기는 개발하다 리다이렉트와 포워딩을 처리하며 데이터 유지 관련 로직을 팀원에게 설명하다가 나 스스로가 명확하게 쿠키와 세션을 구분 짓지 못했기에 정리할 겸 포스팅하게 되었다.


다음으로는 포워드와 리다이렉트에 관련된 주제를 가지고 작성해 봐야겠다.


'' 카테고리의 다른 글

[WEB] 쿠키와 세션  (0) 2017.08.30
댓글
댓글쓰기 폼