
웹 브라우저에 저장되는 작은 크기의 텍스트 파일을 쿠키라고 하며, 사용자가 브라우저를 이용하면서 생성된 정보들을 저장해둠으로써 보다 나은 사용자 경험을 제공하기 위해 사용된다.
사용자는 브라우저의 설정 탭이나 개발자 도구에서 쿠키파일을 확인하거나 수정, 삭제할 수 있다.
쿠키는 사용자 뿐만 아니라 제3 자도 조회할 수 있기 때문에 주로 공개해도 상관없는 정보들을 저장하며, 개인정보같이 보안상 민감한 정보를 저장하는 것은 피해야 한다.
서버와 통신할 때는 기본적으로 연결된 상태가 유지되지 않는다. 즉, 한 번의 요청과 응답이 끝나면 연결이 끊어지며, 이전에 서버와 연결되었을 때의 정보나 상태가 저장되지 않는다. 따라서 사용자가 로그인에 성공하더라도 다른 웹페이지로 이동하면 다시 로그인 정보를 보내야 로그인 상태가 유지된다.
이러한 문제를 해결하기 위해 세션이 탄생했다. 세션은 클라이언트와 서버가 연결되었을때 연결된 상태를 유지해주는 역할을 한다.
사용자가 로그인에 성공할 경우 서버는 해당 정보를 서버 메모리에 저장하고, 해당 메모리와 연결된 세션 ID를 발급해 클라이언트에 전달한다.

클라이언트는 전달받은 세션 ID를 쿠키에 저장한 뒤 서버에 작업을 요청할 때마다 세션 ID를 함께 보낸다.
서버에서는 작업 요청과 함께 세션 ID를 전달 받게되면, 해당 세션 ID를 확인해 연결된 사용자 정보를 가져온다. 이러한 방식으로 사용자의 정보를 불러와 로그인 상태를 유지할 수 있게된다.

세션방식은 메모리에 사용자의 로그인 정보를 저장해서 관리하기 때문에 빠르고 안전하지만, 서버의 메모리 용량에 따라 처리할 수 있는 용량이 제한적이라는 단점이 있다. 특히 서버의 이용자가 많아질 경우 세션방식을 사용해 처리한다면 메모리 공간이 부족해져 서버의 부하가 상당히 커지게 된다.
그래서 세션의 단점을 해결하기 위해 토큰을 발급하는 방식이 탄생하게 된다.
사용자가 로그인을 하게되면 서버에서는 세션방식처럼 고유한 값을 생성한다. 이때 메모리에 사용자의 정보를 저장하는 대신 생성하는 값에 사용자의 로그인 정보를 포함시켜 암호화 한 뒤 고유한 값을 생성하는데 이 값을 토큰 이라고 한다.

클라이언트는 생성된 토큰을 전달받아 세션 ID와 같이 쿠키에 저장한 뒤 서버에 요청을 보낼때 마다 토큰값을 함께 전달한다. 서버에서는 전달받은 토큰값을 확인해 자신이 발급한 토큰임을 확인한 뒤 해당 값에 저장된 로그인 정보를 통해 로그인 상태를 유지한다.

세션방식과는 다르게 토큰방식은 서버 메모리에 정보를 저장할 필요가 없기 때문에 메모리의 제약에서 자유롭다.
하지만 세션방식은 로그인 정보를 서버에서 관리하기때문에 유효기간과 상관없이 원하는 경우 사용자의 로그인을 만료시키는 것과 같은 통제가 가능한데, 토큰의 경우에는 사용자의 정보를 서버가 관리하지 않기때문에 유효기간이 만료되기 전까지는 통제가 불가능하다는 단점이 있다.
이처럼 토큰방식은 서버의 통제가 불가능하기 때문에 정보를 탈취당할 가능성이 높은데, 토큰의 경우 쿠키와 같이 만료기간을 지정하는게 가능하기 때문에 만료기간을 짧게 지정하여 이러한 피해를 최소화 시킬 수 있다.
소프트웨어를 사용하다보면 여러가지 데이터를 서버로부터 전송받아 사용하게 된다.
이러한 데이터의 전송에는 시간과 비용이 소요되는데, 특히 크기가 큰 데이터일수록 더 큰 비용과 시간이 소요된다. 또한 해당 데이터가 호출 될때마다 서버에 요청을 보내 계속해서 같은 데이터를 받아온다면 무의미한 사용량이 늘어나게된다.
이러한 문제해결을 위해 캐시가 등장한다.
캐시는 전송받은 데이터를 저장했다가 필요할 때마다 사용하는 방법으로 데이터를 호출할 때마다 서버에서 받아오지 않고 저장한 데이터를 가져오는 방식이다. 따라서 데이터의 사용량을 효과적으로 줄일 수 있으며, 반복해 데이터를 전송받는데 낭비되는 시간과 자원을 줄일 수 있다.
캐시를 사용하지 않고 매번 서버에서 전송되는 것은 사용자에게도 부담과 불편함을 주지만, 이용자가 많은 서버의 경우에도 특히 큰 부담을 준다. 서버에 수많은 요청들이 끊임없이 들어온다면 이를 처리하면서 필연적으로 서버에는 부하가 생기기 마련이다.
이러한 문제를 해결하기 위해 등장한 방식이 바로 CDN이다.
CDN은 실제 물리적으로 분산된 여러개의 서버들을 사용하는 방식으로, 사용자가 콘텐츠를 요청할 경우 사용자와 가까운 서버에 전송을 요청하고, 처리하는 방법을 사용해 전송속도를 향상시킬 수 있는 방법을 말한다.

일정규모 이상의 서비스들은 CDN을 사용하여 사용자의 요청을 분산처리한다. 서버가 세계 각지에 세워진 캐싱용 서버에 전달되어야하는 데이터를 보내면, 캐시 서버에서는 해당 데이터를 캐시한다. 사용자는 메인 서버가 아닌 사용자와 가장 가까운 캐시 서버에 요청을 보내고 캐시된 데이터를 받아옴으로써 보다 빠르게 데이터를 전달받을 수 있게된다.
CDN을 사용하면 메인 서버는 캐시 서버에 데이터를 한 번 씩만 전송하면 되고, 캐시 서버에서 사용자의 요청을 처리하기 때문에 메인 서버의 부담이 줄어들게 된다. 대량의 데이터를 전송해야하는 서비스 (유튜브나 넷플릭스같은 서비스)에는 필수적으로 CDN이 요구된다.