본문 바로가기
framework_library/vue

📦 상태 관리가 필요한 이유와 Vuex 구조 이해하기

by 죄니안죄니 2025. 5. 5.

📦 상태 관리가 필요한 이유와 Vuex 구조 이해하기

Vue 실무 시리즈 > 5️⃣ Vuex / Pinia 상태 관리 > 1️⃣ 상태 관리가 필요한 이유와 Vuex 구조

 


1. 상태 관리란 무엇인가?

상태(state)란 Vue 컴포넌트 내에서 관리되는 데이터입니다. 예를 들어, 사용자의 로그인 정보, 장바구니 목록, 알림 상태 등은 모두 "상태"에 해당합니다. 컴포넌트는 이 상태를 기반으로 화면을 구성하고 사용자와 상호작용합니다.

2. 상태 관리를 도입하게 되는 이유

Vue는 기본적으로 props와 emit으로 부모-자식 간 데이터를 주고받을 수 있습니다.
하지만 규모가 커지고 형제 컴포넌트나 먼 관계의 컴포넌트들끼리 데이터를 공유해야 할 때가 있습니다.
애플리케이션이 커지면 상태가 여러 컴포넌트에 분산되고, 이 상태를 공유, 전달, 변경하는 과정이 점점 복잡해집니다.


이때 데이터를 직접 넘기려면 다음과 같은 문제점이 생깁니다:

App.vue
 ├── Header.vue
 └── ProductList.vue
      └── ProductItem.vue

예를 들어, Header에서 장바구니 개수를 보여주려면 ProductItem → ProductList → App → Header로
데이터를 계속 끌어올려야 하는 구조가 됩니다. 비효율적이고 의존성이 많아지며 코드가 복잡해집니다.

  • 중간 컴포넌트가 데이터를 전달만 하기 위해 존재해야 함
  • 데이터 흐름이 꼬이면 유지보수 어려움
  • 형제 컴포넌트 간 상태 공유 어려움
  • 이벤트 emit/listen 구조가 복잡해짐
  • 어디서 상태가 바뀌었는지 추적 어려움

3. 실제로 겪는 문제 사례

  • 사용자 로그인 정보를 헤더, 사이드바, 여러 화면에서 동시에 사용해야 할 때
  • 쇼핑몰에서 장바구니 개수가 페이지마다 다르게 표시될 때
  • 여러 탭이 동일한 데이터를 실시간으로 반영해야 할 때
  • 상태를 잘못 변경하여 버그가 생겼지만, 어디서 변경됐는지 추적이 어려운 경우
결론: 프로젝트가 커질수록 상태를 일관성 있게 관리하는 구조가 필요합니다.

4. 상태 관리 도구의 역할과 이점

상태 관리 도입 전 상태 관리 도입 후
컴포넌트 간 props/emit 지옥 공통 store에서 직접 접근
상태 변경 위치 추적 어려움 Mutation, Action을 통한 명확한 추적
형제 컴포넌트 간 데이터 공유 어려움 Store를 통해 즉시 공유 가능

Vue의 상태 관리 도구인 VuexPinia는 이러한 문제를 해결하기 위해 등장했습니다. 이들은 앱의 모든 상태를 중앙 집중식으로 관리하면서도 Vue의 반응형 시스템과 통합됩니다.

🔚 다음 글 안내

다음 글에서는 Vuex의 구조에 대해 자세히 알아봅니다.
- State, Mutation, Action, Getter가 각각 어떤 역할을 하는지 실제 예제와 함께 설명드릴게요.

👉 다음 글: Vuex의 구조 완전 정복

댓글