쿠키, 세션, 토큰, 캐시

nyoung·2023년 6월 13일
1

cs

목록 보기
1/10
post-thumbnail

웹 개발에서 사용되는 중요한 개념인 쿠키, 세션, 토큰, 캐시에 대해서 알아보자.
HTTP 프로토콜은 기본적으로 상태를 유지하지 않는(stateless) 프로토콜이다.
즉, 각각의 요청은 독립적으로 처리되며 이전 요청과 상태 정보를 공유하지 않고, 이러한 상태 유지의 한계를 극복하기 위해 쿠키, 세션 등의 개념이 사용된다.

쿠키 (Cookies)

쿠키는 클라이언트의 웹 브라우저에 저장되는 작은 텍스트 파일로, 웹 사이트에서 사용자의 정보를 저장하고 추적하는 데 사용된다.

<쿠키의 작동 방식>

  1. 클라이언트가 웹 사이트에 접속하면, 서버는 클라이언트에게 쿠키를 생성하고 전달한다.
  2. 클라이언트의 웹 브라우저는 쿠키를 로컬에 저장한다.
  3. 이후에 클라이언트가 동일한 웹 사이트에 접속할 때, 웹 브라우저는 저장된 쿠키를 서버로 전송한다.
  4. 서버는 쿠키를 통해 클라이언트를 식별하고 이전 상태와 상호작용한다.

장점:

  • 쉽게 구현 가능하며, 서버에 상태 정보를 저장하여 로그인 상태 등을 유지할 수 있다.

단점:

  • 클라이언트에 저장되므로 보안에 취약할 수 있다.
  • 용량 제한이 있어 많은 데이터를 저장하기에는 제한적이다.

주의할 점:
1. 민감한 정보(비밀번호 등)를 저장하지 않아야 한다.
2. 쿠키의 크기를 적절하게 관리하여 불필요한 데이터 전송을 방지해야 한다.

세션 (Session)

세션은 서버 측에서 사용자 상태를 추적하는 기술이다.
서버는 고유한 세션 ID를 클라이언트에게 부여하고, 해당 ID를 사용하여 상태를 유지한다.

<세션의 작동 방식>

  1. 클라이언트가 서버에 접속하면, 서버는 고유한 세션 ID를 생성한다.
  2. 서버는 이 세션 ID를 쿠키 또는 URL 매개변수와 같은 방법으로 클라이언트에게 전달한다.
  3. 클라이언트는 이 세션 ID를 이후의 요청에 포함시켜 서버로 보낸다.
  4. 서버는 세션 ID를 사용하여 해당 클라이언트의 세션 정보를 식별하고 관리한다.

장점:

  • 클라이언트에 저장되는 쿠키와 달리 서버에 저장되므로 보안에 더 강하다.
  • 크기 제한이 없어 많은 데이터를 저장할 수 있다.

단점:

  • 세션 데이터를 서버에 저장하므로 서버 자원을 소비한다.
  • 세션 ID를 클라이언트에게 전달해야 하므로 약간의 오버헤드가 발생할 수 있다.

주의할 점:
1. 세션 데이터를 안전하게 저장하고 관리해야 한다.
2. 서버의 자원을 효율적으로 사용하기 위해 세션 만료 시간을 적절히 설정해야 한다.

토큰 (Token)

토큰은 웹 개발에서 인증과 권한 부여를 관리하기 위해 사용되는 도구이다.
토큰은 클라이언트와 서버 간의 안전한 통신을 보장하고 사용자의 신원을 확인하여 접근 권한을 부여하는 데에 활용된다.

<토큰의 작동 방식>
토큰의 동작 방식은 발급, 전송, 검증으로 나눌 수 있다.

  1. 인증 서버에서 클라이언트에게 토큰을 발급한다.
  2. 클라이언트는 발급받은 토큰을 요청에 포함시켜 서버로 전송한다.
  3. 서버는 토큰의 유효성을 검증한다.
  4. 유효한 토큰인 경우, 클라이언트의 요청을 처리하고 응답한다.
  5. 만료된 토큰이거나 유효하지 않은 토큰인 경우, 서버는 요청을 거부하거나 적절한 오류 응답을 전송한다.

장점:

  • 서버에 저장되지 않고 클라이언트에게 전달되므로 서버 자원을 절약할 수 있다.
  • 확장성이 용이하고 다양한 플랫폼과 통신할 수 있다.

단점:

  • 토큰이 유출되면 악용될 수 있으므로 보안에 유의해야 한다.
  • 토큰의 만료 시간을 관리해야 하며, 토큰을 재발급하는 방법을 고려해야 한다.

주의할 점:
1. 토큰을 안전하게 전송해야 하고, HTTPS를 사용하거나 토큰을 암호화하여 보안을 강화할 수 있다.
2. 토큰의 만료 시간과 재발급 정책을 설정하여 보안과 사용성을 균형있게 유지해야 한다.

세션과 토큰의 차이점

토큰세션
저장 위치클라이언트 (로컬 스토리지, 쿠키, 메모리 등)서버 (메모리, 데이터베이스 등)
서버의 상태 유무무상태 (Stateless) 방식서버에서 상태 정보를 유지
확장성과 독립성독립적인 도메인 및 서버 간에 사용 가능동일한 서버 내에서 유효
유효 기간설정된 유효 기간 동안 유효로그아웃 또는 비활동 시간 동안 유효

캐시 (Cache)

캐시는 웹 페이지나 애플리케이션에서 반복적으로 요청되는 자원을 저장하고 재사용함으로써 성능을 향상시키는 기술이다.
클라이언트나 중간 서버에 위치한 캐시 저장소에 데이터를 저장하여, 이후에 동일한 요청이 발생할 때는 서버로부터 데이터를 다시 가져오지 않고 캐시에서 직접 응답할 수 있다.

<캐시의 작동 방식>

  1. 클라이언트가 서버에 자원을 요청한다.
  2. 서버는 해당 자원을 응답하면서 캐시 헤더를 함께 전송한다.
  3. 클라이언트는 캐시 헤더에 따라 자원을 캐시에 저장한다.
  4. 이후 동일한 자원에 대한 요청이 발생하면 클라이언트는 캐시에 저장된 자원을 사용하여 응답한다.

장점:

  • 반복적인 요청을 줄여 더 빠른 응답 시간을 제공하고, 서버의 부하를 줄여준다.

단점:

  • 캐시된 데이터가 업데이트되지 않거나 유효 기간이 만료되지 않으면 최신 데이터를 얻을 수 없다.
  • 캐시 관리에 신경을 써야 한다.

주의할 점:
1. 캐시 헤더를 적절히 설정하여 클라이언트와 서버 간의 데이터 일치성을 유지해야 한다.
2. 중요한 데이터나 동적인 컨텐츠에는 캐싱을 적용하지 않아야 한다.

참고한 사이트

profile
새싹 개발자

0개의 댓글