JSP + Servlet 기반

moon.kick·2025년 4월 15일

좋아요! 그럼 지금부터 JSP + Servlet 기반 웹 프로젝트에 세션 관련 기능을 고급 수준으로 확장해보겠습니다. 아래 3가지를 모두 적용합니다:


✅ 전체 확장 목표

기능설명
1️⃣ 세션 유지 시간 변경세션 유효시간 설정 (setMaxInactiveInterval)
2️⃣ 세션 리스너 구현세션 생성/소멸 시 이벤트 감지 (HttpSessionListener)
3️⃣ 세션 로그 기록 남기기로그 파일 또는 콘솔에 사용자 로그인/로그아웃 시점 기록

1️⃣ 세션 유지 시간 변경

👉 어디서? LoginCheckServlet.java에서 로그인 성공 후 추가

session.setMaxInactiveInterval(300); // 300초 = 5분 유지

✅ 이 설정은 개별 사용자 세션마다 다르게 줄 수 있음 (관리자: 30분, 일반 유저: 5분 등)


2️⃣ 세션 리스너 만들기

🔧 SessionTrackingListener.java

package 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 애노테이션으로도 등록 가능)


3️⃣ 세션 로그인/로그아웃 로그 남기기

🔧 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가 세션 종료 로그 출력

✅ 결과적으로 얻게 되는 것

  • 로그 추적 가능: 언제 로그인/로그아웃 했는지 확인
  • 사용자 구분 가능: 세션 ID로 개별 세션 파악
  • 유지시간 조정 가능: 보안/서비스 목적에 따라 조정
  • 확장 가능성 ↑: 나중에 DB, ELK, admin dashboard로 연동 가능

필요하면 세션 강제 만료, 동시 로그인 제한, 관리자용 세션 모니터링 JSP 도 구현 가능해요.
어디까지 확장하고 싶나요? 😊

profile
@mgkick

0개의 댓글