웹 애플리케이션에서 사용자 로그인을 구현할 때,
사용자의 로그인 상태를 구별해야 한다.
HTTP는 상태를 저장하지 않는 속성(Stateless)을 갖기 때문에 사용자의 로그인 상태를 구별할 수 없다.
그렇기 때문에, 쿠키, 세션, 토큰을 사용해 사용자 상태를 구별할 수 있도록 돕는다.
쿠키 (Cookie)
쿠키는 클라이언트와 서버 간의 통신에서 주고 받는 대화 수단이라고 볼 수 있다.
서버와 클라이언트의 연결 시 쿠키가 생성되어 브라우저(클라이언트)를 통해 관리된다.
쿠키에는 이름, 값, 만료 날짜, 경로 정보 등이 담겨있다.
호스트 별로 쿠키가 생성되기 때문에 사용자의 정보를 구별할 수 있지만
서버에서 따로 인증 과정이 없기 때문에 쿠키만으로 사용자를 인증하고 구별하는 것은 어렵다.
때문에 세션(Session)을 사용해 세션/쿠키 방식으로 사용자의 상태 정보를 확인한다.
세션 (Session)
세션은 서버와 클라이언트의 연결이 활성화되었는지 확인하기 위해 사용된다.
서버와 클라이언트가 연결될 때, 서버는 클라이언트에 대해 유니크한 세션 ID를 부여한다.
그리고 세션 ID를 세션 저장소에 저장한다. (서버 측)
클라이언트는 쿠키를 통해 세션 ID를 기억한다. (클라이언트 측)
사용자 인증 상태를 확인할 때, 클라이언트는 쿠키에 세션 ID를 담아 서버로 전송하고,
서버는 요청 헤더에 담긴 쿠키에서 세션 ID를 세션 저장소에 저장된 세션 ID와 비교한다.
비교를 통해 사용자 상태를 구별한다.
토큰 (Token)
토큰은 인증을 위해 사용되는 암호화된 문자열이다.
사용자 인증 시 서버는 토큰을 생성해 클라이언트에게 전달한다.
사용자의 요청에는 토큰 값이 포함되어 서버에 전달된다.
세션과 다른 점은 서버에서 따로 토큰 값을 저장하지 않는다는 것이다.
세션은 세션 저장소에 세션 ID를 저장하고 값을 비교하지만,
토큰은 토큰의 유효성만을 확인한다.
'Anything' 카테고리의 다른 글
Git reset 후 되돌리기 (0) | 2021.08.09 |
---|---|
Ajax (0) | 2021.07.27 |
Spring Boot JPA에서 LocalDateTime 처리 (0) | 2021.07.10 |
DAO와 Repository의 차이 (0) | 2021.07.09 |
AWS에서 Spring boot 프로젝트 로그인 시간 오래 걸림 (2) | 2021.07.08 |