🗂️ Spring의 Session
- Spring에서는 Session을 쉽게 다루도록
@SessionAttribute라는 어노테이션이 제공됨
📚 @SessionAttribute란?
| 항목 | 설명 |
|---|---|
| 🧷 생성 역할 ❌ | request.getSession(true)처럼 세션을 새로 만들지 않음 |
| 🔍 조회만 가능 | 이미 세션이 존재하는 경우에만 사용해야 함 |
| 🔧 로그인 여부 판별 | required = false를 통해 로그인 여부 조건 분기 처리 가능 |
🧪 사용 예시
@SessionAttribute(name = Const.LOGIN_USER, required = false) UserResponseDto loginUser
→ 로그인한 경우: 세션에서 사용자 정보를 받아옴
→ 로그인하지 않은 경우: loginUser == null
🖥️ 컨트롤러 예시 (SessionHomeController)
@GetMapping("/v2/session-home")
public String homeV2(
@SessionAttribute(name = Const.LOGIN_USER, required = false) UserResponseDto loginUser,
Model model
) {
if (loginUser == null) return "session-login"; // 로그인 X
model.addAttribute("loginUser", loginUser); // 로그인 O
return "session-home";
}
📌 세션 유무만 판별하면 되므로 코드가 훨씬 간결해짐
💬 URL에
jsessionid가 보이는 이유는?
- 일반적으로는 Cookie를 통해 Session이 유지됨
- 하지만 Cookie를 지원하지 않는 브라우저나 설정에서는
jsessionid를 URL로 전달함
🧵 작동 원리
Set-Cookie로 JSESSIONID 저장URL?jsessionid=12345abc 형태로 세션 식별자를 포함시킴⚙️ URL에 jsessionid 안 나오게 하려면?
application.propertiesserver.servlet.session.tracking-modes=cookie
application.ymlserver:
servlet:
session:
tracking-modes: cookie
✅ 오직 쿠키 방식으로만 세션을 추적함 (보안 ↑)
📚 Session 정보
HttpSession은 Session을 간편하게 사용할 수 있도록 다양한 기능을 지원함
🔍 코드 예시 (SessionController)
@GetMapping("/session")
public String session(HttpServletRequest request) {
HttpSession session = request.getSession(false);
if (session == null) return "세션이 없습니다.";
log.info("session.getId()={}", session.getId());
log.info("session.getMaxInactiveInterval()={}", session.getMaxInactiveInterval());
log.info("session.getCreationTime()={}", session.getCreationTime());
log.info("session.getLastAccessedTime()={}", session.getLastAccessedTime());
log.info("session.isNew()={}", session.isNew());
return "세션 조회 성공!";
}
🧾 HttpSession 정보 목록
| 메서드 | 설명 | 예시 |
|---|---|---|
getId() | 세션 ID (JSESSIONID) 확인 | a9c8x2e1-... |
getMaxInactiveInterval() | 세션 유효 시간 (초 단위) | 1800초 = 30분 |
getCreationTime() | 세션이 처음 만들어진 시간 | 2024-12-09 15:40:23 |
getLastAccessedTime() | 마지막으로 접근한 시간 | 2024-12-09 15:40:23 |
isNew() | 이 세션이 새로 생성된 것인지 여부 | true / false |
🧠 요약 정리
| 구분 | 핵심 내용 |
|---|---|
🍥 @SessionAttribute | 세션에서 값을 간단하게 꺼내쓸 수 있는 Spring 기능 |
| 🔐 세션 유지 방식 | 기본은 Cookie 방식 / jsessionid는 보조 수단 |
| 🧾 세션 정보 조회 | HttpSession을 통해 상세 정보 확인 가능 |
| ⚙️ 설정 관리 | tracking-modes=cookie 로 URL 노출 방지 가능 |
| ☑️ 실무 팁 | 로그인 여부 확인에는 @SessionAttribute + required=false 조합이 깔끔함 |