본문 바로가기

프로그래밍

세션(session)이란 무엇인가?

What is Session?

HTTP(HyperText Transfer Protocol 이하 HTTP)를 통해 Client와 Server간 통신하는 맥락에서 session의 의미는 상태를 가지지 않는 HTTP로 통신할 때 클라이언트로부터 서버에 전달된 요청이 동일한 사용자의 요청임을 서버에서 식별하기 위한 기술이다.

Why use Session?

HTTP의 특징은 상태를 가지지 않는다. 상태를 가지지 않는 다는 것은 앞의 요청과 뒤의 요청이 어떤 연결고리도 가지지 않는 것이다. 따라서 상태를 가지 않는 사용자A의 여러 요청을 서버는 동일한 사용자A로부터 요청된 것임을 알 수 없다. 동일한 사용자가 보낸 요청임을 알기 위해 session을 사용한다.

How Session works?

일반적으로 백엔드 개발자가 session을 직접 생성하지 않는다. 서버로부터 생성된 세션을 가져다 사용한다.

서버는 사용자의 요청이 서버에 들어오면 해당 요청에 대해 세션을 생성한다. 조금 더 정확히는 (톰캣 기준) 서버에 세션의 라이프사이클(생성, 소멸)을 관리하는 세션 매니저가 있다. 이 매니저가 세션을 생성하고 세션들이 모여있는 세션 풀을 관리한다.

Session은 여러가지 정보를 가지지만 그 중에 세션의 식별자인 Session Id와 세션에 각종 정보를 담을 수 있는 Session Attributes가 있다.

Usage Example

session을 사용하면 서로 다른 요청(페이지의 변경)이 있어도 로그인을 유지할 수 있다.

Reference

Tomcat Source - HttpSession(Interface), StandardSession(Class), Manager(Interface), StandardManager(Class)