웹 서비스를 이용할때 왜 로그인이 필요한지 부터 쿠키와 세션에 대해서 기록하며 정리하고자 한다.
웹 서비스를 이용하는 클라이언트는 개인적인 컨텐츠를 소유한다. 그러므로 클라이언트는 서버에게 API(Application Programming Interface, 응용 프로그램 프로그래밍 인터페이스)를 요청했을 때, 서버는 요청한 클라이언트의 식별을 정확히 해야한다. 서버는 개인적인 식별 데이터를 (보안적으로)보관하고 확인이 된다면, 클라이언트의 요청에따라서 정보를 전달해주어야한다. 이러한 일련의 과정이 '인증(Authentication)'이라고 하며, 제대로 이루어지지 않는다면 개인정보 유출 등 심각한 문제가 발생한다.
먼저 http는 서버와 클라이언트 사이에서 요청(request)/응답(response)이 이루어지는 프로토콜이다. 로그인도 인증이 이루어지기위해서는 클라이언트에서 요청을하고 서버에서 응답을 해주는 과정이 필요하다. 이때, http는 stateless(무상태)라는 특성만 이해한다면, 클라이언트 입장에서는 서버에게 데이터를 요청할때마다 인증을 해야만 한다고 생각할 것이다.
http는 기본적으로 서버의 부담을 줄이기위해서 비연결성과 무상태의 특성을 가진다.
이를 해결하기 위해 쿠키(Cookie)와 세션(Session)을 사용하게 되었다.
웹을 이용하다보면 흔히 쿠키라는 이름을 듣는다. 쿠키는 클라이언트 측에서 로컬 웹 브라우저가 저장하는 데이터다. 인증을 하는 과정에서 처음에 서버는 쿠키를 생성해서 클라이언트에게 보내게된다면, 클라이언트는 쿠키를 웹 브라우저에 Key-Value 형식으로 저장이 된다. 이후 클라이언트가 데이터를 요청시 헤더에 쿠키를 실어서 서버에 보내게된다. 따라서 로그인 정보가 쿠키에 담겨져있다면 더이상의 인증은 필요없게된다.
쿠키의 유효기간은 서버에서 설정하여 보낼수 있다. 유효기간이 지나면 쿠키는 자동으로 소멸된다. 만약 유효기간을 설정하지 않는다면 웹 브라우저를 종료하는 순간 사라진다.
그런데 사실 인증을 여러번 하지않는 큰 이유 중 하나가 보안에 취약하다는 점이다. 서버에게 인증 요청을 하기위해서 네트워크로 개인정보를 보내는데 이를 탈취해 나갈 가능성이 있기때문에 보완점이 필요했다. 우리는 이를 보완하고자 세션(Session)을 사용한다.
세션이 보안적 측면에서 네트워크에 개인정보가 흘러가면 안된다는 점을 고려했을 때 고안된 부분이라고 생각한다. 세션도 쿠키와 동일하게 클라이언트의 인증 상태정보를 저장하게되는데, 쿠키와달리 서버에 저장된다는 차이점이 있다. 또한 외부에서 세션 정보를 열람하여도 개인 로그인 정보와 매칭이 불가능하다는 특징이 있다.
즉 쿠키와 동일하지만, 유출되어도 역으로 확인할 수없는 정보를 담고 있어야한다. 이를 위해서 쿠키를 활용하게되는데, 서버에서 고유 세션 id를 클라이언트에게 보내게되면 이를 클라이언트는 웹 브라우저에 저장하게 된다. 그리고 그 다음부터 인증을 위해서는 클라이언트의 쿠키에 저장되어져있는 고유 세션 id를 서버측에 보내게 된다.
결국 로그인 과정은 다음과 같이 진행된다.
- 세션이 없다면, 로그인도 장바구니도 구현할 수 없음. (브라우저가 종료되면 사라진다.) ex) 장바구니, 로그인
- 이용하기 위해 HttpSession()클래스 객체를 생성해야 함.
- 브라우저 당 하나의 세션이 생성된다.
[출처 : https://velog.io/@junhok82/]