1. @SessionAttribute
- @SessionAttribute는 주로 세션에 저장된 모델 속성을 뷰에서 다시 사용할 때 활용된다.
- 인증 정보를 관리하는 용도로는 적합하지 않으며, 세션에 해당 속성이 없을 경우 예외가 발생할 수 있다.
2. 멤버 필드로 주입 받는 것
- HttpSession을 멤버 필드로 주입받는 것의 문제점이 발생 될 수 있음
- Spring MVC 컨트롤러는 기본적으로 싱글톤(하나의 인스턴스)으로 관리된다.
- HttpSession을 멤버 필드로 주입받으면 여러 요청 사이에 공유될 수 있어 쓰레드 안전성 문제가 발생할 수 있다.
- 메서드 파라미터로 HttpSession을 받아 사용하는 것의 장점
- HttpSession을 메서드 파라미터로 받아 사용하면, 각 요청마다 개별적인 세션 객체에 접근할 수 있어 쓰레드 안전성이 확보된다.
3. 결론
로그인 처리 후 사용자 정보를 세션 메모리에 저장하는 것 자체는 문제없다. 이때 세션 객체는 JSESSIONID를 통해 사용자별로 관리되기 때문에 안전하다. 하지만 세션 정보를 컨트롤러의 멤버 필드로 저장하게 되면, 컨트롤러의 싱글톤 특성 때문에 해당 필드가 여러 사용자 요청 간에 공유되면서 쓰레드 안전성 문제가 발생할 수 있다. 따라서, 세션 정보를 관리할 때는 멤버 필드로 사용하지 말고, 메서드 파라미터로 세션 객체에 접근하여 개별적으로 사용하는 것이 더 안전하고 권장되는 방법이다.
'Spring Boot > 추가 개념' 카테고리의 다른 글
OOP 회원과 주문 관리 설계 (2) | 2024.10.01 |
---|---|
API 설계 및 모범 사례 (1) | 2024.09.27 |
스프링부트 블로그 만들기 테스트 (0) | 2024.08.19 |
Bank 카카오 소셜로그인 처리 (1) | 2024.08.19 |
OAuth 2.0 이란 (Open Authorization) (0) | 2024.08.19 |