Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

희디비

[Spring] 쿠키, 세션 (Cookie, Session) 본문

Spring

[Spring] 쿠키, 세션 (Cookie, Session)

희디비 2024. 9. 4. 17:26

💡 로그인

 

서비스를 구현할때 로그인은 필수 기능 입니다.

하지만 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

 

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 강의 | 김영한 - 인프런

김영한 | 웹 애플리케이션 개발에 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. MVC 2편에서는 MVC 1편의 핵심 원리와 구조 위에 실무 웹 개발에 필요한 모든 활용 기술들을 학습

www.inflearn.com