전체 목록
ReactHard#143

Context API를 과도하게 사용하면 어떤 문제가 생길 수 있나요?

#React#Context#성능#상태관리

답변 포인트

Provider value 변경과 렌더 범위를 기준으로 정의, 장점, 한계, 예시를 함께 설명해보세요.

정답 및 해설

빠른 요약

Context value가 바뀌면 소비 컴포넌트들이 다시 렌더링될 수 있습니다. 서로 관련 없는 상태를 하나의 Context에 넣으면 변경 범위가 커지므로 관심사별 분리와 메모이제이션이 필요합니다.

Context value가 바뀌면 소비 컴포넌트들이 다시 렌더링될 수 있습니다. 서로 관련 없는 상태를 하나의 Context에 넣으면 변경 범위가 커지므로 관심사별 분리와 메모이제이션이 필요합니다.

핵심 개념

핵심 기준은 Provider value 변경과 렌더 범위입니다. 이 개념은 단순한 용어가 아니라, 실제 코드나 시스템에서 반복적으로 생기는 문제를 다루기 위해 등장했습니다.

React에서는 상태 변화가 렌더링으로 이어지는 흐름을 예측 가능하게 만드는 것이 중요합니다. 컴포넌트 경계와 렌더링 비용을 이해하면 더 부드러운 UI를 만들 수 있습니다.

동작 흐름

  1. 먼저 어떤 문제가 있는지 확인합니다.
  2. 이 개념이 그 문제를 어떤 기준으로 나누거나 해결하는지 봅니다.
  3. 실제 코드에서는 입력, 상태, 실행 순서, 비용이 어떻게 바뀌는지 확인합니다.
  4. 마지막으로 한계와 부작용을 함께 점검합니다.

실제 예시

TSX
<AuthContext.Provider value={auth}>
  <App />
</AuthContext.Provider>

// auth 값이 매 렌더마다 새 객체라면 소비 컴포넌트가 불필요하게 렌더링될 수 있습니다.

Context는 전역 주머니가 아니라 “공유할 가치가 있는 상태”를 전달하는 경로로 보는 것이 좋습니다.

실무에서 주의할 점

  • 상태를 너무 위로 올리면 불필요한 렌더링 범위가 커집니다.
  • memoization은 병목이 확인된 곳에 쓰는 편이 좋습니다.
  • 사용자 입력, 로딩, 에러 상태를 함께 설계해야 실제 화면이 안정적입니다.

함께 연결해서 보면 좋은 키워드

React, Context, 성능, 상태관리

정리

한 줄로 정리하면, Context value가 바뀌면 소비 컴포넌트들이 다시 렌더링될 수 있습니다. 서로 관련 없는 상태를 하나의 Context에 넣으면 변경 범위가 커지므로 관심사별 분리와 메모이제이션이 필요합니다. 실무에서는 개념을 적용하는 조건과 적용하지 않았을 때 생기는 문제까지 함께 이해하는 것이 중요합니다.

Context API 과사용의 문제

Context는 prop drilling을 줄여주지만, 모든 전역 상태를 넣는 만능 store는 아닙니다. Context value가 바뀌면 그 context를 구독하는 컴포넌트들이 다시 렌더링될 수 있습니다.

TSX
< AppContext.Provider value={{ user, theme, cart, setCart }}>
  {children}
</AppContext.Provider>

위처럼 서로 변경 주기가 다른 값을 하나의 context에 넣으면 장바구니 변경이 테마만 사용하는 컴포넌트에도 영향을 줄 수 있습니다.

개선 방법

  • 변경 주기가 다른 상태는 context를 분리합니다.
  • value 객체는 useMemo로 안정화합니다.
  • 상태와 dispatch를 분리해 불필요한 구독을 줄입니다.
  • 빈번한 업데이트 상태는 Zustand, Jotai, Redux 같은 전용 store를 검토합니다.

적합한 사용처

테마, locale, 인증 사용자처럼 앱 전반에서 읽지만 변경 빈도가 낮은 값에 잘 맞습니다. 서버 상태 캐시는 Context에 직접 넣기보다 TanStack Query 같은 도구를 사용하는 편이 낫습니다.

관련 질문

같은 카테고리/태그 기준