좋아요! 그럼 지금부터 JSP + Servlet 기반 웹 프로젝트에 세션 관련 기능을 고급 수준으로 확장해보겠습니다. 아래 3가지를 모두 적용합니다:
| 기능 | 설명 |
|---|---|
| 1️⃣ 세션 유지 시간 변경 | 세션 유효시간 설정 (setMaxInactiveInterval) |
| 2️⃣ 세션 리스너 구현 | 세션 생성/소멸 시 이벤트 감지 (HttpSessionListener) |
| 3️⃣ 세션 로그 기록 남기기 | 로그 파일 또는 콘솔에 사용자 로그인/로그아웃 시점 기록 |
👉 어디서? LoginCheckServlet.java에서 로그인 성공 후 추가
session.setMaxInactiveInterval(300); // 300초 = 5분 유지
✅ 이 설정은 개별 사용자 세션마다 다르게 줄 수 있음 (관리자: 30분, 일반 유저: 5분 등)
SessionTrackingListener.javapackage listener;
import java.util.Date;
import jakarta.servlet.http.HttpSessionEvent;
import jakarta.servlet.http.HttpSessionListener;
public class SessionTrackingListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("[세션 생성됨] ID: " + se.getSession().getId() +
" | 시간: " + new Date());
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("[세션 종료됨] ID: " + se.getSession().getId() +
" | 시간: " + new Date());
}
}
web.xml에 리스너 등록<listener>
<listener-class>listener.SessionTrackingListener</listener-class>
</listener>
(💡 또는 @WebListener 애노테이션으로도 등록 가능)
LoginCheckServlet.java 확장System.out.println("[LOGIN] 사용자: " + userId + " | 시간: " + new Date());
LogoutServlet.java 확장System.out.println("[LOGOUT] 사용자: " + session.getAttribute("userId") +
" | 시간: " + new Date());
💡 콘솔 출력 외에 FileWriter를 이용해 log.txt 파일에 저장해도 돼요 (원하면 그렇게 바꿔줄게요)
try (FileWriter fw = new FileWriter("D:/logs/session.log", true);
PrintWriter pw = new PrintWriter(fw)) {
pw.println("[LOGIN] 사용자: " + userId + " | 시간: " + new Date());
} catch (IOException e) {
e.printStackTrace();
}
(단, 경로는 서버 권한과 맞춰서 설정 필요)
사용자 로그인 (LoginCheckServlet)
→ 세션 생성 + 속성 저장 + 유지시간 300초
→ 콘솔/파일에 로그인 로그 출력
→ SessionTrackingListener가 세션 생성 로그 출력
사용자 활동 후 LogoutServlet으로 이동
→ 세션 무효화
→ 콘솔/파일에 로그아웃 로그 출력
→ SessionTrackingListener가 세션 종료 로그 출력
필요하면 세션 강제 만료, 동시 로그인 제한, 관리자용 세션 모니터링 JSP 도 구현 가능해요.
어디까지 확장하고 싶나요? 😊