[HTML] 상태정보/Cookies/Session

네이버 부스트코스 강의 정리

쿠키Cookie와 세션Session

부스트코스 강의 보러가기
참고한 블로그 글

웹Web 에서의 상태 유지 기술

→ 이것을 해결하기 의해 쿠키Cookie와 세션Session 기술이 등장한다.
앞선 클라이언트가 로그인했는지, 장바구니에 뭘 넣었는지 알게 하고 이런 것들을 유지하기 위해 클라이언트가 두 번째, 세 번째 요청을 했을 때 이 클라이언트가 어떤 사용자인지 기억하게 하는 기술.

쿠키Cookie와 세션Session


쿠키Cookie와 세션Session 의 동작 이해




쿠키의 동작 이해




1) 클라이언트가 서버 쪽에 요청을 보낸다.
2) 요청 중에 유지해야 될 정보가 있다면 서버는 유지할 정보를 가지고 쿠키 Set-Cookie header를 생성한다.
3) 서버가 만든 쿠키는 반드시 응답 결과에 포함 되어서 클라이언트에게 보내져야 한다. 이 때 클라이언트(웹 브라우저)는 이를 저장해놓는다.

→ 만들어진 쿠키는 클라이언트가 가지고 있게 된다.




4) 클라이언트는 앞으로 요청할 때 이 쿠키Set-Cookie header를 같이 포함시켜서 서버에게 보낸다.
5) 서버는 이 쿠키가 존재하는지 검사하고 있으면 어떤 클라이언트가 요청했고 유지되야 하는 이전 정보가 있는지 알아낸다.
+Expires 혹은 Max-Age를 설정하면 명시된 기간까지 쿠키가 유지된다.


세션의 동작 이해





1) 클라이언트가 서버 쪽에 요청을 보낸다. 2) 요청 중에 유지해야 될 정보가 있다면 서버는 세션키를 만들어낸다.
3) 그리고 세션키를 이용한 저장소를 생성한다. Session Storage 여기에 저장해야 하는 정보를 저장하게 된다.
4) 추후 요청 시 해당 클라이언트의 세션 저장소를 알아내기 위해 세션키를 담은 쿠키Set-Cookie header를 만든다.
5) 이 쿠키를 응답 결과에 포함해 클라이언트에게 보낸다.





6) 이 클라이언트가 다시 서버에 무언가를 요청할 때는 세션키를 저장한 쿠키Set-Cookie header를 포함해서 요청을 보낸다.
7) 서버는 받은 세션키를 활용해 이전의 저장소를 찾아 정보를 활용한다.
이 저장소에 들어있는 정보를 사용, 저장소에 다시 원하는 정보를 저장하는 일을 수행하고
이때 세션의 정보를 담기 위해 생성되는 객체가 HttpSession이다.



+ 토큰 Token 이란?



쿠키와 세션의 단점을 보완하기 위해 토큰Token이 등장


1) 클라이언트가 로그인을 하면 서버는 해당 클라이언트에 대한 계정 정보를 확인
2) 클라이언트가 확인되면 (로그인을 하거나) 서버는 signed token을 발급한다.
3) 클라이언트는 발급 받은 signed token을 저장한다.
4) 이후 요청을 보낼 때 마다 저장해준 이 token을 HTTP header에 담아 보낸다.
5) 서버는 token을 검증하고 클라이언트의 요청에 응답한다.

이 헤더에 담겨온 토큰을 검증하는 과정은 무상태성 Stateless를 가진다.
정보가 담긴 데이터를 암호화하여 HTTP header에 담아 전달하기 때문에 쿠키를 사용할 때처럼 보안에 취약하지는 않지만 token도 탈취될 수 있다.

토큰 기반 인증 방식 중 가장 많이 사용되는 것은 JWT JSON Web Token 으로 무결성을 보장하기 때문에 위조된 토큰인 경우 바로 알아낼 수 있다.

OAuth를 통해 다른 서비스 계정(google, facebook 등)으로 로그인 할 수 있고, 선택적 권한만 부여할 수 있다.


+ HTTP 프로토콜의 특징


HTML의 특징은 무연결성 Connectionless무상태성 Stateless 이다.

이 두 가지의 특징은 불특정 다수를 대상으로 하는 서비스에 적합하다.
클라이언트-서버 연결 수 보다 많은 요청과 응답을 처리할 수 있기 때문이다.
하지만 무연결성 때문에 클라이언트의 이전 상황을 서버는 알 수 없다.
이를 보완하기 위해 쿠키Cookie와 세션Session 기술이 생겼다.


+ 상태가 유지되는 프로토콜에는 어떤 것이 있을까?


프로토콜은 상태 Stateful / 무상태 Stateless 로 나뉜다.

클라이언트가 서버에 요청을 보내면 어떤 종류의 응답을 기대하고 응답이 없으면 요청을 다시 보낸다.
현재 상태와 세션 정보를 유지하기 위해 별도로 저장들 위한 서버가 필요하다.
서버와 클라이언트는 서로 밀접하게 관계된다.
서버는 세션 정보 및 기타 세부 정보를 유지해야 해 충돌 관리가 어렵다.
트랜잭션 처리가 비교적 느리다.

FTP, Telnet

클라이언트가 서버에 요청을 보내고 주어진 상태에 따라 서버 응답을 보낸다.
서버 정보 또는 세션 정보를 저장하지 않아 별도로 저장들 위한 서버가 필요하지 않다.
서버와 클라이언트는 독립적이다.
서버는 세션 정보와 기타 세부 정보를 저장할 필요 없고 충돌이 발생하면 바로 다시 시작할 수 있다.
트랜잭션을 빠르게 처리한다.

HTTP, UDP, DNS

참고한 블로그 글

Made with by Álvaro