1. HTTP 통신
웹 브라우저와 웹 서버는 HTTP라고 불리는 통신 규약(프로토콜)을 사용해서 통신합니다. HTTP 통신은 브라우저에서 서버로 요청(request)하고, 서버에서 브라우저로 응답(respense)할 때 어떻게 할 것인지를 나타내는 규약입니다.
예를 들어, 웹 브라우저 주소를 입력(예- http://www.naver.com)하고 요청을하면 그 주소에 맞는 웹 서버를를 찾을 것이고 이를 발견하게 되면 그 웹 서버(Naver)에 index.html이라는 파일을 보고 싶다고 요청을 합니다. 서버가 이러한 요청을 받으면 index.html파일의 내용을 응답해주고 요청한 사람은 Naver화면을 볼 수 있게 되는 것입니다.
이처럼 HTTP통신은 요청과 응답으로 만들어 집니다.
2. 쿠키
HTTP 통신은 기본적으로 무상태 통신입니다. 무상태 통신이란 같은 URL에 여러 번 접근해도 같은 데이터를 돌려주는 통신을 말합니다. 조금 더 자세히 말하면 이전에 어떤 데이터를 가져갔는지 등에 대한 정보(상태: state)를 전혀 저장하지 않는 통신을 말합니다.
이로 인해 무상태 HTTP 통신으로는 회원제 사이트를 만들 수 없습니다. 과거의 정보가 저장되지 않으면 장바구니아 어떤 상품을 추가했는지, 페이지를 이동할 때마다 로그인을 했는지 알수가 없기 때문입니다.
그래서 웹 브라우저 쿠키(Cookie)라는 구조가 추가됐습니다. 이는 웹 브라우저를 통해 방문하는 사람의 컴퓨터에 일시적으로 데이터를 저장하는 기능입니다.
다만, 쿠키에는 제약이 있습니다. 1개의 쿠키에 저장할 수 있는 데이터의 크기가 4096바이트로 제한됩니다.
3. 세션
쿠키는 HTTP 통신 헤더를 통해 읽고 쓸 수 있습니다. 또한 방문자 또는 확인자 측에서 원하는 대로 변경할 수 있습니다. 따라서 변경하면 문제가 생길 수 있는 비밀번호 등의 비밀 정보를 저장하기에는 알맞지 않습니다.
그래서 세션이라는 구조를 사용하게 됐습니다. 사실 세션도 쿠키를 사용해 데이터를 저장한다는 점은 같습니다만, 쿠키에는 고유자 고유 ID만 저장하고, 실제 모든 데이터에는 제한이 없다는 것도 중요한 특징입니다.
HTTP 통신은 무상태 통신이지만 세션을 이용하면 쿠키에 기록돼 있는 고유 ID를 키로 사용해 상태를 변수로 확인할 수 있습니다. 따라서 통신을 계속해서 진행하는 것 같은 상태유지통신(stateful)을 구할 가능하게 해줍니다.
일단 방문자가 처음 웹 사이트에 방문할 때 쿠키에 세션 ID를 기록합니다. 그리고 웹 서버에는 세션 ID를 기반으로 데이터 파일을 만들고, 여기에 저장하고 싶은 변수의 값을 저장해둡니다. 그리고 사용자가 다시 서버에 접근하면 쿠키의 세션 ID를 기반으로 저장한 변수를 확인하는 것입니다.