Recent Posts
«   2025/05   »
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
관리 메뉴

개발자 박가나

[241121 TIL] 본캠프 37일차 본문

내일배움캠프

[241121 TIL] 본캠프 37일차

gnchoco97 2024. 11. 21. 21:07

쿠키

사용자가 어떠한 동작을 수행할 때마다 브라우저는 서버에 요청을 보내고 서버는 요청에 대한 응답을 해주는데, 이 때 브라우저에 저장하고자 하는 데이터를 쿠키에 담아서 보내게 되고 이 후 브라우저가 새로운 요청을 보낼 따마다 쿠키가 함께 전송된다.

 

쿠키가 존재하기 때문에 우리는 이전 검색 기록을 다시 보거나 장바구니에 물건을 담아두는 등의 동작을 할 수 있다.

 

쿠키는 브라우저에 저장되는 작은 텍스트 조각이고 브라우저는 사용자의 컴퓨터에 설치된 소프트웨어이기 때문에, 결론적으로 쿠키는 사용자가 가지고 있는 정보라고 할 수 있다.

 

하지만 쿠키는 사용자가 아니라 브라우저에 종속되는 개념이기 때문에, 해당 브라우저가 설치되어 있는 컴퓨터에 접근할 수 있는 모든 사람들에 의해서 조회가 가능하다.

 

특징

  • 브라우저에 저장하고자 하는 데이터를 저장하고 서버에 요청을 할 때마다 같이 전송된다.
  • 도메인을 기준으로 제한된다.
  • 서버에서 지정한 유효시간이 존재한다.

장점

어떠한 데이터를 브라우저에 저장함으로써 웹 사이트 이용을 편리하게 해준다.

 

단점

해당 브라우저가 설치된 컴퓨터에 접근 가능한 모든 사람들에 의해서 조회가 가능하기 때문에 보안에 취약하다.

 

 

세션

많은 웹사이트들이 로그인을 해야 사이트를 사용할 수 있게 구현되어 있다. 사용자가 어떠한 동작을 수행할 때마다 브라우저는 서버에 요청을 보내게 되는데, 문제는 이러한 각각의 요청들이 독립적이기 때문에 이전의 요청들과 연결되어 있지 않다.

 

즉, 서버는 로그인을 한 사용자와 로그인 이후 어떠한 동작을 수행한 사용자가 동일 인물임을 인지하지 못한다.

 

결국 사용자는 자신이 로그인한 사용자임을 인증하기 위해서 어떠한 동작을 수행할 때마다 매번 아이디와 비밀번호를 서버에 제공해야 하는데, 이러한 번거로움을 해결하기 위해서 세션을 사용한다.

 

세션은 해당 사용자가 인증을 받았음을 증명해주는 일종의 증서이다.

 

[사용자]

  1. 로그인
  2. 서버로부터 세션 아이디가 담긴 쿠키를 전달 받음
  3. 이후 모든 요청에 세션 아이디가 담긴 쿠키를 함께 전달

[서버]

  1. 올바른 로그인 정보인지 확인
  2. 세션 DB에 사용자 정보 데이터를 생성
  3. DB에 생성한 데이터의 아이디 값(세션 아이디)을 사용자에게 전달
  4. 이후 요청이 올 때마다 쿠키에 담긴 세션 아이디를 이용해서 사용자 정보를 찾음

 

특징

  • 사용자 정보를 서버에 있는 세션 DB에 저장하고 세션 아이디가 담긴 쿠키를 이용해서 사용자를 인식한다.

장점

데이터가 서버 측에 저장되기 때문에 보안상 안전하다.

 

단점

사용자 정보를 저장하기 위해서 메모리를 사용하기 때문에 사용자 수가 많아지면 메모리 공간 부족으로 인해 서버에 부하가 걸린다.

 

 

토큰 (JWT)

토큰은 쉽게 말해서 이상하게 생긴 string 형태의 데이터이다.

 

세션은 보안상 안전하고 편리하지만 메모리를 차지한다는 단점이 있다. 또한, 쿠키는 브라우저에 종속되는 개념이기 때문에 iOS나 Android와 같은 네이티브 앱에서는 세션 아이디를 쿠키에 담아서 보낼 수가 없다.

 

이러한 세션의 한계점을 보완할 수 있는 방안이 토큰이고, 토큰 중에서도 어떠한 정보를 담고 있는 토큰을 JWT라고 한다.

 

토큰에는 특수한 수학적 원리가 적용되어 있고 유효한 토큰을 해당 서버에서만 발행할 수 있기 때문에 메모리 차지 없이도 서버가 자신이 발급한 토큰임을 알아보고 사용자의 요청을 수행할 수 있다.

 

특징

  • string 형태의 데이터이다.
  • 토큰 자체에 사용자 정보가 담겨있다.
  • 유효시간이 존재한다.
  • 암호화되지 않는다.

장점

서버는 단지 해당 토큰이 유효한지만 판단하기 때문에 별도의 메모리를 차지하지 않는다.

 

단점

유효시간이 만료되기 전까지는 서버 측에서 통제가 불가능하고, 암호화되지 않기 때문에 토큰에 들어있는 정보를 누구나 볼 수 있다.