로그인/로그아웃 기능을 구현하면서 JWT 인증을 받기 위해 토큰을 저장해야 했다. 로컬 스토리지 말고 다른 방법을 사용해 보고 싶었다. 찾아 보니 React에서 react-cookie 패키지를 제공하고 있었다. 사용해 보지 않은 패키지라 경험 삼아 써 보기로 했다.
설치
npm install react-cookie
Cookies.js 이름의 util 파일을 새로 만들어 set, get, remove 할 수 있는 함수들을 모아 두었다.
setCookie: 쿠키를 저장하는 함수getCookie: 쿠키를 가지고 오는 함수removeCookie: 쿠키를 삭제하는 함수setCookie에서는 key, value, option 세 가지 파라미터를 받는다.
/이다. 모든 페이지에서 쿠키에 접근할 수 있다는 뜻이다. 만약 /123인 경우에 .com/123 페이지에서만 접근할 수 있게 된다.removeCookie에서는 setCookie에서 저장한 모든 내용을 지워야 하기 때문에 key와 option을 꼭 받아 와야 한다.
Cookie.js
import { Cookies } from "react-cookie";
const cookies = new Cookies();
export const setCookie = (name, value, option) => {
return cookies.set(name, value, { ...option });
};
export const getCookie = (name) => {
return cookies.get(name);
};
export const removeCookie = (name, option) => {
return cookies.remove(name, { ...option });
};
setCookie는 이렇게 사용했다. 아래의 코드는 로그인 시 api로부터 받은 응답의 토큰을 가지고 와 저장하고 있다.
if (res.data.token) {
setCookie("token", `JWT ${res.data.token}`, {
path: "/",
sameSite: "strict",
});
}
getCookie는 내가 현재 쿠키를 가지고 있는지, 즉 로그인이 되어 있는지 확인해야 하는 부분에 사용해 주었다. 아래의 코드 같은 경우, 로그인 여부에 따라 렌더링되는 컴포넌트가 다르도록 사용했다.
const cookie = getCookie("token");
{cookie ? <CartBtn to="/cart" /> : <CartBtn to="/login" />}
removeCookie는 당연히 로그아웃 용도로 사용했다. 재렌더링할 필요 없이 쿠키에서 토큰이 삭제되는 것을 확인할 수 있었다.
const logout = removeCookie("token");
<button onClick={logout}>로그아웃</button>
로컬 스토리지에 저장하는 것은 해 보았지만 쿠키는 처음 사용해 본 만큼 다음에는 두 가지 방법의 장단점도 다뤄 볼 예정이다.