웹 프로그래밍 01

Updated:

쿠키(Cookie) / 세션(Session)

  • 이 둘을 알기 위해서 HTTP를 알고 가야 한다.

HTTP 프로토콜의 특징

  1. 비연결지향(ConnectionLess) : 클라이언트가 request를 하면, 서버는 response하고 접속을 끊음
  2. 상태정보유지안함(Stateless) : 연결을 끊는 순간 상태 정보는 유지하지 않는다.

*장점 : 연결할 때만 상태정보를 저장하기 때문에 서버의 자원을 절약할 수 있다.

*단점 : 여러번 요청할 경우 새로운 사용자로 인식하게 되는 단점. 따라서 매번 요청할 때마다 로그인 해야함.

쿠키

*클라이언트가 서버에 request 보냈을 때 서버가 쿠키를 생성

*쿠키는 서버가 클라이언트에 respose할때 같이 전송

*서버가 보낸 쿠키를 클라이언트는 저장하고 있다가 다시 request할 때 함께 전송

*서버는 받은 쿠키에 대해서 업데이트 해야한다면 업데이트 후 다시 재전송

세션

*클라이언트가 서버에 요청하면 서버는 요청에 세션 ID가 있는지 확인

*세션ID가 없으면 세션 ID 쿠키를 생성하고 response할 때 전송

*쿠키와 같이 세션ID를 저장하고 있다고 요청시 보냄.

쿠키와 세션의 차이점

*쿠키는 클라이언트, 세션은 서버에 저장(세션ID는 클라이언트)

*쿠키는 브라우저가 꺼져도 만료기간안에 저장되어 있다. (라이프사이클)

*세션은 만료기간이 남아있어도 브라우저가 꺼지면 사라짐. (라이프사이클)

*세션이 보안에 더 좋음. 하지만 서버에서 처리하므로 접속자가 많을 경우 부하가 걸림

*사실 가장 중요한 차이점은 라이프사이클이다.

*세션은 사용자 수 만큼 서버 메모리를 차지하는데 이런 문제를 보완하기 위해 토큰 기반 인증방식 사용

*JWT(JSON Web Token) or Aouth는 차후 포스팅

캐시

*캐시는 이미지나 css, js파일 등을 브라우저나 서버 앞 단에 저장해놓고 사용하는 것이다.

*캐시에 저장되면 브라우저를 참고하기 때문에 서버에서 변경이 되어도 사용자는 변경되지 않게 보일 수 있다.

=>이런 경우 캐시를 지워주거나 서버에서 클라이언트로 응답을 보낼 때 header에 캐시 만료기간을 명시하면 됨