[java] 세션 관리 및 타임아웃 설정

웹 애플리케이션을 개발할 때 세션 관리 및 타임아웃 설정은 중요한 부분입니다. 세션은 클라이언트와 서버 간에 상태 정보를 유지하고 공유하기 위한 메커니즘입니다. 이를 통해 사용자의 로그인 상태, 장바구니 내용 등을 유지할 수 있습니다.

자바에서는 세션 관리를 위해 HttpSession 객체를 사용합니다. 이 객체는 웹 컨테이너에서 생성되고 세션을 추적하며, 세션에 저장된 데이터에 접근할 수 있는 메서드를 제공합니다.

세션 생성 및 데이터 저장

세션을 생성하고 데이터를 저장하기 위해서는 먼저 HttpServletRequest 객체를 통해 세션 객체를 얻어와야 합니다. 다음은 세션을 생성하고 데이터를 저장하는 예시 코드입니다.

HttpSession session = request.getSession();
session.setAttribute("username", "john");

위의 예시에서 setAttribute 메서드를 사용하여 “username”이라는 이름으로 “john”이라는 값을 세션에 저장하였습니다. 저장된 데이터는 세션 객체가 유지되는 동안 접근할 수 있습니다.

세션 데이터 접근 및 삭제

저장된 세션 데이터에 접근하려면 getAttribute 메서드를 사용할 수 있습니다. 다음은 세션 데이터에 접근하고 삭제하는 예시 코드입니다.

String username = (String) session.getAttribute("username");
session.removeAttribute("username");

위의 예시에서 getAttribute 메서드를 사용하여 “username”이라는 이름으로 저장된 데이터를 얻어왔습니다. 데이터를 사용한 후, removeAttribute 메서드를 사용하여 세션에서 해당 데이터를 삭제하였습니다.

세션 타임아웃 설정

세션 타임아웃은 세션 객체가 유효한 시간을 말합니다. 일정 시간 동안 클라이언트의 요청이 없을 경우 세션은 자동으로 만료되며, 저장된 데이터도 함께 삭제됩니다. 세션 타임아웃은 web.xml 파일이나 애너테이션을 통해 설정할 수 있습니다.

web.xml을 통한 세션 타임아웃 설정

web.xml 파일에서 세션 타임아웃을 설정하기 위해서는 아래의 코드를 추가해야 합니다.

<session-config>
    <session-timeout>30</session-timeout>
</session-config>

위의 예시에서는 세션 타임아웃을 30분으로 설정하였습니다.

애너테이션을 통한 세션 타임아웃 설정

애너테이션을 사용하여 세션 타임아웃을 설정할 수도 있습니다. 다음은 애너테이션을 사용한 세션 타임아웃 설정의 예시입니다.

import javax.servlet.annotation.WebListener;
import javax.servlet.annotation.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

@WebListener
public class SessionListener implements HttpSessionListener {
    @Override
    public void sessionCreated(HttpSessionEvent event) {
        HttpSession session = event.getSession();
        session.setMaxInactiveInterval(1800); // 30 minutes
    }
}

위의 예시에서는 sessionCreated 메서드를 사용하여 세션을 생성할 때 타임아웃을 30분으로 설정하였습니다.

세션 관리 및 타임아웃 설정은 웹 애플리케이션 개발에 있어서 중요한 부분입니다. 이를 통해 사용자 경험을 향상시키고, 세션 데이터를 안전하게 관리할 수 있습니다.

참고 자료