세션 개념이 잘 이해가 되지 않아서 질문입니다
708
작성자 없음
작성한 질문수 0
세션 만들기
//로그인 성공 처리
//세션이 있으면 있는 세션 반환, 없으면 신규 세션 생성
HttpSession session = request.getSession();
//세션 로그인 회원 정보 보관
session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember);
세션 지우기
HttpSession session = request.getSession(false);
if (session != null) {
session.invalidate();
}
세션 확인하기
HttpSession session = request.getSession(false);
if (session == null) {
return "home";
}쿠키는 클라이언트 측에서 저장하고 세션은 서버측에서 저장한다고 알고 있는데요. request 로부터 getSession을 통해 얻는 것이 무엇인지가 궁금합니다.
request.getSessin()을 통해 얻는다는 것은 사용자의 요청으로부터 얻은 Session이고 여기에 setAttribute 하는 것은 서버에 데이터를 저장하는게 아니라 사용자의 요청에 저장을 하게 되는 것 아닌가요 ?? (setAttribute가 사용자의 request와 서버 모두 저장하는 것인가요?)
session은 cookie와 같다면 서버 내부적으로 어디에 저장돼서 어떻게 확인할 수 있는 건지 궁금합니다.
답변 1
0
안녕하세요, hjemsti 님. 공식 서포터즈 y2gcoder 입니다.
request.getSession() 의 이름 자체에서 혼동이 오신 것 같습니다.
세션은 서버 측에서 관리되며, request.getSession()을 통해 얻는 것은 사용자 요청과 연관된 세션 객체입니다.세션 생성 시 WAS(여기서는 톰캣입니다.)에서 생성한 고유한 세션 ID를 쿠키로 클라이언트에 저장합니다. 그래서 요청 시 보내지는 Session ID의 쿠키를 이용해 서버에 저장된 세션 저장소에서 클라이언트에 맞는 세션 객체를 가져오는 것입니다.
session.setAttribute()를 하면 해당 데이터는 서버 측의 세션 저장소에 저장됩니다. 사용자의 요청에 저장되는 것이 아닙니다.
잘 이해가 가지 않으신다면 해당 챕터를 다시 반복해주시길 권합니다.
감사합니다.
0
답변 감사합니다 제가 헷갈리는 것이 예를들면
Session session = request.getSession()
server.saveSession(session) <- 제가 임의로 만든 표현입니다
이런식으로 되어야 할 것 같은데
session.setAttribute가 request.getSession().setAttribute()랑 같은 표현이지 않습니까 ?? 그럼 결국 request에 저장이 되는 것 아닌가 이게 헷갈립니다 ...
0
request에는 항상 세션ID를 지닌 쿠키가 따라옵니다.
그러면 해당 쿠키로 서버에 있는 세션 저장소에서 해당 세션ID를 key로 가지고 있는 세션 객체를 찾아서 반환해주는 것입니다 :)
예를 들어 hjemsti님이 아이스 아메리카노가 마시고 싶어 카페에 가셨습니다. 카페 앞에 있는 키오스크를 이용해서 아이스 아메리카노를 주문하셨습니다. 그러면 키오스크가 아이스 아메리카노를 주문 받고, 키오스크가 아이스 아메리카노를 만들어서 hjemsti님께 전달까지 해주지는 않습니다. 키오스크는 결제, 주문까지만 담당하고 커피를 만들어주는 것은 보통 바리스타 분입니다.
좀 더 개발 친화적인 예시를 들어보자면 DB에 저장된 객체를 불러오는 것도 가능할 것 같습니다. hjemsti님이 만드신 아주 멋진 A서비스가 있습니다. A서비스의 서버는 애플리케이션 로직이 있는 서버와 DB 서버가 분리되어있습니다. 사용자들이 애플리케이션 서버를 통해 회원가입을 하면 모두 DB에 저장하고 있습니다. 사용자들이 로그인을 하면 애플리케이션 서버를 거쳐 DB에 저장되어 있는 자신의 정보를 조회할 수 있습니다. 근데 hjemsti 님의 말씀대로 하면 사용자들은 애플리케이션 서버를 거치니까 결국 사용자들의 정보는 애플리케이션 서버에 저장되어있다고 말씀하시는 것이나 마찬가지입니다.
request.xxx()라고 해서 request에 저장되는 것은 아닙니다. 천천히 다시 생각해보시길 권해드립니다 :)
1
아아 request.getSession 하면 request안에 있는 쿠키를 기반으로 서버에서 Session을 찾아 반환해주는 것이 맞나요?
맞다면 저는 session을 얻으려면 server.getSession(request) 이런 식일줄 알았는데 아니라 헷갈린 것 같습니다. 감사합니다!
이미지 업로드와 db 트랜잭션 묶는법
0
44
1
Could not resolve org.springframework.boot:spring-boot-starter-validation:2.4.4
0
54
2
MessageSourceTest 코드
0
49
1
인터셉터 에러 설정
0
48
1
resolveArgument()메서드 질문
0
58
1
43강 검증1 에서 실패 로직 관련 질문있습니다.
0
60
2
타임리프 3.X 버전 rendering, serializer 에러 해결 방법
2
133
3
스프링 빈에 등록이 안되는거 같은데 어떻게 하면 좋을까요?ㅠㅠ
0
93
3
pdf 오타 문의
0
57
1
ItemUpdateForm 검증 관련 질문입니다.
0
49
1
22page 링크 주소 변경
0
59
2
특정 데이터와 파일을 함께 저장 시, 테이블 구조 질문
0
53
1
섹션3번 수업에 대한 질문입니다.
0
80
2
@Autowired 보다 더 좋은 방법이 어떤 걸까요?
0
86
2
타입컨버터 가 람다랑 비슷해 보이는데 저의 생각이 맞는지?.
0
66
1
자바스크립트 인라인에서 객체 직렬화 시 오류가 납니다
0
143
3
스프링부트 - 오류페이지2 에서 500.html 에서 쓰인 객체 질문
0
64
1
톰캣 에러 페이지가 안보입니다.
0
104
2
apiEceptionController에서 센드 에러 호출하면 안되는지?
0
81
1
세션 타임아웃시 쿠키 삭제 방법이 없나요?
0
118
2
ApiExceptionController 질문드립니다.
0
64
1
셀렉박스 챕터에서 option value에 ==배송 방식 선택== 이것을 넣은 이유가 궁금함, 이렇게 구상해도 되는지?
0
66
1
MemberRepository 필드의 fianl 선언 유무
0
85
2
혹시 index.html 에서는 fragment 사용이 안되는건가요
0
59
1





