본문 바로가기
React

React에서 세션 관리하기

by 굿센스굿 2024. 12. 17.
반응형

 

1. 세션 관리의 중요성

웹 애플리케이션에서 사용자의 상태를 유지하기 위해 세션(Session) 관리는 핵심 요소입니다. 세션은 사용자가 로그인한 상태나 장바구니 정보와 같은 데이터를 저장하고 관리하는 데 사용됩니다. React는 상태 관리에 특화된 라이브러리이므로, 클라이언트 측에서 세션 데이터를 효과적으로 처리할 수 있습니다.

세션 관리는 사용자의 경험을 향상시키는 동시에 보안 측면에서도 중요한 역할을 합니다. 이를 올바르게 구현하면 효율적인 사용자 인증 및 데이터 보호를 보장할 수 있습니다.


2. 세션 관리 방법

React에서 세션을 관리하기 위해 다음 세 가지 방법을 주로 사용합니다:

2.1 로컬 스토리지(Local Storage)

로컬 스토리지는 브라우저에서 키-값 형태로 데이터를 저장하는 방법입니다. 세션 데이터를 유지하기 쉽지만, 민감한 정보 저장에는 적합하지 않습니다.

코드 예시:

// 데이터 저장
localStorage.setItem('sessionToken', 'abc123');

// 데이터 가져오기
const token = localStorage.getItem('sessionToken');

// 데이터 삭제
localStorage.removeItem('sessionToken');

2.2 세션 스토리지(Session Storage)

세션 스토리지는 브라우저가 닫히면 데이터가 사라지는 스토리지입니다. 임시 데이터 저장에 적합합니다.

코드 예시:

// 데이터 저장
sessionStorage.setItem('sessionToken', 'abc123');

// 데이터 가져오기
const token = sessionStorage.getItem('sessionToken');

// 데이터 삭제
sessionStorage.removeItem('sessionToken');

2.3 쿠키(Cookies)

쿠키는 클라이언트와 서버 간에 데이터를 주고받는 데 사용됩니다. HTTP 요청에 자동으로 포함되므로, 서버 인증 세션 유지에 유리합니다.

코드 예시:

// 쿠키 설정
import Cookies from 'js-cookie';
Cookies.set('sessionToken', 'abc123', { expires: 1 }); // 1일 후 만료

// 쿠키 가져오기
const token = Cookies.get('sessionToken');

// 쿠키 삭제
Cookies.remove('sessionToken');

3. React에서 세션 관리 구현하기

React 애플리케이션에서 세션 관리를 구현하려면 상태 관리 라이브러리나 컨텍스트 API를 사용할 수 있습니다.

3.1 Context API로 세션 관리

Context API를 사용하면 전역적으로 세션 상태를 관리할 수 있습니다.

코드 예시:

import React, { createContext, useContext, useState } from 'react';

const SessionContext = createContext();

export const SessionProvider = ({ children }) => {
  const [session, setSession] = useState(null);

  const login = (token) => {
    setSession(token);
    localStorage.setItem('sessionToken', token);
  };

  const logout = () => {
    setSession(null);
    localStorage.removeItem('sessionToken');
  };

  return (
    <SessionContext.Provider value={{ session, login, logout }}>
      {children}
    </SessionContext.Provider>
  );
};

export const useSession = () => useContext(SessionContext);

사용 예시:

import React from 'react';
import { SessionProvider, useSession } from './SessionContext';

const LoginButton = () => {
  const { login } = useSession();

  const handleLogin = () => {
    login('abc123'); // 가상의 토큰 값
  };

  return <button onClick={handleLogin}>로그인</button>;
};

const LogoutButton = () => {
  const { logout } = useSession();

  return <button onClick={logout}>로그아웃</button>;
};

const App = () => (
  <SessionProvider>
    <LoginButton />
    <LogoutButton />
  </SessionProvider>
);

export default App;

3.2 Redux를 사용한 세션 관리

Redux를 사용하면 애플리케이션 상태와 세션 데이터를 효율적으로 관리할 수 있습니다.

코드 예시:

// actions.js
export const setSession = (token) => ({
  type: 'SET_SESSION',
  payload: token,
});

export const clearSession = () => ({
  type: 'CLEAR_SESSION',
});

// reducer.js
const initialState = {
  token: null,
};

const sessionReducer = (state = initialState, action) => {
  switch (action.type) {
    case 'SET_SESSION':
      return { ...state, token: action.payload };
    case 'CLEAR_SESSION':
      return { ...state, token: null };
    default:
      return state;
  }
};

export default sessionReducer;

// store.js
import { createStore } from 'redux';
import sessionReducer from './reducer';

const store = createStore(sessionReducer);
export default store;

4. 세션 관리 시 주의점

4.1 민감한 데이터 보호

로컬 스토리지나 세션 스토리지에 민감한 정보를 저장하지 마세요. 대신 서버에서 세션 토큰을 검증하고 필요한 데이터를 요청하세요.

4.2 세션 만료 처리

세션이 만료되었을 때 사용자에게 알리고 재인증 절차를 제공하세요. 이를 구현하려면 세션 토큰의 만료 시간을 설정하거나 서버와 주기적으로 동기화하세요.

4.3 HTTPS 사용

HTTPS를 통해 통신하여 세션 토큰이 중간자 공격에 노출되지 않도록 보장하세요.


React에서 세션 관리는 클라이언트와 서버 간의 협력을 통해 원활하게 구현할 수 있습니다. 적합한 방법을 선택하여 사용자 경험과 보안을 동시에 강화하세요.

반응형