Context API를 과도하게 사용하면 어떤 문제가 생길 수 있나요?
답변 포인트
Provider value 변경과 렌더 범위를 기준으로 정의, 장점, 한계, 예시를 함께 설명해보세요.
정답 및 해설
빠른 요약
Context value가 바뀌면 소비 컴포넌트들이 다시 렌더링될 수 있습니다. 서로 관련 없는 상태를 하나의 Context에 넣으면 변경 범위가 커지므로 관심사별 분리와 메모이제이션이 필요합니다.
Context value가 바뀌면 소비 컴포넌트들이 다시 렌더링될 수 있습니다. 서로 관련 없는 상태를 하나의 Context에 넣으면 변경 범위가 커지므로 관심사별 분리와 메모이제이션이 필요합니다.
핵심 개념
핵심 기준은 Provider value 변경과 렌더 범위입니다. 이 개념은 단순한 용어가 아니라, 실제 코드나 시스템에서 반복적으로 생기는 문제를 다루기 위해 등장했습니다.
React에서는 상태 변화가 렌더링으로 이어지는 흐름을 예측 가능하게 만드는 것이 중요합니다. 컴포넌트 경계와 렌더링 비용을 이해하면 더 부드러운 UI를 만들 수 있습니다.
동작 흐름
- 먼저 어떤 문제가 있는지 확인합니다.
- 이 개념이 그 문제를 어떤 기준으로 나누거나 해결하는지 봅니다.
- 실제 코드에서는 입력, 상태, 실행 순서, 비용이 어떻게 바뀌는지 확인합니다.
- 마지막으로 한계와 부작용을 함께 점검합니다.
실제 예시
<AuthContext.Provider value={auth}>
<App />
</AuthContext.Provider>
// auth 값이 매 렌더마다 새 객체라면 소비 컴포넌트가 불필요하게 렌더링될 수 있습니다.Context는 전역 주머니가 아니라 “공유할 가치가 있는 상태”를 전달하는 경로로 보는 것이 좋습니다.
실무에서 주의할 점
- 상태를 너무 위로 올리면 불필요한 렌더링 범위가 커집니다.
- memoization은 병목이 확인된 곳에 쓰는 편이 좋습니다.
- 사용자 입력, 로딩, 에러 상태를 함께 설계해야 실제 화면이 안정적입니다.
함께 연결해서 보면 좋은 키워드
React, Context, 성능, 상태관리
정리
한 줄로 정리하면, Context value가 바뀌면 소비 컴포넌트들이 다시 렌더링될 수 있습니다. 서로 관련 없는 상태를 하나의 Context에 넣으면 변경 범위가 커지므로 관심사별 분리와 메모이제이션이 필요합니다. 실무에서는 개념을 적용하는 조건과 적용하지 않았을 때 생기는 문제까지 함께 이해하는 것이 중요합니다.
Context API 과사용의 문제
Context는 prop drilling을 줄여주지만, 모든 전역 상태를 넣는 만능 store는 아닙니다. Context value가 바뀌면 그 context를 구독하는 컴포넌트들이 다시 렌더링될 수 있습니다.
< AppContext.Provider value={{ user, theme, cart, setCart }}>
{children}
</AppContext.Provider>위처럼 서로 변경 주기가 다른 값을 하나의 context에 넣으면 장바구니 변경이 테마만 사용하는 컴포넌트에도 영향을 줄 수 있습니다.
개선 방법
- 변경 주기가 다른 상태는 context를 분리합니다.
- value 객체는
useMemo로 안정화합니다. - 상태와 dispatch를 분리해 불필요한 구독을 줄입니다.
- 빈번한 업데이트 상태는 Zustand, Jotai, Redux 같은 전용 store를 검토합니다.
적합한 사용처
테마, locale, 인증 사용자처럼 앱 전반에서 읽지만 변경 빈도가 낮은 값에 잘 맞습니다. 서버 상태 캐시는 Context에 직접 넣기보다 TanStack Query 같은 도구를 사용하는 편이 낫습니다.