C언어로 RESTful server를 만드는 중인데,
세션 관리를 구현해야 한다.
rest의 특징 중 하나가 stateless (무상태성) 이라는데, 상태는 뭐고 세션은 뭐지..😭
어떻게 세션 관리를 해야 하는지 잘 모르겠어서 정리해보려고 한다.
HTTP의 특성 중 하나가 Stateless 이다.
= 클라이언트와 서버가 서로 통신할 때, request-response가 한 번 이루어지면 클라이언트에 대한 정보를 유지하지 않는다.
= 한 번의 통신 후에는 클라이언트와 서버의 관계가 끊어짐
이는 서버가 클라이언트의 정보를 불필요하게 유지하게 되면 서버가 무거워지기 때문이다.
하지만 사용자의 상태 정보의 유지가 필요할 때가 있다.
예)
로그인 정보를 미리 저장하지 않으면 DM 확인, 좋아요 누르기 등의 작업을 할 때마다 로그인을 새로 해야 함
이러한 번거로움을 해결하기 위해 쿠키와 세션으로 세션을 관리한다.
즉, 세션 관리의 목적은 사용자 정보를 일정 조건 동안 유지하는 것이다.
클라이언트(브라우저) 측에 사용자 상태 정보를 저장한다.
간단한 상태 유지에 적합하다.

예) 웹사이트의 "로그인 상태 유지" 기능, 사용자 환경 설정 저장(언어, 테마 등)
서버 측에 사용자 상태 정보를 저장한다.
중요한 정보를 안전하게 관리할 때 사용된다.

예) 로그인 후 사용자 인증 유지, 장바구니 정보 유지, 특정 사용자의 작업 상태 관리

HTTP 연결을 지속적으로 유지하는 방식
클라이언트와 서버 간의 연결을 request-response 이후에도 닫지 않고 유지하여 여러 요청을 동일한 TCP 연결을 통해 처리할 수 있도록 함
매번 새로운 연결을 열고 닫는 오버헤드를 줄여 성능을 개선 및 네트워크 자원 절약


Connection: keep-alive 헤더 를 추가하여 연결 유지keep-alive로 설정Connection: close를 보내야 함Session은 서버가 클라이언트의 상태 정보를 저장하는 방식이다. Cookie 등을 통해 클라이언트를 식별하여 지속적인 상태 관리를 제공한다.
Keep-Alive는 연결 자체를 유지하는 방식이다. 한 번 연결되면 여러 HTTP 요청을 처리할 수 있도록 연결이 유지된다.
참고
https://interconnection.tistory.com/74
https://creamilk88.tistory.com/101
https://etloveguitar.tistory.com/137
🤖 Chat GPT