왜 사용? : react는 ‘객체의 주소값’이 바뀌면 데이터가 변했다고 판단하여 화면을 다시 그린다(리렌더링).
zustand에서 여러 상태를 객체 형태로 한 번에 가져오면, 내부 값이 안 바뀌었어도 매번 새로운 객체 주소가 생성되어 불필요한 리렌더링이 발생한다.
이를 useShallow가 막아준다.
동작 원리 (얕은 비교) : 껍데기 주소가 바뀌었어도 ‘알맹이(내부 값들)가 진짜 바뀌었는지’ 얕게 비교(Shallow Compare)한다.
immer : 데이터를 수정할 때
왜 사용? : react 생태계에서는 기존 상태를 직접 수정하면 안 되고, 반드시 새로운 객체를 만들어 교체하는 불변성(immutability)을 지켜야 한다.
동작 원리 : 마치 상태를 직접 수정하는 것처럼 코드를 짜도, immer가 뒤에서 알아서 안전하게 불변성을 지킨 새로운 복사본 객체를 만들어 zustand에게 넘겨준다.