Spring

Spring - Session

jaewoo 2022. 12. 26. 16:26

Session

서로 관련된 요청을 묶은 것이고 요청은 모두 독립적이다 -> 요청들끼리는 공통적인 부분이 없고 독립적이다.

 

Request 가 들어오면 Server는 Request 자체를 구분할 수 없다. 즉 매번 들어온 Request는 새로운 Request라고 생각하는 것이다. 하지만 Session을 통해 이 Request를 공통적인 부분을 만들어 묶을 수 있다. 

 

처음 요청이 들어오면 Sever는 JSESSIONID쿠키(SessionID)가 없는 경우 새로운 SessionID(중복되지 않는 값) 을 만들어 Response (Set- Cookie)를 통해 브라우저에 발급한다. 여기서 중요한 건 각 브라우저마다 새로운 ID를 만들어준다는 것이다. 한 피시 안에서 브라우저 여러창을 띄어서 요청을 날리면 각 브라우저는 다른 SessionID를 받게 된다.

이런 방식을 통해 세션 아이디를 가지고 같은 브라우저에서 들어온 요청인지 아닌지를 판별할 수 있다.

 

 Sessoion을 종료시키는 방법 (Server에서)

- Controller 혹은 Servlet에서 HttpServletRequest를 통해 

HttpSerssion session = request.getSession();
session.invalidate();
//또는 처음에 지정한 세션 시간이 만료될 경우

 코드를 실행하면 해당 요청에 대한 세션은 종료된다. 종료된 후 다시 요청이 들어올 경우 새로운 SessionID를 만들어 브라우저에 발급한다.

이 SessionID를 통해 Session저장소를 사용할 수 있는데 저장해서 사용하는 방법은

HttpSession session = request.getSession();
session.setAttribute("key","value");
//key value 형식으로 들어가고 사용할때는 getAttribute("key")
방식으로 사용한다.

만약 여러 서버를 사용할 경우 Session 자체가 공유가 되지 않기에 쿠키를 사용하는 방법이 유리하다. 

'Spring' 카테고리의 다른 글

Spring - 작성자 체크하기  (0) 2023.02.09
Spring - AOP,@Transactional  (0) 2023.01.27
Spring - Cookie  (0) 2022.12.23
Spring - 파일 올리기(이미지 저장하기 ) - RestController  (1) 2022.10.11
JPA - N+1  (0) 2022.09.19