세션 트래킹(Session Tracking)은 가상의 연결에 기반한 클라이언트의 상태를 지속적으로 모니터링하는 것을 의미합니다.
세션 트래킹의 목적
HTTP(Hyper Text Trasfer Protocol)은 하나의 요청과 하나의 응답으로 이루어진 전송 프로토콜입니다.
즉 HTTP는 상태 정보를 유지할 수 없는 프로토콜이므로, 이를 보완하기 위해 세션 트래킹이라는 추상적인 개념을 도입했습니다.
이러한 세션 트래킹의 핵심은 인증 관리입니다.
세션 트래킹은 클라이언트의 인증 상태와 인가 상태의 변화를 지속적으로 모니터링하며 접근 제어를 하는 것을 목적으로 합니다.
세션 식별자
동시에 요청을 보내는 수 많은 클라이언트를 고유하게 식별해야만 각 클라이언트의 상태를 트래킹할 수 있습니다.그래서 세션 ID를 통해 각 클라이언트를 식별하여 트래킹을 수행합니다.
간단한 서블릿 코드를 작성하고 cmd를 통해 세션 ID를 확인합니다.
@Log4j2
@NoArgsConstructor
@WebServlet("/TTT")
public class TTTServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
log.trace("service(req, res) invoked.");
HttpSession session = req.getSession();
} //service
} // end class
즉, 최초로 요청을 전송한 클라이언트에게 서버가 쿠키를 통해 세션 ID를 부여하고 한번 세션 ID를 부여받은 클라이언트는 다음 요청 전송 시, 요청 헤더에 세션 ID를 함께 할당하여 전송합니다.그럼 서버는 해당 요청과 세션 ID를 함께 수신함으로서, 세션 트래킹이 수행되며 이러한 세션 ID는 서블릿의 공유 데이터 영역인 Session Scope에 할당됩니다.
여기서 '식별값'은 임의의 문자열값입니다. 일반적으로 "XXX.do" 같은 방식으로 지정합니다.
Command
Command는 클라이언트의 요청을 클래스 객체로 처리하는 것을 의미합니다.객체의 형태로 사용하면 서로 다른 클라이언트의 요청값을 필요에 의해서 저장하거나 취소가 가능하며요청을 처리할 작업을 일반화시켜 요청의 종류와 무관하게 프로그램 작성이 가능하게 구현할 수 있습니다.
구현방법은 Command 패턴을 적용한 Service 클래스를 추가하며 이름은 "XXXXService" 처럼 짓습니다.