희디비
[Spring] 쿠키, 세션 (Cookie, Session) 본문
💡 로그인
서비스를 구현할때 로그인은 필수 기능 입니다.
하지만 Http = 무상태 ( Stateless ) 이기 때문에 다시 접속할때 유저 정보를 주지 않으면
서버는 어떤 유저가 접속 한 것 인지 알 수 없습니다.
그렇다면 로그인 유저의 정보를 서버는 저장을 해야하는데 어떻게 해야 할까요?
파라미터 값으로 유저의 정보를 계속 줄 순 있지만 이 방식은 비효율적 입니다.
그레서 등장한 것이 쿠키 입니다.
💡 쿠키
유저가 로그인을 할 경우 응답값에 쿠키를 넣어 줍니다.
다음 응답시 마다 유저는 쿠키를 보여 주며 자신이 등록된 유저임을 증명 하게 됩니다.
⭐️ 쿠키 종류
세션 쿠키 : 쿠키의 만료 시각을 명시 하지 않으면 쿠키는 세션이 끝날때 삭제 됩니다.
지속 쿠키 : expries 속성에 날짜를 지정하거나, max-age 속성의 기간을 지정 하여 삭제 시각을 정할수 있습니다.
쿠키 옵션
domain : 설정시 해당 도메인과 설정 도메인으로만 쿠키가 전송 됩니다. ( 명시 x 현재 문서 위치 기본값 )
path : 해당 URl 밑 하위 디렉토리 에도 쿠키가 포함 됩니다. ( 전체 경로 "/" )
💥 쿠키 사용시 주의점
1. 쿠키의 값으로 member.getId() 와 같이 유저의 정보, 쉽게 유추 되는 정보를 넣지 않으면 위험합니다.
-> 악의적인 유저가 쿠키의 값을 보고 다른 유저의 쿠키 값을 유추하여 접속 할수 있습니다.
해결 방법
1. 쿠키의 value는 유추 할수 없는 UUID와 같은 값이여야 합니다.
2. 쿠키는 사용자가 조작 할 수 있으므로 서버에서 검증 할 수단이 필요 합니다. -> 세션
💡 세션
유저가 로그인을 하면 uuid 값을 만들어 쿠키를 전달해 주고
세션에 uuid 값을 id로 하고 value로 Member의 정보를 저장 해둡니다.
( 실제로는 Member.id 와 같이 최소한의 정보만 저장 해야 합니다. )
🙄 쿠키 세션 어떻게 사용 하나요?
서블릿은 request.getSession으로 세션을 제공 합니다.
request.getSession( true : 기본값 ) : 세션이 없으면 세션을 만들고, 쿠키를 보내 줍니다.
request.getSession( false ) : 세션이 없으면 세션을 만들지 않습니다.
이제 로그인 증명이 필요하다면
request.getSession(false)로 세션을 받고
ssession.getAttribute(SessionConst.LOGIN_MEMBER) 를 하면 Member가 반환 되는 것입니다.
스프링에서는 간단한 어노테이션으로 증명 과정을 단축 할 수 있습니다.
🙄 세션의 유지 방법
세션은 기본 유지시간이 1800초 ( 30분 ) 이며,유저가 마지막 접속한 시간을 기준으로 초기화 됩니다.
application.properties에서 타임아웃 설정을 통해 세션 유지시간을 정할 수 있습니다.
위 글은 김영한 선생님의 mvc2를 보고 요약 한 내용입니다.
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2/dashboard
'Spring' 카테고리의 다른 글
[Spring] @ExceptionHandler API 에러 핸들링 (3) | 2024.09.06 |
---|---|
[Spring] 필터, 인터셉터 (Interceptor) (0) | 2024.09.05 |
[Spring] 빈 검증 ( Bean Validation ) (0) | 2024.09.03 |
[Spring] 메시지, 검증 (Validation) (4) | 2024.09.02 |
[Spring] 싱글톤 컨테이너 (0) | 2024.05.01 |