State: A Component's Memory
사용자가 어플리케이션의 인풋창에 무언가를 입력하면 입력 필드가 업데이트 되고, 캐러셀에서 다음을 클릭하면 이미지가 변경되며, '구매'를 클릭하면 제품이 장바구니에 담겨야 합니다. 이처럼 컴포넌트는 사용자와 어플리케이션 간의 상호작용의 결과에 따라 화면을 변경해야 합니다. 따라서 컴포넌트는 현재 입력값, 현재 이미지, 장바구니 항목 같은 것들을 '기억'해야하는데 React에서는 이런 종류의 컴포넌트별 메모리를 state, 즉 상태라고 합니다.
리액트 공식 문서_State
FE에서의 상태관리란 데이터를 설계된 UI, UX에 맞게 설계하고 구현하는 일입니다. 또한 네트워크를 통해 서버로 전달되는 클라이언트의 요청에 따라 변화하는 상태를 관리하는 일입니다.
블로그_[FE] 프론트엔드에서의 상태관리란 무엇인가? (1) 등장배경과 정의
React 내장 상태 관리 도구 에는 useState, useReducer, Context가 있는데, useState와 Context의 특징과 한계점에 대해 알아보았다.
useState는 가장 기본적인 상태 관리 훅으로 간단한 상태 변화를 다룰 때 사용됩니다. 컴포넌트 내부에서 사용자의 상호작용이나 데이터 변화에 따른 상태의 업데이트가 필요할 때 useState를 통해 이를 간편하게 처리할 수 있습니다.
import React, { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>현재 카운트: {count}</p>
<button onClick={() => setCount(count + 1)}>증가</button>
<button onClick={() => setCount(count - 1)}>감소</button>
</div>
);
}
리액트 상태 관리: useState, useContext, useReducer 활용하기
컨텍스트를 활용하면, 부모 컴포넌트가 props를 통해 상태를 전달하지 않아도, 자식 컴포넌트의 깊이와 상관없이 특정 정보를 '전달'할 수 있다. 따라서 Props Drilling 문제를 해결하고, 전역 상태를 관리하는 데 유용하다.
Passing Data Deeply with Context
리액트 공식 문서_Using context in distant children
사실 Context는 상태 관리 도구는 아니며 그저 전역적으로 state를 공유하는 기능만 수행한다. 상태 관리는 사실상 useState, useReducer가 해준다.
[React] 상태 관리 라이브러리의 이해 - Redux 동작 원리
전역 상태 관리 라이브러리는 애플리케이션의 여러 상태를 효율적으로 관리하기 위한 도구이다. 애플리케이션의 상태를 전역적으로 관리할 수있는 것이 가장 큰 장점이며 라이브러리 마다 세부적인 특징은 다르다. 전역 상태 관리 라이브러리에는 Redux, MobX, Recoil, Zustand, Jotai, Valtio 등이 있다.
유튜브_프론트엔드 상태관리 실전 편 with React Query & Zustand
A JS library for predictable and maintainable global state management
Redux 공식 문서
Redux는 리액트 애플리케이션에서 가장 널리 사용되는 상태 관리 라이브러리 중 하나다. Flux 아키텍쳐와 reducer의 개념을 합쳐서 만든 전역 상태 관리 라이브러리이다. 공식 문서에서는 애플리케이션의 복잡성을 낮춰서 작성한 코드가 어떤 결과를 가져올지 예측 가능하게 만들어주는 도구라고 소개하고 있다.
유튜브_Redux - 1. 수업소개
대표적인 특징은 다음과 같다.
직접 설치해본 결과 Redux 5.0.1 버전의 용량은 약 289.8 kB 였는데 실제로 애플리케이션에서 사용하는 경우, 필요한 미들웨어와 DevTools 등을 포함하면 이보다 약간 더 커질 수 있을 것 같다.
Redux 공식 문서에 따르면 다음과 같은 경우에 사용하길 권장한다.
Redux와 같은 기존의 전역 상태 관리 도구는 리액트 라이브러리가 아니어서 리액트 내부 스케줄러에 접근할 수 없다는 단점이 있었다. 이런 단점은 리액트에 동시성 모드(Concurrent mode)와 같은 새로운 기능이 도입되었을 때 이 기능들이 최적으로 작동하지 못하는 문제를 야기했다. Recoil은 이런 문제를 해결하기 위해 만들어 졌고, 2020년 페이스북 팀의 한 엔지니어가 실험 단계로 컨퍼런스에서 공개하면서 세상에 알려지게 되었다.
간단히 말해, Recoil은 기존 상태 관리 도구들이 가지고 있던 한계를 극복하고, 리액트 애플리케이션의 성능과 개발 효율성을 높이기 위한 목적으로 개발되었다. 즉, 리액트의 최신 기능들, 특히 동시성 모드와 같은 고급 기능을 지원하기 위해 만들어진 상태 관리 라이브러리이다.
Atomos — A New Recoil Visualization Tool Powered by React Flow
리코일의 주요 특징은 다음과 같다.
직접 설치해본 결과 Recoil7.7 버전의 용량은 약 2.2 MB였다.
유튜브_[10분 테코톡] 패트릭의 상태관리
리액트 상태 관리 라이브러리, 어떤 것을 써야 할까?
주스탠드(zustand)는 독일어로 ‘상태’라는 뜻을 가졌고, 조타이(Jotai)를 만든 카토 다이시가 주스탠드도 만들어 관리하고 있다. 데이터를 중앙 집중형 스토어에 저장하고 Action을 통해 데이터를 조작하는 패턴인 Flux 패턴을 따르는데, 이런 점은 Redux와 비슷한다. 주스탠드는 특정 라이브러리에 종속되어 만들어진 도구는 아니므로 바닐라 자바스크립트에서도 사용이 가능하다.
zustand의 주요 특징은 다음과 같다.
직접 설치해본 결과 zustand4.5.2 버전의 용량은 326.9kB 였다.
조타이(Jotai)는 아토믹 접근(Atomic Approach)을 가지고 만든 리액트 상태 관리 도구다. 이런 점은 Recoil과 비슷하다. 조타이의 가장 기본적인 단위는 아톰(Atom)이다. 원시 타입과 객체 타입을 담을 수 있고, 다른 아톰에서 값을 가져와서 만드는 것도 가능하다.
상태를 밑에서 부터 조립해서 위로 올리는 방식인 bottion-up 방식을 사용한다. 처음에 아톰을 정의하고, 그것을 차곡차곡 큰 조각의 상태들로 만들어 나간다. 이러한 바텀업 방식은 성능이 중요한 앱에서 많이 사용된다.
직접 설치해본 결과 Jotai2.8.1 버전의 용량은 528.4kB 였다.
7 Best React State Management Libraries for Any Project Size
클라이언트 애플리케이션에서 서버에서 가져온 테이터를 효율적으로 관리하고 동기화하는 데 중점을 둔다. TanStack Query(구 React Query), Apollo Client, SWR 등이 있다.
현업에서 Redux가 4년 정도 자리를 잡고 있었고, 기존에 있는 것들을 함부로 바꾸기는 어렵기 때문에 현재도 압도적인 1위를 차지하고 있는 것으로 보인다. 하지만 러닝 커브가 높고 많은 세팅을 필요로하기 때문에 신사업이나 새로 하는 프로젝트에서는 많이 쓰고 있지 않다고 한다.
유튜브_프론트엔드 개발자가 React 상태관리 선택이 중요한 이유ㅣ유니콘 기업 현직자