쿠키 - 세션 & jwt

programming·2023년 2월 10일
0
post-thumbnail

쿠키 & 세션이란?

  • 쿠키(Cookie): 브라우저가 서버로부터 응답으로 Set-Cookie 헤더를 받은 경우 해당 데이터를 저장한 뒤 모든 요청에 포함하여 보낸다.
    • 데이터를 여러 사이트에 공유할 수 있기 때문에 보안에 취약할 수 있다.
    • 쿠키는 userId=user-1321;userName=sparta 와 같이 문자열 형식으로 존재하며 쿠키 간에는 세미콜론(;) 으로 구분된다.
  • 세션(Session): 쿠키를 기반으로 구성된 기술이다. 단, 클라이언트가 마음대로 데이터를 확인 할 수 있던 쿠키와는 다르게 세션은 데이터를 서버에만 저장하기 때문에 보안이 좋으나, 반대로 사용자가 많은 경우 서버에 저장해야 할 데이터가 많아져서 서버 컴퓨터가 감당하지 못하는 문제가 생기기 쉽다.

jwt란 무엇인가?

  • JSON 형태의 데이터를 안전하게 교환하여 사용할 수 있게 해준다.
  • 인터넷 표준으로서 자리잡은 규격이다.
  • 여러가지 암호화 알고리즘을 사용할 수 있다.
  • header.payload.signature 의 형식으로 3가지의 데이터를 포함한다. (개미처럼 머리, 가슴, 배)
    때문에 JWT 형식으로 변환 된 데이터는 항상 2개의 . 이 포함된 데이터여야 한다.
  • header(머리)는 signature(배)에서 어떤 암호화를 사용하여 생성된 데이터인지 표현한다.
  • payload(가슴)는 개발자가 원하는 데이터를 저장한다.
  • signature(배)는 이 토큰이 변조되지 않은 정상적인 토큰인지 확인할 수 있게 도와준다.
  • JWT는 비밀 키를 모르더라도 복호화(Decode)가 가능하다.
    변조만 불가능 할 뿐, 누구나 복호화하여 보는것은 가능하다는 의미가 된다!
  • 때문에 민감한 정보(개인정보, 비밀번호 등)는 담지 않도록 해야한다.
  • 특정 언어에서만 사용 가능한것은 아니다!
    단지 개념으로서 존재하고, 이 개념을 코드로 구현하여 공개된 코드를 우리가 사용하는게 일반적이다.

jwt가 쿠키&세션과 다른점은?

데이터를 교환하고 관리하는 방식인 쿠키/세션과 달리, JWT는 단순히 데이터를 표현하는 형식이다.

  • JWT로 만든 데이터를 브라우저로 보내도 쿠키처럼 자동으로 저장되지는 않지만, 변조가 거의 불가능하고 서버에 데이터를 저장하지 않기 때문에 서버를 Stateless(무상태)로 관리할 수 있기 때문에 최근 많이 쓰이는 기술중 하나다.
  • Stateless(무상태)Stateful(상태 보존)의 차이를 간단히 설명하자면,
    Node.js 서버가 언제든 죽었다 살아나도 똑같은 동작을 하면 Stateless하다고 볼 수 있다.
    반대로 서버가 죽었다 살아났을때 조금이라도 동작이 다른 경우 Stateful하다고 볼 수 있다.
  • 서버가 스스로 어떤 기억을 갖고 다른 결정을 하냐 마냐의 차이라고 보면 더 쉽다 😉
  • 로그인 정보를 서버에 저장하게 되면 무조건 Stateful(상태 보존)이라고 볼 수 있다!
profile
개발 기록 일지

0개의 댓글