TIL-2021.11.06

Jonguk Kim·2021년 11월 7일
0

TIL/WIL

목록 보기
6/27

1. 오늘 할 일

  • 쿠키/토큰/세션/JWT 개념 정리

2. 오늘 한 일 (배운 것)

  1. 쿠키
  • 매개체 (그냥 옮기는 시스템)
  • 쿠키를 이용해서 서버(웹사이트)클라이언트(브라우저)에 데이터를 넣을 수 있음
    1. 클라이언트 -> 서버: request
    2. 서버 -> 클라이언트: response(+쿠키)
  • 클라이언트에서 해당 웹사이트 방문할 때 마다 request(+쿠키) 보냄
  • 도메인에 따라 제한됨 (YouTube 가 준 쿠키는 YouTube에만 보내짐)
  • 서버가 정한 유효기간이 있음
  • 인증뿐만 아니라, 여러가지 정보 저장 가능
    1. 클라이언트 -> 서버: 언어 설정 변경 요청
    2. 서버 -> 클라이언트: 쿠키(+언어) 응답
    3. 클라이언트 -> 서버: 다시 웹사이트 방문 시 쿠키(+언어) 요청
    4. 서버 -> 클라이언트: 쿠키가 기억한 언어 페이지를 제공
  • 세션에서는 세션 ID를 / JWT에서는 토큰을 저장하고 전달하는 매개체
  1. 토큰
  • ID 카드
  • 서버가 기억하는 이상하게 생긴 텍스트
  • 해당 토큰을 서버에 보내고 서버는 세션 db에서 해당 토큰과 일치하는 유저 찾음
  • 쿠키는 브라우저에만 존재 (세션을 이용해 iOS, Android앱 만들 수 있지만 쿠키는 사용 불가) => 이 경우 토큰을 사용
  1. 세션
  • 해당 서버에 접속한 클라이언트(유저)가 누군지 알게해주는 정보
  • 중요한 클라이언트 정보는 모두 서버에 존재
  • 클라이언트는 세션 ID 정보만 가지고 있음
  • 현재 로그인한 클라이언트들의 모든 세션 ID를 DB에 저장함
  • 유저 늘어남에 따라 DB 리소스 필요성 증가
  • 요청이 들어올 때마다 서버는 쿠키를 통해 세션 ID와 일치하는 클라이언트를 찾고, 그 다음 작업을 수행 가능
    1. 클라이언트 -> 서버: 아이디/비번 확인 요청
    2. 서버: 확인되면 세션 DB에 유저 생성 (세션에는 별도의 ID가 존재)
    3. 서버 -> 클라이언트: 쿠키(+세션 ID) 응답
    4. 클라이언트: 쿠키(+세션 ID) 저장
    5. 클라이언트 -> 서버: 다른 페이지 접속 시 쿠키(+세션 ID) 요청
    6. 서버: 들어오는 쿠키(+세션 ID)를 확인 (아직까지 서버는 클라이언트가 누군지 모름, 쿠키를 지닌 요청만 있다는 것만 아는 상태)
    7. 서버: 해당 세션 ID를 가지고 세션 DB 확인 (클라이언트가 누군지 알게됨)
    8. 해당 요청이 끝나고 다른 페이지로 이동하면 5~7번 프로세스 반복
  1. JWT
  • 유저를 인증하는데 필요한 정보를 갖고 있는 토큰
  • DB 없이 검증 가능 (서버가 많은 일을 하지 않아도 됨)
  • 세션 ID 보다 김 (쿠키는 공간 제약 있음, JWT는 공간 제약 없음)
  • 암호화 되지 않았으므로 누구나 열어서 내용 확인 가능 (비밀정보 JWT 안에 넣으면 안됨)
  • DB 대신 정보에 Sign하고 전달하는게 다임
    1. 클라이언트 -> 서버: 아이디/비번 확인 요청
    2. 서버: 확인되면 서버는 DB 에 아무것도 생성 안함
    3. 서버: 클라이언트(유저) ID 를 가져다가 Sign 알고리즘을 이용해 Sign을 함
    4. 서버 -> 클라이언트: Sign된 정보(string 형태)를 쿠키(+토큰)로 보냄
    5. 클라이언트: 쿠키(+토큰) 저장
    6. 클라이언트 -> 서버: 재방문 또는 다른 페이지 접속 시 쿠키(+토큰) 요청
    7. 서버: 쿠키(+토큰)에 Sign이 유효한지 체크 (조작되었는지 확인)
    8. 서버: 유효하다면 서버는 클라이언트를 해당 유저로 인증
  1. 세션 / JWT 차이
  • 세션 (별도 저장소)
    • 로그인 된 클라이언트(유저) 모든 정보를 DB 저장 (해당 정보로 새로운 기능 추가 가능)
    • 세션 추적 가능 (특정 유저 쫒아내고 싶을 땐, 세션 삭제)
    • 인스타그램 디바이스 강제 로그아웃 / 넷플릭스 계정 공유 숫자 제한
    • 유저 수 많아지면 DB 유지보수 비용 증가
  • JWT (암호화)
    • DB 사용 안함 (비용 X)
    • 생성된 토큰 추적안함
    • 토큰이 유효한가 여부만 확인
    • 강제 로그아웃 안됨 (토큰 만료될 때까지 유효)
    • QR 체크인
    • 서비스가 더 커지고 유저 계정을 좀 더 잘 관리하고 싶다면 세션으로 옮김
profile
개발일지

0개의 댓글