코드스쿼드 11주차 목요일 학습내용 정리

Sorbet·2021년 3월 18일
0

아직..

  • 지식의 대통합은 안됬고, 군대군데 키워드들은 알아들을 정도라서, 이번 글에서는 수업시간에 포인트 위주로 들은내용 짤막짤막하게 정리하겠습니다.

스프링 컨트롤러가 객체를 리턴하면

  • 스프링 컨트롤러가 문자열을 리턴하면 해당하는 웹페이지를 랜더링해서 던져주는데

  • 객체를 리턴하면, 해당객체를 JSON으로 변경해서 리턴 해 준다

    • 이를 JONSON2 어쩌고 표준을 사용함 >> 김영한님 스프링강의에서 들음
  • 스프링 에서 리뷰어들 빈출 지적사항으로

    • DTO객체, 서비스로 분리 등 >> 말 잘듣고 고대로 따라해라

세션이란?

  • 정의 : 세션이란 브라우저가 종료되기 전까지 클라이언트의 요청을 유지하게 해주는 기술이며 이를 구현하기 위해 서버에 일정 데이터를 저장해놓고 사용
    • 방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그것을 세션이라 칭함

원래 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에 저장,
    세션 : 웹 서버에 저장,
  1. 공통점 : 웹 통신간 유지하려는 정보(ex:로그인 정보 등)를 저장하기 위해 사용하는 것(?)
  • 위 내용 관련하여 조금 더 자세한 내용은 아래 "내용" 참고하세요~

로그아웃 구현하기

  • 로그아웃 구현하는 방법은
    • 쿠키/세션의 유효시간 설정을 NOW(지금)으로 설정하면 된다
      : 상대방에 도착할 때 쯤이면, 이미 유효시간이 만료되서 삭제됨
  • 세션DB 가 만료시간이 있는 이유는
    • 보안상의 문제
    • 각 서버마다의 사정(용량이나 시간당사용자)
  • 세션을 오래 유지시켜주기 위해서는
    • Refresh token
    • Auth token
      : 두가지 토큰을 사용하면서 어쓰토큰이 리프레시 토큰을 수정/리셋해가면서 장시간 로그인을 유지한다는데, 이거는 복잡하기도 하고 서버에서 할일이 많다(나중에 찾아보기)

다중서버에서 세션을 구현할때 사용되는 아키텍쳐

Case1 : 스티키 세션 방식




Case2 : 세션용 데이터베이스 만드는 방식




Case3 : 백엔드 체널





profile
Sorbet is good...!

0개의 댓글