Session

session이란 client로부터 오는 일련의 Request를 하나의 status로 보고, 그 status를 일정하게 유지하는 기술을 말한다. 다시 말하면 client가 web server에 접속해있는 상태 를 하나의 세션으로 보는 것이다. 브라우저를 닫거나, 서버에서 세션을 삭제하면 세션이 끊기고 없어진다. 세션은 각 클라이언트의 고유 세션id를 부여하는데, 이것으로 각 클라이언트를 구분하여 각 클라이언트의 요구에 맞는 응답을 반환한다.

HTTP(hypertext transfer protocol)

웹에서 데이터를 교환하기 위한 application layer의 규약(규칙, 표준의 집합)을 말한다. client(web browser) <-> server 간에 문서, 이미지, 비디오 등의 리소스를 전송하기 위해서 사용된다. 1991년에 처음 등장한 것으로 internet data transfer의 기반이 된다.

http는 요청과 응답의 프로세스로 이루어진다.

  1. request
    1. 사용자가 웹 브라우저를 통해 web page에 접속할 때, 클라이언트는 서버에 특정 리소스를 요청하는 HTTP request message를 보낸다. 이 요청은 URL을 통해서 get의 방식으로 이루어진다.
  2. response
    1. 클라이언트의 request를 받은 서버는 요청을 처리한 뒤, response를 클라이언트에 전송한다. 404 not found 등과 같은 에러가 날 수도 있고, success가 되어 성공적으로 요청에 대한 처리를 할 수도 있다. 모든 경우에 수에 대해서 개발은 커버를 해줘야한다. 안 그럴 경우 이상한 곳으로 사용자를 보내서 웹 경험을 방해할 수 있다.

protocol

프로토콜은 규약의 집합을 말한다. 여러 상황과 계층에 있어서 약속을 함으로써 오류를 줄이고 개발의 편의성 증대 목적이 있다. 프로토콜을 사용함으로써 데이터 형식, 순서, 전송 방법, 에러 처리 방법 등 통신 중에 발생할 수 있는 여러 상황을 미리 정의한다. 또한 서로 다른 제조사의 장비나 다양한 기술을 사용하는 시스템들 사이에서도 정보를 원활하게 교환할 수 있다. 정보의 교환이 목적이다.

  • 물리 계층(Physical Layer): 하드웨어 전송 기술을 다루며, 데이터를 전기 신호로 변환하여 전송 매체(예: 케이블)를 통해 보냅니다.
  • 데이터 링크 계층(Data Link Layer): 네트워크 장비 간의 물리적 연결을 관리하고, 오류 검출 및 수정 기능을 제공합니다.
  • 네트워크 계층(Network Layer): 데이터 패킷을 발신지에서 목적지로 라우팅하는 기능을 담당합니다. IP 프로토콜이 이 계층에서 작동합니다.
  • 전송 계층(Transport Layer): 두 시스템 간의 신뢰성 있는 데이터 전송을 관리합니다. TCP와 UDP(User Datagram Protocol)가 이 계층에서 작동합니다.
  • 세션 계층(Session Layer): 통신 세션을 설정, 관리, 종료하는 역할을 합니다.
  • 표현 계층(Presentation Layer): 데이터 형식을 변환하여 애플리케이션이 이해할 수 있는 형식으로 만듭니다.
  • 응용 계층(Application Layer): 최종 사용자와 직접 상호작용하는 애플리케이션 프로토콜(HTTP, FTP 등)이 작동하는 계층입니다.

HTTP의 약점과 세션

HTTP는 설계상 각 요청과 응답이 독립적으로 처리되며, 서버는 클라이언트의 이전 상태나 요청 정보를 기억하지 않는다. 이러한 특성은 서버의 처리를 단순화하고 확장성을 높이는 데 도움이 되지만, 사용자가 웹사이트에 로그인하거나 온라인 쇼핑몰 쇼핑카트에 상품을 추가하는 등의 연속된 상호작용을 할 경우에는 문제가 발생할 수 있다. 우선 http의 특징이자 약점을 알아보고 이어 세션이 이러한 약점을 어떤 식으로 보완하는지 알아보자.

  1. connectionless protocol
    1. 클라이언트가 서버에 요청했을 때, 그 요청에 맞는 응답을 보낸 후 연결을 끊는 방식의 처리 방식
  2. stateless protocol
    1. 클라이언트의 상태 정보를 가지지 않는 서버 처리 방식.
    2. 클라이언트와 첫 번째 통신에서 데이터를 주고 받았다고 하여도, 두 번째 통신에서 이전 데이터를 유지하지 않는다.

세션이 없고, 위의 protocol을 strictly하게 지켜야하는 상황이라면 우리는 페이지를 이동할 때마다 로그인을 하고, 장바구니에 넣어놓은 모든 물건들은 페이지를 이동할 때마다 사라질 것이다. status 정보를 유지해야하는 경우들에 대해서 처리하기 위해서 우리는 session, cookie를 사용하게 된다.

세션은 사용자별로 유지되는 정보의 저장소 역할을 한다. 사용자가 웹사이트에 처음 접속할 때, 서버는 고유한 세션 식별자(id)를 생성하고, 이를 클라이언트에 전달한다. 클라이언트는 이후의 모든 요청에 이 세션 식별자를 포함시켜 서버에 전송하고, 서버는 이 식별자를 사용하여 사용자의 상태와 데이터를 추적 및 관리하게 된다. 즉, 방문자가 server에 접속해 있는 상태를 하나의 단위로 보고, 그것을 세션이라고 하는 것이다.

세션은 서버의 메모리나 db에 저장될 수 있으며, 이는 서버가 추가적인 상태 정보를 관리해야한다는 의미이다. 세션은 브라우저를 닫거나, 서버에서 세션을 삭제했을 때 삭제됨으로, 쿠키보다는 보안이 좋다.

세션이 서버에 저장되는 사용자의 정보였다면, 쿠키는 클라이언트(브라우저)에 저장되는 사용자의 정보이다. 비교적 보안이 세션보다는 취약하다. 대신 장점은 빠르다. 서버자원을 사용하지 않기 때문에 자원적인 면에서 세션보다는 light하다는 면이 있다.