[Network] 간단히 알아보는 Cookie, Session
우리가 흔히 사용하는 웹사이트에서 로그인은 거의 필수적인 기능이다.
로그인을 이용한 서비스는 점차 많아지고있고, 점차 다양해 지기 때문이다.
그 로그인 기능에는 Cookie 와 Session 에 대한 이해가 필요하다.
만약 우리가 어떠한 게시판을 이용한다고 가정을 해보겠다.
그 게시판에 글을 작성하기 위해 로그인을 했는데, 게시판에 댓글을 달려고 했더니 또 로그인을 하라고 한다.
이게 무슨 귀찮은 상황인가
이라한 상황을 해결하기 위해 Cookie 와 Session 을 사용하고 이에 대해 간단히 알고 넘어가려고 한다.
Cookie, Session
위와 같은 상황은 HTTP 프로토콜의 특성인 Connectionless
, Stateless
때문이다.
- Connectionless: 클라이언트가 요청을 한 후 응답을 받으면 그 연결을 끊어버리는 특성
- Stateless: 통신이 끝나면 상태를 유지하지 않는 특성
즉, HTTP 프로토콜의 경우 request에 대한 response을 보내면 상태와 연결이 끊어진다고 보면된다.
하지만, 우리는 로그인 상태를 그 사이트를 이용하는 동안 계속 유지하고 싶은 경우가 분명히 존재한다.
그때 이제 우리는 Cookie 와 Session을 이용하여 HTTP Header에 Cookie를 등록하여 사용하는 것이다.
그렇다면 Cookie만 쓰면 되는거아닌가? 라는 생각이 들었다.
그렇기에 내가 알아본 내용을 정리해 보겠다.
Cookie
먼저 Cookie는 클라이언트 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일이다.
또한 인증에 대한 유효시간을 정할 수 있고, 브라우저가 종료되어도 인증이 유지된다는 특징이 있다.
Session
Session은 쿠키를 기반으로 하고 있지만, 로컬에 저장되는 것과는 달리 서버에 저장된다.
세션또한 인증에 대한 유효시간을 지정 할 수 있지만, 보통 브라우저가 서버에 접속해서 사용하다 브라우저를 종료하면 인증이 사라지게 된다.
그리고 Session은 Session ID 값을 갖고 Cookie에 저장해 놓았다가,
서버에 요청 할 때 Cookie에 저장되어 있는 Session ID를 통해 서버에서 정보를 가져와서 사용하게 된다.
이러한 차이로 인해 Cookie 와 Session 에 차이를 두고 사용하게 된다.
Cookie의 값은 클라이언트에서 임의로 변경하여 서버에 전송할 수 있고, 중간에 탈취될 수 있는 보안상의 약점을 갖고있지만
트래픽이 큰 서버에서는 로컬을 통해 데이터를 사용하는 Cookie가 장점이 될 수 있다.
하지만, 로그인에는 클라이언트의 개인정보 혹은 결제정보 등이 담길 수 있기 때문에 이렇듯 중요한 정보는 Session으로 처리하는 것이 옳다고 한다.
그래도 무분별한 Session의 사용은 서버의 메모리 사용문제로 성능 저하를 가져올 수 있다고 한다.