티스토리 뷰

728x90
반응형

웹 애플리케이션을 개발할 때, 쿠키, 세션, 토큰이라는 용어를 많이 접하게 됩니다. 용어에 대한 정의 및 특징을 명확히 이해한다면, 웹 애플리케이션의 성능을 극대화할 수 있을 뿐만 아니라, 웹의 보안 취약점을 이해할 수 있습니다. 세션, 쿠키, 토큰은 저장소를 일컫는 용어입니다. 세션은 데이터를 서버에 저장하는 것이고, 쿠키는 클라이언트 환경에 데이터를 저장하는 것입니다. 데이터 보안 관점에서 보면, 중요한 데이터는 세션에 저장하고, 보안이 중요하지 않은 데이터는 클라이언트 환경에서 저장하는 것이 일반적입니다. 쿠키가 세션에 대해 간략하게 알아보았으니, 이번 포스팅에서는 웹, 쿠키, 세션, 토큰에 대한 정의와 원리에 대해 알아보겠습니다.

Web의 동작 방식

  1. 사용자가 브라우저에 URL을 입력
  2. 브라우저는 DNS를 통해 서버의 진짜 주소를 찾음 (Domain Name System : 도메인 이름을 IP로 변경해주는 서버)
  3. HTTP로 Request 메시지를 생성함
  4. TCP/IP 연결을 통해 서버로 전송됨
  5. 웹 서버는 HTTP Request에 대한 Response 메시지를 생성함
  6. TCP/IP 연결을 통하여 요청한 컴퓨터로 전송
  7. 도착한 HTTP Response는 웹페이지 데이터로 변환되고, 웹 브라우저에 의해 출력되어 사용자가 봄

Cookie

  • HTTP의 비연결성, 무상태 특성을 보완하기 위해 사용
  • 클라이언트에 저장되는 Key-Value 형태의 데이터 파일
  • 최대 300개까지 저장 가능하며, 유효 시간이 있고, 도메인당 20개 값만 가질 수 있으며, 4KB까지 저장 가능
  • ResponseHeader에 Set-Cookie속성을 사용하면 쿠키 생성 가능
  • 쿠키는 사용자가 별도로 설정하지 않아도, 브라우저가 Rquest 전송 시 Header에 넣어서 서버에 전송함

Cookie 동작 방식

  1. 클라이언트가 페이지 요청
  2. 서버에서 쿠키를 생성
  3. HTTP 헤더에 쿠키를 포함시켜 응답
  4. 브라우저가 종료되어도 쿠키 만료 기간이 있다면 클라이언트에서 보관하고 있음
  5. 같은 요청을 할 경우 HTTP 헤더에 쿠키를 함께 보냄
  6. 서버에서 쿠키를 읽어 이전 상태 정보를 변경할 필요가 있을 때 쿠키를 업데이트하여 변경된 쿠키를 HTTP 헤더에 포함시켜 응답

Session

  • 쿠키를 기반으로 하고 있지만, 데이터 파일을 서버에 저장함
  • 클라이언트가 서버에 Request를 보내면 클라이언트에게 고유의 세션 ID를 부여하며, 브라우저가 서버에 접속한 후 종료할 때까지 상태를 유지함
  • 접속 제한 시간을 설정할 수 있으며, 일정 시간 응답이 없을 경우 세션이 해제되도록 설정 가능
  • 세션은 서버 리소스를 사용하므로, 서버 성능에 많은 영향을 미침

Session 동작 방식

  1. 클라이언트가 서버에 접속 시 세션 ID를 발급받음
  2. 클라이언트는 세션 ID에 대해 쿠키를 사용해서 저장
  3. 클라이언트는 서버에 요청할 때, 이 쿠키의 세션 ID를 서버에 전달해서 사용
  4. 세션 ID를 전달받은 서버는 세션 ID로 세션에 있는 클라이언트 정보를 가져옴
  5. 클라이언트 정보를 가지고 서버 요청을 처리하여 클라이언트에게 응답함

Cookie와 Session의 차이

  • 쿠키는 클라이언트, 세션은 서버에 저장됨
  • 처리속도는 쿠키가 더 빠름, 세션은 서버에서 처리가 필요하므로 쿠키보다 느림
  • 쿠키는 클라이언트에 저장되어 변질되거나 전송 중 스니핑 되어 변조될 수 있으므로 보안상 취약하지만, 세션은 서버에서 처리하므로 보안성이 좋음

토큰 기반 인증

  • 클라이언트에게 토큰을 부여하여, 인증 시 토큰 기반으로 사용자 인증을 수행하는 방법
  • Token을 발행해서 클라이언트에 보내주므로, Session
  • JWT(JSON Web ToKen)을 이용함

토큰 기반 동작 방식

  1. 사용자가 로그인함
  2. 서버에서 계정 정보를 읽어 사용자를 확인 후, 사용자의 고유 ID 값을 부여한 후 기타 정보와 함께 Payload에 저장함
  3. JWT 토큰의 유효기간을 설정함
  4. 암호화할 Secret Key를 이용해 Access Token을 발급
  5. 사용자는 Access Token을 받아 저장 후, 인증이 필요한 요청마다 토큰을 헤더에 실어 보냄
  6. 서버에서는 해당 토큰의 Verify Signature를 Secret key로 복호화한 후, 조작 여부, 유효 기간을 확인함
  7. 검증이 완료되었을 경우, Payload를 디코딩하여 사용자의 ID에 맞는 데이터를 가져옴
728x90
반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/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
글 보관함