이제 곧 "SpringBoot 웹 개발 강의" 에서 블로그 회원 기능 개발을 진행하게 된다!
회원가입/로그인/로그아웃과 같은 기본적인 기능부터 회원정보를 수정/삭제하는 것까지 본격적으로 개발에 들어가기 전, 쿠키와 세션에 대해 정리하고 넘어가면 도움이 많이 될 것 같아 포스팅해보려고 한다😊
쿠키와 세션의 특징을 알아보기 전에 먼저 HTTP 프로토콜의 특징을 먼저 정리하면 도움이 많이 된다.
HTTP 프로토콜의 특징은 여러가지가 있지만 이번 포스팅에서 다룰 특징은 "비연결성" 과 "비상태성" 총 두 가지이다.
비연결성은 클라이언트가 요청을 한 후 응답을 받으면, 그 연결이 지속되지 않고 끊기는 것을 의미한다.
비상태성은 한 번 통신이 끝나면 상태를 더 이상 유지하지 않는 것을 의미한다.
연결을 끊는 순간 클라이언트와 서버의 통신도 끝나며 상태 정보 또한 유지하지 않는다.
서버와 클라이언트 사이에 계속해서 커넥션을 유지하지 않기 때문에 서버 리소스 낭비가 줄어드는 것은 장점이지만, 통신을 할 때마다 새로운 커넥션을 만들어야하기 때문에 클라이언트 측면에서는 상태를 유지하기 위해 추가적인 절차를 가져야 한다는 단점도 있다.
한마디로 만약 같은 사용자가 웹페이지에서 다른 기능을 요청한다고 해도, 서버 입장에서는 요청을 한 이 클라이언트가 방금 전과 같은 사용자인지 알 수 없다는 것이다.
우리가 자주 사용하는 웹 사이트를 보면 한 번 로그인을 하고 나면 다음에 그 사이트에 방문했을 때부터는 다시 로그인 할 필요 없이 여러 기능들을 이용할 수 있고,
심지어 브라우저를 종료했다가 나중에 다시 접속했을 때도 그 로그인 상태를 유지할 수도 있다!
이와 같이 HTTP의 비연결성과 비상태성의 특징을 보완해서 서버가 클라이언트를 식별하게 해주는 것이 바로 쿠키와 세션이다!
쿠키는 웹 사이트에 접속할 때 생성되는 정보를 담은 임시 파일이다.
HTTP에서 클라이언트의 상태 정보를 클라이언트의 PC에 저장하였다가 필요시 정보를 참조하거나 재사용할 수 있다.
클라이언트 로컬(local
)에 저장되며 키와 값(key, value
)이 들어있는 String
형식의 데이터이다.
쿠키는 서버에서 HTTP Response Header
에 Set-Cookie
속성을 이용하여 클라이언트에 쿠키를 제공한다.
데이터가 서버가 아닌 사용자의 PC에 저장되기 때문에, 임의로 고치거나 지울 수 있고, 가로채기도 쉬워 보안이 취약하다는 단점이 있다.
따라서, 쿠키에는 민감하거나 중요한 정보를 담는 것은 위험하다.
세션은 일정 시간동안 같은 사용자(브라우저)로부터 들어오는
일련의 요구를 하나의 상태로 보고, 그 상태를 일정하게 유지시키는 기술이다.
(여기서 일정 시간라고 함은, 방문자가 웹 브라우저를 통해 웹 서버에 접속한 시점으로부터 웹 브라우저를 종료하여 연결을 끝내는 시점을 말한다.)
즉, 방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그것을 세션이라고 한다!
세션은 쿠키를 기반하고 있지만, 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리 세션은 서버 측에서 관리한다.
세션에서는 클라이언트를 구별하기 위해 각 클라이언트에게 고유 ID를 부여하는데,
이 세션 ID로 클라이언트를 구분해서 클라이언트의 요구에 맞는 서비스를 제공하기 때문에 보안 면에서 쿠키보다 우수하다.
그러나 사용자가 많아질수록 서버 메모리를 많이 차지하게 된다는 단점이 존재하고, 동접자 수가 많은 웹 사이트인 경우 서버에 과부하를 주게 되므로 성능 저하의 요인이 될 수 있다.
text
, Object
형식으로 저장된다.쿠키 < 세션
Request/Response
에서 스나이핑 당할 위험이 있어 보안이 비교적 취약하다. 쿠키 > 세션