웹 서버는 수많은 클라이언트를 어떻게 구별하고 결과를 반환해줄까?

웹 서버는 HTTP 프로토콜 메시지의 헤더를 읽고 클라이언트에게 적절한 결과 값을 반환함.

헤더에는 클라이언트의 정보와 요청의 내용을 구체화하는 데이터가 포함되는데 클라이언트의 인증 정보 또한 포함될 수 있음. 이 인증 정보는 Cookie와 Session에 저장됨.

쿠키


Key와 Value로 이뤄진 일종의 단위

Connectionless, Stateless 특징을 갖는 HTTP에서 클라이언트를 기억하기 위해 Cookie가 탄생함.

서버가 클라이언트에게 쿠키를 발급하면 클라이언트는 서버에 요청을 보낼 때마다 쿠키를 같이 전송함. 그러면 서버는 이 쿠키를 확인하여 클라이언트를 구분할 수 있음.

용도

클라이언트의 정보 기록과 상태 정보를 표현하는 용도로 사용함.

<aside>

정보 기록 예시

웹 서비스 사용 시 “다시 보지 않기”, “7일 간 표시하지 않기” 버튼이 있는 팝업 창이 뜨곤 함. 웹 서버는 각 클라이언트의 팝어버 옵션을 기억하기 위해 쿠키에 이 정보를 기록하고 쿠키를 통해 팝업 창 표시 여부를 판단함.

</aside>

<aside>

상태 정보 예시

많은 웹 사이트에서 개개인에게 맞춤형 서비스를 제공함. 이를 위해 웹 서버에서는 수많은 클라이언트의 로그인 상태와 이용자를 구별해야 하는데, 이때 클라이언트를 식별할 수 있는 값을 쿠키에 저장해 사용함.

</aside>

쿠키 변조

쿠키는 클라이언트가 가지고 있고 수정할 수 있으므로 악의적으로 다른 클라이언트의 정보 빼낼 수 있음.

세션


쿠키에 인증 상태를 저장하지만 클라이언트가 인증 정보를 변조할 수 없게 하기 위해 Session을 사용함.

어떻게 변조할 수 없게 하나?