세션(Session)

Heena·2022년 8월 9일
0
post-thumbnail

세션(Session)

세션(Session)은 일정 시간(방문자가 웹 브라우저를 통해 웹 서버에 접속한 시점부터 웹 브라우저를 종료하고 연결을 끝내는 시점)동안 같은 사용자(브라우저)로부터 들어오는 일련의 요구를 하나의 상태로 보고, 그 상태를 유지하는 기술.
즉, 방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그것을 세션이라고 한다.

사용 이유

세션은 HTTP 프로토콜의 특징을 보완하기 위해 사용한다.

HTTP 프로토콜의 특징

  1. Connectionless 프로토콜(비연결 지향)
    클라이언트가 서버에 요청(Request)을 했을 때, 그 요청에 맞는 응답(Response)을 보낸 후 연결을 끊음
  2. Stateless 프로토콜
    연결을 끊는 순간 클라이언트와 서버의 통신이 끝나면 상태 정보를 유지하지 않음

서버-클라이언트 통신시 통신이 연속적으로 이어지지 않고(Connectionless), 상태 정보가 유지되지 않는(Stateless) HTTP 프로토콜 속성으로 인해 사용자 정보가 필요한 경우, 통신시 반복적으로 연결과 인증을 해야 한다.

그러나 세션을 사용하여 사용자 인증(로그인)이 완료된 상태를 유지함으로써 반복적으로 사용자 인증(로그인)을 해야 할 필요가 없어진다.

특징

웹 서버에 웹 컨테이너의 상태를 유지하기 위한 정보를 저장한다. 서버 용량이 허용하는 한에서 저장 데이터에 제한은 없다. 세션 정보를 저장하는 장소는 서버 메모리일수도 있지만 다중 서버 환경에서는 외부 저장소를 사용한다.

접속 시간에 제한을 두어 일정 시간 응답이 없다면 정보가 유지되지 않도록 설정할 수 있으나 브라우저가 종료되면 만료 기간에 상관없이 삭제된다.

각 클라이언트에게 고유 ID를 부여하고, 서버는 세션 ID로 클라이언트를 구분하여 클라이언트의 요구에 맞는 서비스를 제공한다.

세션은 서버에 저장되기 때문에 비교적 보안성이 좋으나 서버의 자원을 사용하기 때문에 서버의 자원에 한계가 있고 처리가 요구되어 비교적 속도가 느린 편이다.

# 세션 한계
1. 사용자가 많아질수록 서버의 메모리를 많이 차지하게 됨
2. 동접자 수가 많은 서버의 경우, 과부화로 인해 성능 저하의 요인이 됨

반면 쿠키는 클라이언트에 저장되기 때문에 변질의 위험 및 스니핑을 당할 우려가 있어 보안에 취약하나 서버 요청을 필요로 하지 않기 때문에 속도가 빠르다.

때문에 세션은 쿠키를 기반으로 동작한다. 사용자 정보는 클라이언트 측이 아닌 서버 측에서 관리하고, 클라이언트는 서버로부터 세션 정보를 찾기 위한 세션 ID만 전달받는다.

동작 방식

  1. 클라이언트에서 페이지 요청(웹사이트 접속)
  2. 서버는 세션 ID를 만들고, 해당 사용자 정보를 세션 ID와 함께 저장
  3. 생성한 세션 ID를 쿠키에 담아 클라이언트에 전달
    (Response Header에 Set-Cookie 속성 사용)
  4. 전달받은 쿠키는 클라이언트에 저장
  5. 이후 다시 클라이언트에서 서버에 요청할 때, 요청과 쿠키를 함께 전달
    (브라우저에 의해 자동 처리, 요청 시 자동 전달되는 쿠키 특징)
  6. 서버는 전달받은 쿠키에 있는 세션 ID를 활용하여 해당 요청 처리하고 응답

쿠키와 세션 비교하기

쿠키(Cookie)세션(Session)
저장 위치클라이언트서버
저장 방식하드 디스크 내 텍스트 파일웹 컨테이너 내 객체
저장 형식TextObject
리소스클라이언트 리소스서버 리소스
용량 제한- 클라이언트 : 총 쿠키 300개
- 도메인 : 쿠키 20개
- 쿠키 : 4KB
서버 허용 범위 내
(용량 제한 없음)
만료 시점만료 시점(Expires) 설정시 까지
미설정시 세션 종료시 까지
브라우저 종료시
유효 기간 설정 가능
처리 속도빠름느림
보안성낮음높음
profile
Hello, I am Heena :)

0개의 댓글