아직..
- 지식의 대통합은 안됬고, 군대군데 키워드들은 알아들을 정도라서, 이번 글에서는 수업시간에 포인트 위주로 들은내용 짤막짤막하게 정리하겠습니다.
스프링 컨트롤러가 객체를 리턴하면
세션이란?
- 정의 : 세션이란 브라우저가 종료되기 전까지 클라이언트의 요청을 유지하게 해주는 기술이며 이를 구현하기 위해 서버에 일정 데이터를 저장해놓고 사용
- 방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그것을 세션이라 칭함
원래 HTTP는 state-less 하기 때문에 로그인 유지를 위해서는 세션과 쿠키가 필요하다
- 로그아웃이란 SessionID가 더이상 의미없는 상태로 변하는것
- Session 에서 유저 정보를 제거하지는 않는 방식으로 로그아웃을 구현하는데 그건 뒤에서
- Post 에는
클라이언트 측 브라우저에는 세션의 모든 정보를 저장하지 않는다
- 보안상의 이유로 중요하거나 민감한 정보는 클라이언트로 보내지 않는다
- 예를들어 이름, 주민번호, 아이디, 비밀번호 등은 서버에서 관리하고
- 클라이언트는 단지 세션디비의 ID만을 가지고 있는다
- 일반적으로 HASH로 소금후추를 한번 치거나(SHA-256,MD5), 랜덤스트링을 만들어서 ID로 사용
- SID (세션ID) 사용하는 경우 암호화는 되지만, 복호화가 절대 불가능한걸로 사용해야 된다
: (어정쩡한 인코딩 방식으로 SID 를 만들면 안된다)
세션이 저장되는곳
- 메모리
- 세션데이터베이스
: 레디스 등등..
: 간혹 RDB 로 세션관리를 하는 경우가 있는데, 이경우 알디비 성능이 수ms 단위라서 퍼포먼스가 구리다.( 대응하는 레디스는 수 나노세크 단위)
- 그럼에도 불구하고 RDB로 세션을 관리하는 이유는 jpa등 쓰기 쉽기 때문에, 일반적인 사이즈의 서비스인 경우 성능에 큰 문제는 없음
쿠키란?
- 쿠키의 정의
: 쿠키는 클라이언트 로컬에 저장되는 Key-Value쌍의 작은 데이터 파일입니다.
- 쿠키의 구성요소
: 쿠키이름, 쿠키값, 만료시간, 전송할 도메인명, 전송할 경로, 보안연결여부, HttpOnly여부
쿠키의 어원.ssul
헨젤과 그레텔에서 뭐 쿠키를 조금씩 뿌려서 도착해야 되는 집으로 가는 길에 표시를 해놨고, 도착해야하는 집이 바로 쿠키의 집이라서 그렇다고 합니다. (뭔가 깔끔하게 설명되지 않지만... )
출처: https://hahahoho5915.tistory.com/32 [넌 잘하고 있어]
세션과 쿠키의 차이점과 공통점
- 차이점
: 저장위치, 저장형식, 용량제한, 만료시점 등 (해당 포스트 하단에 '표'로 정리됨)
쿠키 : 개인 PC에 저장,
세션 : 웹 서버에 저장,
- 공통점 : 웹 통신간 유지하려는 정보(ex:로그인 정보 등)를 저장하기 위해 사용하는 것(?)
- 위 내용 관련하여 조금 더 자세한 내용은 아래 "내용" 참고하세요~
로그아웃 구현하기
- 로그아웃 구현하는 방법은
- 쿠키/세션의 유효시간 설정을 NOW(지금)으로 설정하면 된다
: 상대방에 도착할 때 쯤이면, 이미 유효시간이 만료되서 삭제됨
- 세션DB 가 만료시간이 있는 이유는
- 보안상의 문제
- 각 서버마다의 사정(용량이나 시간당사용자)
- 세션을 오래 유지시켜주기 위해서는
- Refresh token
- Auth token
: 두가지 토큰을 사용하면서 어쓰토큰이 리프레시 토큰을 수정/리셋해가면서 장시간 로그인을 유지한다는데, 이거는 복잡하기도 하고 서버에서 할일이 많다(나중에 찾아보기)
다중서버에서 세션을 구현할때 사용되는 아키텍쳐
Case1 : 스티키 세션 방식
Case2 : 세션용 데이터베이스 만드는 방식
Case3 : 백엔드 체널