로컬스토리지, 세션스토리지, 쿠키에 대한 100점짜리 답변?

    728x90
    반응형

    로컬스토리지, 세션스토리지, 쿠키에 대한 100점짜리 설명

    웹 애플리케이션에서 데이터를 클라이언트 측에 저장하는 방식에는 여러 가지가 있습니다.

    주요 방식으로는 로컬스토리지(LocalStorage), 세션스토리지(SessionStorage), 쿠키(Cookies)가 있습니다.

    이들 각각은 저장 용량, 유효 기간, 보안 및 사용 사례에 따라 다르게 사용됩니다.

     

     

     

    1. 로컬스토리지 (LocalStorage)

    로컬스토리지는 웹 브라우저에 데이터를 영구적으로 저장하는 방법입니다.

    데이터는 브라우저가 닫히거나 컴퓨터가 재부팅된 후에도 유지됩니다.

     

    특징

    • 영구 저장: 사용자가 명시적으로 삭제하지 않는 한 데이터는 유지됩니다.
    • 용량: 대개 5MB 이상 (브라우저마다 차이가 있음).
    • 범위: 동일한 출처(origin) 내에서만 접근 가능.
    • 데이터 타입: 문자열 형태로 저장됨 (JSON.stringify와 JSON.parse를 사용해 객체를 저장할 수 있음)

     

    사용이유

    • 영구성: 사용자가 브라우저를 닫더라도 정보를 유지할 필요가 있을 때 사용한다. 예를 들어, 웹 애플리케이션의 테마 설정이나 사용자의 선호도 같은 것들이 여기에 해당한다.
    • 클라이언트 측 저장: 서버에 부담을 주지 않고 클라이언트 측에서 데이터를 관리하고 싶을 때 유용하다.
    • 대용량 저장: 쿠키보다 훨씬 많은 데이터를 저장할 수 있다는 장점이 있다.

     

    예시

    // 데이터 저장
    localStorage.setItem('username', 'JohnDoe');
    
    // 데이터 가져오기
    const username = localStorage.getItem('username');
    
    // 데이터 삭제
    localStorage.removeItem('username');
    
    // 모든 데이터 삭제
    localStorage.clear();

     

     

     

     

    2. 세션스토리지 (SessionStorage)

    세션스토리지는 웹 브라우저의 세션 동안 데이터를 저장합니다.

    세션이 끝나면(브라우저 탭 또는 창을 닫으면) 데이터는 삭제됩니다.

     

     

    특징

    • 세션 한정 저장: 브라우저 탭이나 창이 닫히면 데이터가 삭제됩니다.
    • 용량: 대개 5MB 이상 (브라우저마다 차이가 있음).
    • 범위: 동일한 출처(origin) 내에서만 접근 가능.
    • 데이터 타입: 문자열 형태로 저장됨 (JSON.stringify와 JSON.parse를 사용해 객체를 저장할 수 있음).

     

    사용이유

    • 탭 또는 창 단위의 생명주기: 사용자가 웹 애플리케이션에서 단기간 동안 작업하는 정보를 저장해야 할 때 적합하다. 예를 들어, 양식 작성 중 임시 정보 저장이나 페이지 간의 데이터 전달 등에 사용된다.
    • 보안: 세션 저장소는 탭이 닫히면 사라지므로, 민감한 정보를 저장할 때 쿠키보다 안전할 수 있다.

     

    예시

    // 데이터 저장
    sessionStorage.setItem('username', 'JohnDoe');
    
    // 데이터 가져오기
    const username = sessionStorage.getItem('username');
    
    // 데이터 삭제
    sessionStorage.removeItem('username');
    
    // 모든 데이터 삭제
    sessionStorage.clear();

     

     

     

     

    3. 쿠키 (Cookies)

    쿠키는 웹 브라우저와 서버 간에 데이터를 교환하기 위해 사용되는 작은 데이터 파일입니다.

    주로 세션 관리, 사용자 인증, 사용자 설정 저장 등에 사용됩니다.

     

     

    특징

    • 유효 기간 설정: 만료일을 설정할 수 있어 영구 저장 가능. 만료일을 설정하지 않으면 세션 쿠키가 됨 (브라우저 닫힐 때 삭제).
    • 용량: 개당 최대 4KB, 도메인당 최대 20개.
    • 범위: 도메인 및 경로 설정 가능. 하위 도메인에 대해 접근 권한 설정 가능.
    • 데이터 타입: 문자열 형태로 저장됨.
    • 보안: Secure 플래그를 사용해 HTTPS 연결에서만 전송할 수 있음. HttpOnly 플래그를 사용해 JavaScript에서 접근을 막을 수 있음.

     

    사용이유

    • 서버와 클라이언트 간의 통신: 쿠키는 HTTP 요청과 함께 자동으로 서버로 전송되므로, 사용자 인증 토큰과 같은 정보를 관리하는 데 적합하다.
    • 만료 기간 설정: 쿠키는 만료 날짜를 설정할 수 있어 일정 기간 후 자동으로 삭제되게 할 수 있다. 이는 로그인 상태 유지 등에 유용하다.
    • 동일 출처 정책 제한: 쿠키는 같은 도메인과 프로토콜 내에서만 접근이 허용되므로, 보안 측면에서 장점을 가진다.

     

    보안

    • Secure 플래그
      • 쿠키에 Secure 플래그를 설정하면 HTTPS를 통해서만 쿠키가 전송된다.
      • 쿠키가 암호화된 연결을 통해만 서버와 클라이언트 간에 교환되도록 함으로써, 중간자 공격(Man-in-the-Middle Attack)에 의한 데이터 유출을 방지
      • 특히 로그인 세션 정보와 같은 민감한 데이터를 다룰 때 매우 중요합니다.
      • HTTPS가 아닌 연결에서는 Secure 플래그가 설정된 쿠키가 전송되지 않습니다.
    • HttpOnly 플래그
      • JavaScript를 통한 쿠키의 접근을 방지하기 위해 HttpOnly 플래그를 사용할 수 있다. 이는 XSS 공격으로부터 쿠키를 보호한다.
      • 쿠키를 HTTP(S) 요청을 통해서만 서버로 전송되도록 제한
      • JavaScript와 같은 클라이언트 사이드 스크립트를 통한 접근을 차단합니다. (클라이언트에서 접근 차단)
      • 이는 크로스 사이트 스크립팅(XSS) 공격으로부터 사용자의 쿠키를 보호하는 데 도움을 줍니다.
      • 사용자의 세션 쿠키가 악의적인 스크립트에 의해 탈취되는 것을 방지하므로, 로그인 정보와 같은 민감한 데이터를 보호하는 데 필수적입니다.
    • SameSite 플래그
      • CSRF 공격을 방지하기 위해 SameSite 플래그를 설정할 수 있다.
      • 쿠키가 크로스 사이트 요청과 함께 전송되는 것을 제한합니다.
      • 이 플래그는 Strict, Lax, None의 세 가지 설정을 지원합니다.
        • Strict: 쿠키는 동일한 도메인의 요청에서만 전송됩니다. 사용자가 링크를 클릭하여 다른 사이트로 이동하는 경우에도 쿠키를 전송하지 않습니다.
        • Lax: 같은 사이트에서의 요청에 대해서는 쿠키를 전송하고, 다른 사이트에서 오는 일부 안전한 요청(예: 링크 클릭)에 대해서만 쿠키를 허용합니다.
        • None: 모든 크로스 사이트 요청에 대해 쿠키를 전송할 수 있습니다. 하지만 Secure 플래그와 함께 사용해야 합니다.

     

    예시

    // 쿠키 저장
    document.cookie = "username=JohnDoe; expires=Fri, 31 Dec 2024 23:59:59 GMT; path=/";
    
    // 쿠키 가져오기
    const getCookie = (name) => {
      const value = `; ${document.cookie}`;
      const parts = value.split(`; ${name}=`);
      if (parts.length === 2) return parts.pop().split(';').shift();
    };
    
    // 쿠키 삭제
    document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/";

     

     

     

     

    비교

      로컬 스토리지 세션 스토리지 쿠키
    유효 기간 영구적 세션이 끝날 때까지 설정 가능
    저장 용량 대개 5MB - 10MB 대개 5MB  - 10MB 개당 최대 4KB
    범위 동일 출처 동일 출처 도메인 및 경로 설정 가능
    데이터 타입 문자열 문자열 문자열
    보안 JS에서 접근 가능 JS에서 접근 가능 Secure 및 HttpOnly 플래그 사용 가능
    사용처 클라이언트 클라이언트 클라이언트와 서버가 상태 주고받을 때

     

     

     

     

     

    사용 사례

    • 로컬스토리지: 사용자 설정, 테마, 사용자 기본값 등 장기적으로 저장할 필요가 있는 데이터를 저장하는 데 적합합니다.
    • 세션스토리지: 쇼핑 카트, 현재 페이지 상태 등 세션 동안만 유지되어야 하는 데이터를 저장하는 데 적합합니다.
    • 쿠키: 사용자 인증 정보, 세션 식별자, 서버와 클라이언트 간의 데이터를 교환해야 하는 경우에 적합합니다.

    이와 같이 로컬스토리지, 세션스토리지, 쿠키의 특징과 사용 사례를 명확하게 이해하고 활용하면 웹 애플리케이션 개발에 큰 도움이 될 것입니다.

     

     

     

     

     

     

    참조:

    https://velog.io/@lobinb797/Day70-HTTP-Cookie#local-storage

     

    [Day70] 로컬 스토리지, 세션 스토리지, 쿠키

    웹 개발에 있어서 데이터 저장 방식은 중요한 부분이다. 웹 애플리케이션은 다양한 방법으로 사용자의 정보를 저장하고 이를 통해 더 나은 사용자 경험을 제공한다. 이를 위한 기술로는 Local Stor

    velog.io

     

    728x90
    반응형

    '개발 지식' 카테고리의 다른 글

    [DNS] 브라우저가 URL로 IP주소(실제주소)를 얻는 방법?  (0) 2024.07.08
    HTTP 헤더 (Header)  (0) 2024.04.16
    www.daum.net을 주소창에 치면 무슨 일이 일어날까?  (0) 2024.04.16
    CI / CD  (0) 2024.04.11
    API  (0) 2024.04.11

    댓글