영벨롭 개발 일지

[React]리액트 쿠키 react-cookie 다루기 본문

Front-end/React

[React]리액트 쿠키 react-cookie 다루기

영벨롭 2022. 7. 19. 16:01

[ 쿠키란? ]

 

 쿠키는 사용자가 웹 페이지 방문시 클라이언트 로컬에 저장되는 키와 값이 들어있는 데이터 파일입니다. Key와 Value 쌍으로 구성되며 String 형태로 이루어져 있습니다.

 최대 300개까지 저장 가능하며 하나의 도메인당 20개의 값만 가질 수 있습니다. 이때 하나의 쿠키값은 4KB까지 가능합니다.

 

 웹 서버가 웹 브라우저에게 보내어 저장했다가 서버의 부가적인 요청이 있을 때 다시 서버로 보내주는 문자열 정보라고 할 수 있습니다.

 

 우리는 이 쿠키를 통해 브라우저를 종료했다가 다시 접속하더라도 로그인 상태를 유지할 수 있게 되는 것입니다. 

 

 

★ 쿠키의 장점

1. 세션관리: 로그인, 접속 시간 등 서버가 알아야 할 정보를 저장할 수 있다. 

2. 개인화: 사용자마다 다르게 적절한 페이지를 보여줄 수 있다. 

3. 트래킹: 사용자의 행동과 패턴을 분석하여 기록할 때 사용된다. 

 

 

★ 쿠키의 단점

1. 사생활 침해 가능성: 방문한 웹 사이트에 대한 정보 및 개인정보가 기록되어 있다. 

2. 최약한 보안: 사용자에게 저장되기 때문에 임의로 고치거나 삭제가 가능하다

3. 트래픽: 매번 헤더에 쿠키에 대한 정보를 추가해서 보내기 때문에 상당한 트래픽을 발생시킨다. 

 

 

 

 

[ react-cookie 사용법 ]

- 설치

$ npm i react-cookie

 

- CookiesProvider

// index.js

import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import { BrowserRouter } from 'react-router-dom';
import { CookiesProvider } from 'react-cookie';

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
    <CookiesProvider>
      <BrowserRouter>
        <App />
      </BrowserRouter>
    </CookiesProvider>
  </React.StrictMode>
);

// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();

 

- 기본 사용법

 

 쿠키와 관련된 함수들을 모아 cookie.js 파일에 저장하겠습니다. 

 

 name은 쿠키 Key 문자열, value는 쿠키 Value 문자열 또는 객체를 의미합니다. 

 

 options는 객체 형태이며 다음 값들이 올 수 있습니다. 

 

options 설명
path string, 쿠키를 접근할 수 있는 경로 지정
expires Date, 쿠키 만료 날짜 지정
maxAge number, 초 단위로 쿠키의 상대적인 max age 지정
secure boolean, HTTPS로만 접근 가능하게 할 것인지 지정

 

// cookie.js

import { Cookies } from "react-cookie";

const cookies = new Cookies();

export const setCookie = (name, value, options) => {
  return cookies.set(name, value, {...options})
}

export const getCookie = (name) => {
  return cookies.get(name)
}

export const removeCookie = (name) => {
  return cookies.remove(name);
}

 

- 예제

// CookieTest.jsx

import React from 'react';
import { 
  setCookie, getCookie, removeCookie
} from './config/cookie';

const CookieTest = () => {
  const onSet = () => {
    setCookie('cookieKey', 'cookieValue', {
      path: '/',
      secure: true,
      maxAge: 3000
    })
  }
  const onGet = () => {
    const getVal = getCookie('cookieKey');
    console.log(getVal);
  }
  const onRemove = () => {
    removeCookie('cookieKey')
  }

  return (
    <>
      <button onClick={onSet} type="button">set cookie</button>
      <button onClick={onGet} type="button">get cookie</button>
      <button onClick={onRemove} type="button">remove cookie</button>
    </>
  );
};

export default CookieTest;
반응형