[React] Zustand로 상태관리하기
·
JavaScript/React
Redux보다 가볍고, Context보다 편한 상태관리 솔루션Zustand란 무엇인가?Zustand는 독일어로 “상태(state)”라는 뜻입니다.React에서 상태를 효율적으로 관리할 수 있도록 만든 매우 작고 단순한 상태 관리 라이브러리입니다.만든 사람: Poimandres 팀, react-three-fiber나 valtio 만든 그 팀파일 크기: 1KB 미만 (gzip)의존성: 없음, 외부 라이브러리에 전혀 의존하지 않음훅 기반 API 사용: useStore() 하나로 상태를 가져오고 업데이트까지 함왜 Zustand를 쓰는가?Redux보다보일러플레이트가 거의 없음리듀서, 액션, 디스패치 안 써도 됨상태 선언과 사용이 같은 파일에서 가능Context보다불필요한 리렌더링이 없다Context API는 상태..
[React] Code Splitting (코드 스플리팅)
·
JavaScript/React
애플리케이션이 커질수록 성능 저하의 가장 큰 원인은?바로 무분별하게 커진 번들 파일입니다.300kb 이상 JS를 한번에 로딩하고 있다면,지금이 바로 코드 스플리팅을 도입할 시점입니다. 코드 스플리팅이란?Code Splitting은 애플리케이션의 JavaScript 코드를 여러 개의 청크(파일)로 분리해서 로딩하는 기술입니다.모든 코드를 하나의 파일에 모아서 한 번에 불러오는 대신,필요한 코드만 분리해서 나중에 비동기적으로 불러올 수 있게 합니다. 꼭 필요한 코드만 먼저 불러오고, 나머지는 나중에!왜 코드 스플리팅이 필요한가?SPA에서 모든 컴포넌트를 하나의 main.js에 포함하면초기 로딩 시간이 너무 길어짐사용하지도 않는 코드가 로딩되어 낭비 발생사용자 이탈률 증가코드 스플리팅은 번들 크기를 줄여 초기..
[React] Lazy Loading (지연 로딩)
·
JavaScript/React
“앱이 느려졌어요…”이 말을 들어본 적이 있다면, 지금이 바로 Lazy Loading을 도입할 타이밍일지도 모릅니다.Lazy Loading은 사용자에게 꼭 필요한 것만 먼저 보여주고, 나머지는 필요할 때 불러오는 똑똑한 전략입니다.이번 글에서는 그 개념부터, 왜 쓰는지, 어떻게 쓰는지, 주의할 점까지 실무 감각으로 풀어드립니다. Lazy Loading이란?Lazy Loading(지연 로딩)은 애플리케이션이 필요한 리소스를 즉시 불러오지 않고, 사용자가 필요할 때 비로소 로딩하는 전략입니다.브라우저는 초기 페이지 로드 시 필요한 최소한의 파일만 불러오고,사용자가 스크롤하거나 특정 페이지에 접근할 때 나머지 리소스를 비동기로 로딩합니다.중요한 건 ‘사용자 경험’과 ‘성능’입니다.느린 첫 로딩, 무거운 번들 ..
[React] Props 지옥에서 벗어나는 법
·
JavaScript/React
React를 사용하다 보면, 아래와 같은 코드를 본 적 있을 겁니다 이렇게 깊게 중첩된 컴포넌트 구조에서 props를 계속 전달해야 하는 상황을 흔히 “props drilling”이라고 부릅니다. 이 문제는 컴포넌트 재사용성 저하, 유지보수성 하락, 복잡성 증가로 이어지며, 개발자의 정신 건강에 매우 안 좋습니다. props 지옥이란?props 지옥 = 여러 컴포넌트 레이어를 거쳐 데이터를 직접 전달해야 하는 상황을 비유적으로 표현한 용어 예시 상황function App() { const user = { name: "Alice" }; return ;}function Parent({ user }) { return ;}function Child({ user }) { re..
[React] Context API
·
JavaScript/React
React로 프로젝트를 진행하다 보면 공통 상태를 여러 컴포넌트에 전달해야 하는 상황이 생깁니다. 처음엔 간단했던 상태가 점점 커지고, 부모 → 자식 → 손자 → 증손자… 계층을 따라 전파되면서 ‘props drilling’ 문제에 봉착하죠.“이거… 전역 상태로 관리해야 하지 않을까?”라는 생각이 들 때, 선택지는 크게 두 가지입니다:Redux, Zustand, Jotai 등 외부 상태 관리 라이브러리React 자체 내장 기능인 Context API이 글에서는 2번, 즉 Context API의 본질과 사용법, 장단점, 성능 이슈 및 실무 적용 전략까지 하나하나 자세히 풀어보겠습니다. Context API란?React Context API는 컴포넌트 트리 전체에 데이터를 효율적으로 공유하기 위한 전역 상태..
[React] 로컬스토리지는 왜 문제를 일으킬까?
·
JavaScript/React
웹 프론트엔드 개발에서 가장 손쉽게 사용할 수 있는 클라이언트 저장소인 localStorage. 설정이 필요 없고, 사용법도 간단해 많은 개발자들이 애용합니다. 하지만 이 간단함 이면에는 반드시 이해하고 넘어가야 할 구조적 한계가 존재합니다. 특히 로컬스토리지는 동기(synchronous) API라는 점에서 의도치 않은 버그나 퍼포먼스 문제를 유발할 수 있습니다. 로컬스토리지는 왜 동기 방식일까?로컬스토리지는 브라우저 스펙상 동기적으로 설계된 API입니다. 즉, 다음과 같은 특성을 가집니다.JavaScript의 메인 실행 스레드에서 즉시 동작합니다.읽기와 쓰기 작업은 대기 없이 즉시 반환되어야 합니다.따라서 하나의 작업이라도 지연되면, 앱 전체의 반응성이 떨어질 수 있습니다.이러한 구조는 단순한 앱에서는..
[React] TanStack Query (구 React Query)
·
JavaScript/React
React로 앱을 만들다 보면 가장 먼저 마주치는 실무 과제는 “서버에서 데이터를 어떻게 가져올 것인가?”입니다. 그동안은 useEffect + axios 조합이 사실상 표준처럼 사용되었지만, 이 방식은 캐싱, 리페칭, 에러 처리, 상태 관리 등에서 반복되는 코드와 복잡한 로직을 야기합니다.이 문제를 단 한 줄로 해결하는 라이브러리가 있으니, 그것이 바로 TanStack Query (구 React Query) 입니다.TanStack Query란?TanStack Query는 데이터 패칭(fetching), 캐싱(caching), 동기화(syncing), 업데이트(updating)를 위한 강력한 비동기 상태 관리 라이브러리입니다. 초기에는 React Query라는 이름으로 시작되었고, 현재는 Vue, Sve..
[React] 컴포넌트 라이프사이클(Component Lifecycle)
·
JavaScript/React
리액트에서 "라이프사이클(Lifecycle)"은 컴포넌트가 생성되고, 업데이트되고, 제거되는 과정을 의미합니다. 이 흐름을 잘 이해하면 상태 관리, API 호출, 정리(cleanup) 작업, 퍼포먼스 최적화에 능숙해질 수 있습니다.라이프사이클이란?리액트 컴포넌트는 다음 3단계를 거칩니다:마운트(Mount): 컴포넌트가 DOM에 처음 생성될 때업데이트(Update): 상태나 props가 변경되어 리렌더링 될 때언마운트(Unmount): 컴포넌트가 DOM에서 제거될 때각 단계에서 특정 코드를 실행할 수 있는 라이프사이클 메서드 또는 훅이 존재합니다.클래스형 컴포넌트의 라이프사이클 메서드클래스형 컴포넌트에서는 다음과 같은 메서드가 사용됩니다:마운트 시 실행componentDidMount() { // 컴포넌트..