불변성의 대가
제2화
발행일: 2025년 05월 26일
다이시 카토의 미간이 미세하게 찌푸려졌다. 그의 눈은 자신의 창조물, Zustand와 Jotai를 사용한 예제 코드를 훑고 있었다. 완벽하게 작동하는 코드. 효율적이고, 안정적이며, React의 생태계와 아름답게 조화를 이루는 코드였다.
하지만 그의 시선은 유독 한 군데에 오래 머물렀다. 바로 상태를 업데이트하는 부분이었다.
// Zustand: 카운터를 1 증가시킨다
store.set((state) => ({ ...state, user: { ...state.user, age: state.user.age + 1 } }));
// Jotai: Immer를 사용하여 배열에 아이템을 추가한다
updateItemsAtom(
produce((draft) => {
draft.push({ id: Date.now(), name: 'New Item' });
})
);
저 코드들. 저것이 바로 '불변성(Immutability)'이라는 신성한 원칙을 지키기 위한 약속이었다. 기존 상태 객체를 직접 건드리지 않고, 항상 새로운 객체나 배열을 만들어 반환하는 것. 마치 신성한 제단에 제물을 바치듯, 상태 변경이라는 행위에는 정해진 의례가 필요했다.
set
함수를 호출하고, 화살표 함수 안에서 스프레드 문법(...
)으로 기존 상태를 조심스럽게 복사하고, 변경할 속성만 새 값으로 덮어쓴다. 혹은 Immer 같은 마법 도구를 빌려와 produce
함수 안에서 '마치 직접 변경하는 것처럼' 코드를 작성한다.
틀린 것은 없다. 오히려 이것이 정석이고, 옳은 길이었다. 불변성은 시간 여행 디버깅을 가능하게 하고, 예기치 못한 부수 효과(Side Effect)를 막아주며, React가 변화를 효율적으로 감지하여 화면을 다시 그리는(Re-rendering) 핵심 메커니즘과 깊이 연관되어 있었다. 수많은 개발자들이 이 불변성 덕분에 상태 관리의 지옥에서 벗어날 수 있었다. 카토 자신도 이 원칙의 강력함을 누구보다 잘 알고 있었기에 Zustand와 Jotai를 그렇게 설계했다.
하지만… 정말 사소한 값을 하나 바꿀 때조차도.
state.count++
이 단순하고 직관적인 표현. 자바스크립트를 처음 배울 때 누구나 자연스럽게 떠올릴 법한 이 방식이, 왜 상태 관리의 세계에서는 금기시되어야 하는가?
"불변성… 그 대가는 생각보다 크군."
카토는 나지막이 중얼거렸다. 그것은 단순한 코드 몇 줄의 문제가 아니었다. 개발자의 사고 흐름에 미묘한 브레이크를 거는 인지적 부하(Cognitive Load)였다. 매번 상태를 업데이트할 때마다 '아, 불변성을 지켜야지'라는 생각을 의식적으로 떠올리고, 정해진 패턴에 맞춰 코드를 작성해야 했다.
간단한 카운터 증가나, 배열에 아이템 하나 추가하는 것 같은 지극히 평범한 작업조차도 '특별한' 방식으로 처리해야 한다는 것. 이 작은 제약들이 모이고 쌓여, 개발 과정의 자연스러운 리듬을 방해하고 있었다. 마치 발에 맞지 않는 신발을 신고 걷는 듯한 미묘한 불편함. 당장은 큰 문제가 아닐지 몰라도, 오래 걸으면 피로가 누적되는 것과 같았다.
"그냥… 그냥 객체를 바꾸면, 알아서 처리해주면 안 되는 건가?"
그의 머릿속에서 위험하지만 매력적인 질문이 다시 고개를 들었다. 불변성을 지키는 '책임'을 개발자가 아니라, 라이브러리 자체가 떠안을 수는 없을까? 개발자는 그저 가장 자연스러운 방식으로 상태를 변경하고, 나머지는 똑똑한 시스템이 알아서 처리해주는 그런 세상.
그것은 기존의 패러다임에 정면으로 도전하는 발상이었다. React 커뮤니티가 금과옥조처럼 여기는 불변성의 원칙을 건드리는 일이었다. 어쩌면 무모하고 위험한 생각일지도 몰랐다.
하지만 카토의 눈빛은 흔들리지 않았다. 그는 이미 Zustand와 Jotai를 통해 기존의 방식에 의문을 던지고 새로운 길을 제시했던 경험이 있었다. 그의 안테나는 다시 한번 개발자들이 느끼는 미묘한 불편함, 그 '불변성의 대가'에 정확히 꽂혀 있었다.
두 개의 성공적인 왕국. 그 견고한 성벽 아래, 새로운 혁명의 불씨는 그렇게 조용히, 하지만 분명하게 타오르기 시작했다. 불변성이라는 거대한 산맥 너머에 존재할지도 모르는, 더 직관적이고 자연스러운 상태 관리의 신세계를 향한 그의 갈망이 점점 더 커져가고 있었다.