TIL :: 쿠키와 세션
오늘은 회원가입/ 로그인쪽 코드를 작성하며 공부하다가 쿠키,세션에 대해 공부를 한 것을 남겨본다.
1.쿠키란 (Cookie)?
쿠키는 브라우저(로컬)에 저장되는 키와 값들이 들어있는 데이터 파일이다. 사용자 인증에 유효시간을 정할수 있으며, 브라우저가 종료되어도 인증이 유지된다는 특징이 있다. 그리고 쿠키는 브라우저 상태정보를 로컬에 저장했다가 참조한다.
사이트에 들어가면 로그인을 할때 "아이디와 비밀번호를 저장하시겠습니까?" 라는 메세지나 장바구니 기능, 자동로그인 같은 것들이 쿠키를 사용하는 예시들이다.
2.쿠키 구성 요소
@이름 : 쿠키를 구별하는 이름
@값 : 쿠키이름에 담긴 값
@유효시간 : 쿠키의 유지시간
@도메인 : 쿠키를 전송할 도메인
@경로 : 쿠키를 전송할 요청경로
3.쿠키의 동작 방식
브라우저가 페이지를 요청 => 서버에서 쿠키생성 => HTTP헤더에 쿠키포함 시켜서 응답(res) => 브라우저가 종료되어도 쿠키에 만료시간을 설정했다면 클라이언트에서 보관 => 같은요청을 하면 HTTP헤더에 쿠키를 함께 보냄 => 서버에서 쿠키를 읽고 이전 정보에서 변경/업데이트할게 있으면 변경해서 HTTP 헤더에 포함시켜 응답
1. 세션(Session) 이란 ?
세션은 쿠키를 기반으로 하고 있지만, 사용자 정보를 브라우저에 저장하는 쿠키와 달리 세션은 서버에서 관리한다.
서버에서는 브라우저를 구분하기 위해 세션ID를 부여하고, 브라우저를 종료할 때까지 인증상태를 유지한다. 물론 접속 시간에 제한을 두어서 일정 시간동안 응답이 없으면 정보가 유지되지 않게 설정이 가능하다. 사용자에 대한 정버를 서버에 두기 때문에 쿠키보다 보안이 좋지만, 사용자가 많으면 많은 서버 메모리를 차지하게 된다. 한마디로 동접자수가 많으면 서버에 과부하를 줘서 성능이 저하될 수도 있다.
브라우저에서 요청을 보내면 해당서버에서 클라이언트에게 고유ID를 부여하는데 이게 바로 세션ID 이다.
주로 로그인과 같은 보안이 중요한 작업에 사용이 된다.
2.세션의 동작 방식
클라이언트가 서버에 접속시 세션ID를 발급 => 세션 ID에 대해 쿠키를 사용해서 저장함 => 클라이언트는 서버에 요청을 할때 , 쿠키의 세션ID를 같이 서버에 전달 => 서버는 세션 ID를 전달받아서 세션에 있는 클라이언트 정보를 가져와서 사용 => 클라이언트 정보를 가지고 서버 요청을 처리하여 클라이언트에게 응답
그럼 세션이 보안도 좋고 사용하면 좋을껏 같은데 왜 쿠키를 사용할까 ?
- 세션은 서버의 자원을 사용하기 때문에 무분별하게 만들다보면 서버의 메모리가 감당할 수 없어 사라질 수도 있고 속도가 느려질수 있기때문에 쿠키가 유리한 경우도 있다. 그래서 상황에 따라 적절하게 사용하면 될 것같다.