728x90
Spring Boot에서 세션 관리를 효율적으로 구현하기 위해 Enum을 활용하는 방법을 살펴보겠습니다. 특히, Enum을 사용하여 세션의 key를 체계적으로 나열하고 관리하는 것이 핵심입니다. 이 접근 방식은 세션 관리의 일관성을 유지하고, 코드의 가독성과 유지보수성을 크게 향상시킵니다. 각 세션 키를 Enum에 정의함으로써, 세션 데이터를 저장하고 조회할 때 발생할 수 있는 실수를 줄일 수 있습니다. 이번 포스팅에서는 이 방법을 간단하고 명확하게 설명하겠습니다.
1. SessionKeys 생성
@RequiredArgsConstructor
public enum SessionKeys {
// key 를 나열
USER_VO("사용자 정보", UserVO.class),
ROOM_VO("채팅방 정보", RoomVO.class);
// 파라미터 정보 나열
public final String content;
public final Class className;
}
- Session 으로 사용할 Key들을 Enum으로 나열합니다.
2. Util 구현
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
public class RequestUtils {
/**
* 현재 request 가져오기
*/
public static HttpServletRequest getCurrentRequest() {
try {
return ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
} catch (Exception e) {
return null;
}
}
/**
* 현재 세션 가져오기
*/
public static HttpSession getSession() {
return getCurrentRequest().getSession();
}
}
- Request에 쉽게 접근하기 위해 RequestUtil 클래스 생성
3. SessionManager 구현
import com.myapi.mymsgapi.comm.exception.MyBizException;
import com.myapi.mymsgapi.comm.types.ExceptType;
import com.myapi.mymsgapi.comm.utils.RequestUtils;
import jakarta.servlet.http.HttpSession;
public class SessionManager {
private static boolean exists(final SessionKeys sessionKeys) {
return RequestUtils.getSession().getAttribute(sessionKeys.name()) != null;
}
public static void put(final SessionKeys sessionKeys, final Object object) {
if (!sessionKeys.usageClass.isInstance(object)) {
throw new MyBizException(ExceptType.SESS001); // 세션타입이 일치하지 않습니다.
}
RequestUtils.getSession().setAttribute(sessionKeys.name(), object);
}
public static void remove(final SessionKeys sessionKeys) {
RequestUtils.getSession().removeAttribute(sessionKeys.name());
}
public static Object get(final SessionKeys sessionKeys) {
return exists(sessionKeys) ? RequestUtils.getSession().getAttribute(sessionKeys.name()) : null;
}
public static <T> T getVO(SessionKeys sessionKeys, final Class<T> className) {
if (!sessionKeys.className.getClass().isInstance(className)) {
throw new MyBizException(ExceptType.SESS001); // 세션타입이 일치하지 않습니다.
}
return (T) get(sessionKeys);
}
}
- Session을 쉽게 사용하기 위해 SessionManager를 구현합니다.
4. 사용
UserVO userVO = SessionManager.getVO(SessionKeys.USER_VO, UserVO.class);
감사합니다.
728x90
'프레임워크 > SpringBoot' 카테고리의 다른 글
[SpringBoot] TextWebSocketHandler 내부에서 HttpSession 사용하기 (0) | 2024.05.14 |
---|---|
[SpringBoot] Mybatis Batch Update (1) | 2024.02.08 |
[SpringBoot] application.yml 멀티 프로필 설정 (0) | 2023.07.13 |
[SpringBoot] properties 파일 static 변수 맵핑하기 (0) | 2023.07.13 |
[SpringBoot] CORS Filter 생성 (0) | 2023.07.04 |