쿠키(cookie)
- 클라이언트(브라우저) key-value 쌍으로 로컬에 저장되는 데이터 파일
- 유효시간 내에서는 브라우저가 종료 되어도 계속 유지
- 서버에서 response header에 set-cookie 속성을 사용해서 클라이언트에 쿠키를 만들고, 사용자가 따로 작업을 하지 않아도 브라우저가 쿠키를 request header에 담아서 서버에 전송
쿠키의 생성과 저장
- 서버가 클라이언트로부터 요청을 받았을 때, 클라이언트에 관한 정보를 토대로 쿠키를 구성
- 서버는 클라이언트에게 보내는 응답 header에 쿠키를 담아 전송
- 클라이언트가 응답을 받으면, 브라우저는 쿠키를 쿠키 디렉터리에 저장
세션(session)
- 기본적으로 쿠키를 이용하여 구현
- 클라이언트를 구분하기 위해 각 클라이언트에게 session ID를 부여하고 클라이언트는 쿠키에 session ID를 저장
- 사용자 정보를 브라우저에 저장하는 쿠키와 달리 세션은 서버측에 저장하여 관리
-> 쿠키보다 보안을 좋지만 서버 자원을 차지하기 때문에 서버에 과부하를 줄 수 있고 성능 저하의 요인이 될 수 있음
- 유효시간을 두어 일정 시간 응답이 없다면 끊을 수 있고, 브라우저가 종료될 때까지 인증상태 유지 가능
쿠키와 세션을 통한 인증(authentication)과 인가(authorization)
- 인증 : 사용자가 누구인지 확인하는 절차로 회원가입과 로그인 과정이 대표적인 예
- 인가 : 사용자가 요청하는 것에 대한 권한이 있는지를 확인하는 절차
세션을 통한 인증, 인가(auth)의 절차
1. 클라이언트가 로그인을 하면 서버는 회원정보를 대조하여 인증 (authentication)
2. 회원정보를 세션저장소에 생성하고 session ID를 발급
3. http response header 쿠키에 발급한 session ID를 담아서 전송
4. 클라이언트에서는 session ID를 쿠키 저장소에 저장하고 이후에 http request를 보낼 때마다 쿠키에 session ID를 담아서 전송
5. 서버에서는 쿠키에 담겨져 온 session ID에 해당하는 회원 정보를 세션 저장소에서 가져옴 (authorization)
6. 응답 메시지에 회원 정보를 바탕으로 처리된 데이터를 담아서 클라이언트로 전송
세션과 쿠키를 이용한 로그인 방식의 단점
- Session hijacking
-> HTTPS를 사용하거나 session에 짧은 주기로 만료시간을 설정하는 방법으로 해결
- Load Balancing 및 서버 효율성 관리 및 확장이 어려워질 수 있음