<용어정리>
1) 쿠키(cookie)란?
쿠키(cookie)란 웹 사이트에 접속할 때 서버에 의해 사용자의 컴퓨터에 저장되는 정보를 의미합니다.
웹 사이트는 이렇게 저장된 사용자의 정보를 클라이언트(client) 측의 컴퓨터에 남겨서 필요할 때마다 재사용합니다. 즉, 특정 호스트에서 생성된 쿠키는 이후 모든 요청마다 서버로 쿠키를 다시 전송합니다.
사용자의 컴퓨터에 마치 과자 부스러기가 남아 있는 것과 같다고 해서 '쿠키(cookie)'라는 명칭이 붙었습니다.
현재 이러한 쿠키는 로그인 정보나 비회원의 장바구니 정보를 저장하는 용도로 많이 활용되고 있습니다.
하지만 사용자의 정보가 컴퓨터에 고스란히 남기 때문에 사생활 침해의 우려가 있으며, 보안과 관련된 이슈를 가지고 있습니다.
2) 세션(Session)이란?
세션(Session)이란 HTTP 프로토콜을 사용하는 인터넷 사용자가 어떤 웹사이트를 방문할 경우, 웹 사이트의 여러 페이지에 걸쳐 사용되는 사용자 정보를 저장하는 방법을 의미합니다. 사용자가 브라우저를 닫아 서버와의 연결을 끝내는 시점까지를 세션이라고 합니다.
앞서 살펴본 쿠키는 클라이언트 측의 컴퓨터에 모든 데이터를 저장합니다.
세션은 서버 내부에 저장되며, 세션의 키값만을 클라이언트 측에 남겨둡니다.
브라우저는 필요할 때마다 이 키값을 이용하여 서버에 저장된 데이터를 사용하게 됩니다.
저장된 값은 반영구적이며, 사용자가 특정 시간동안 사용되지 않을 경우 폐기될 수 있는 정보입니다.
세션은 쿠키와 마찬가지로 연결 지향 통신을 수행하는데 기초적인 요구사항입니다.
방문자가 웹서버에 접속해 있는 상태를 하나의 단위로 보고 세션이라고 칭합니다.
3) Session과 Cookie의 차이
- 쿠키의 경우는 방문자의 정보를 방문자 컴퓨터의 메모리에(클라이언트에) 저장하는 것을 말합니다. 예를 들어, 방문한 사이트를 저장하거나, 비회원의 장바구니 정보등을 저장하는 데에 사용합니다.
- 세션은 방문자의 요청에 따른 정보를 클라이언트가 아닌 웹 서버가 세션 아이디 파일을 만들어 서비스가 돌아가고 있는 서버에 저장을 하는 것을 의미합니다.
<Session기반 인증 동작 방식>
- 사용자가 로그인페이지에서 로그인을 합니다.
- 서버에서 사용자가 보낸 정보가 존재하는 사용자인지 확인합니다.
- 존재하는 사용자인 경우 유일한 세션id를 생성하고 사용자 id와 매핑정보를 저장합니다.
- 클라이언트에 세션id를 쿠키로 저장하도록 전달합니다.
- 이후에 클라이언트에서 서버로 요청을 할 때 서버는 request header의 쿠키 정보(세션id)를 확인하고, 세션id와 매핑되는 id의 사용자로 인식합니다.
<쿠키(cookie)와 세션(session)이 필요한 이유>
HTTP프로토콜은 connectionless하고 stateless합니다. 클라이언트가 서버로 요청을 하고 응답을 받으면 접속을 끊고 상태정보를 저장하지 않는 특징을 가지고 있습니다. 그렇기때문에 쿠키와 세션이 없으면 로그인 상태를 유지하지 않아서 페이지 이동을 하거나 게시판을 작성하는 등의 작업을 할 때마다 로그인을 해야하는 번거로움이 발생합니다.
<Session기반 인증의 특징>
- 서버에서 클라이언트의 session 정보를 메모리나 디스크 또는 DB등을 통해 저장하고 있습니다.
- 세션 기반 인증 방식은 클라이언트로부터 요청을 받으면, 클라이언트의 상태를 서버에서 계속 유지하고 이 정보를 서비스에 이용하는 stateful 서버입니다.
<Session기반 인증의 장점>
- 서버에서 클라이언트의 상태를 유지하고 있으므로, 사용자의 로그인 여부 확인이 용이하고, 경우에 따라서 강제 로그아웃 등의 제재를 가할 수 있습니다.
- 클라이언트가 임의로 정보를 변경시키더라도 서버에서 클라이언트의 상태 정보를 가지고 있으므로 상대적으로 안전합니다.
<Session기반 인증의 단점>
- 서버에서 클라이언트의 상태를 모두 유지하고 있어야 하므로, 클라이언트 수에 따른 메모리나 디스크 또는 DB에 부하가 심합니다.
- 사용자가 많아지는 경우 로드 밸런싱을 통한 서버 확장을 이용해야 하는 데 이 때 세션의 관리가 어려워집니다.
- 웹 브라우저에서 세션 관리에 사용하는 쿠키는 단일 도메인 및 서브 도메인에서만 작동하도록 설계되어 CORS 방식(여러 도메인에 request를 보내는 브라우저)을 사용할 때 쿠키 및 세션 관리가 어렵습니다.
- 멀티 디바이스 환경(모바일, 브라우저 공동 사용 등)에서 로그인 시 중복 로그인 처리가 되지 않는 등의 신경을 써야 할 부분들이 많습니다.
[참고]