왜 Jotai는 useSyncExternalStore를 사용하지 않았을까

상태 관리 라이브러리인 Zustand, Jotai, Valtio의 저자가 쓴 글 중 흥미로운 글이 있어 소개드립니다. 이 글에서는 React 18에서 제공하는 useSyncExternalStore를 왜 Jotai가 사용하지 않았는지에 대해서 자세히 설명하고 있습니다.


결론적으로, Jotai는 React의 동시 렌더링(Concurrent Rendering) 기능과 최대한 매끄럽게 호환되도록 하기 위해 useSyncExternalStore 대신 useState를 모델로 한 자체적인 Atom 기반 상태 관리 방식을 채택했습니다.


반면, useSyncExternalStore를 사용하는 Zustand의 경우, 동시 렌더링(ex: useTransition)을 사용할 때 UI 이슈(예: isPending 대신 Suspense의 fallback UI가 표시됨)가 존재합니다.


이는 Zustand가 React 컴포넌트와는 별개로 독립된 스토어로 동작하도록 설계되었기 때문에, 완벽한 동시 렌더링 연동이 어렵기 때문입니다. 외부 스토어로 설계된 특성 상 어느 정도의 임시적인 UI 불일치(temporary tearing) 가능성은 감안하는 것입니다. (역시 은총알은 없네요)

결국, Zustand는 외부 스토어 접근 방식을 그대로 유지하는 대신 약간의 동시 렌더링 이슈를 감수하는 편이고, Jotai는 React 내부 상태(useState) 모델을 따르면서 useTransition 같은 동시 렌더링 기능을 더욱 안정적으로 지원하는 쪽을 택했다는 점이 핵심입니다. (서로가 trade-off인 관계)


자세한 내용은 원문 블로그를 확인해 보세요.


https://blog.axlight.com/posts/why-use-sync-external-store-is-not-used-in-jotai/

Why useSyncExternalStore Is Not Used in Jotai

Daishi Kato's blog

Why useSyncExternalStore Is Not Used in Jotai

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2025년 1월 21일 오전 9:04

 • 

저장 15조회 1,782

댓글 0

    함께 읽은 게시물

    📰 대학생이 40년만에 해시테이블의 성능 향상을 이뤄냈다고

    ... 더 보기

    Optimal Bounds for Open Addressing Without Reordering

    arXiv.org

    Optimal Bounds for Open Addressing Without Reordering

     • 

    저장 44 • 조회 3,486


    👋 굿바이 Styled Components 🥹

    S

    ... 더 보기

    Thank you - styled-components

    opencollective.com

    Thank you - styled-components

     • 

    댓글 1 • 저장 39 • 조회 4,170


    사이드 프로젝트 34개를 만들고 느낀점 10가지

    1️⃣ 아이디어의 가치는 실행했을 때 비로소 생긴다.

    ... 더 보기

     • 

    댓글 1 • 저장 138 • 조회 5,740



    🗞️ 간밤에 구글이 Gemini 2.5 Pro를 출시했는데요. 벤치마크 상으로는 GPT-4.5와 Claude 3.7 의 성능을 크게 뛰어넘는 결과를 보여줍니다. 특히 코딩능력이 매우 크게 향상되었는데요.

    ... 더 보기

     • 

    저장 8 • 조회 3,232


    React Testing Library 사용법

    T

    ... 더 보기

     • 

    저장 30 • 조회 2,379