처리중입니다. 잠시만 기다려주세요.
TTJ 코딩클래스
정규반 단과 자료실 테크 뉴스 코딩 퀴즈
테크 뉴스
Hacker News 2026.07.22 35

엑셀처럼 바뀐 것만 다시 계산한다 — 제인 스트리트의 Incremental 라이브러리

Hacker News 원문 보기
엑셀처럼 바뀐 것만 다시 계산한다 — 제인 스트리트의 Incremental 라이브러리

스프레드시트는 왜 빠를까요?

엑셀에서 셀 하나를 바꾸면, 그 셀을 참조하는 수식들만 촤르륵 다시 계산되죠. 시트 전체를 처음부터 다시 계산하지 않아요. 너무 당연해 보이지만, 이걸 일반적인 프로그램에서 구현하려면 생각보다 훨씬 어렵거든요. 오늘 소개할 Incremental은 바로 이 '바뀐 부분만 다시 계산하기'를 라이브러리로 만든 물건이에요. 만든 곳은 제인 스트리트(Jane Street)인데요, OCaml이라는 함수형 언어로 트레이딩 시스템을 만드는 걸로 유명한 퀀트 트레이딩 회사예요. 초 단위가 아니라 마이크로초 단위로 승부하는 동네다 보니, '불필요한 재계산'이 곧 돈인 환경이죠.

이게 뭐냐면: 계산을 그래프로 만든다

Incremental의 핵심 아이디어는 계산 과정을 의존성 그래프로 표현하는 거예요. 입력값은 Var라는 노드로 만들고, 그 입력에서 파생되는 값들은 map 같은 함수로 연결해요. 예를 들어 '주식 A의 가격'과 '보유 수량'이라는 입력 노드가 있고, 둘을 곱한 '평가금액' 노드, 여러 평가금액을 더한 '총 자산' 노드가 있다고 해볼게요. 이러면 계산 전체가 화살표로 연결된 그래프가 되죠. 이제 주식 A의 가격이 바뀌면, Incremental은 그 노드에서 화살표를 타고 내려가면서 영향을 받는 노드만 다시 계산해요. 주식 B와 관련된 계산은 손도 안 대는 거죠. 이때 stabilize라는 함수를 호출하는 순간에만 재계산이 일어나서, 언제 갱신할지도 개발자가 제어할 수 있어요.

재밌는 부분은 bind라는 기능인데요. map이 정해진 모양의 그래프에서 값만 갱신하는 거라면, bind는 입력값에 따라 그래프의 모양 자체를 바꿀 수 있어요. '이 조건이면 이쪽 계산을 연결하고, 아니면 저쪽을 연결해라' 같은 게 되는 거죠. 덕분에 정적인 스프레드시트를 넘어서, 구조가 동적으로 변하는 계산도 표현할 수 있어요. 물론 공짜는 아니고, bind가 많아질수록 그래프 관리 비용이 늘어나서 문서에서도 꼭 필요할 때만 쓰라고 안내해요.

어디에 쓰냐면

제인 스트리트는 이걸 실제 트레이딩 시스템에 써요. 수십만 개 종목의 시세가 쉴 새 없이 바뀌는 상황에서, 매번 전체 포트폴리오를 다시 계산하면 감당이 안 되거든요. 바뀐 종목과 연결된 계산만 갱신하니까 규모가 커져도 버티는 거예요. 웹 프론트엔드용으로는 Incr_dom이라는 라이브러리도 있는데, UI 전체를 이 그래프 위에 올려서 데이터가 바뀌면 화면의 해당 부분만 다시 그리게 해줘요.

어디서 많이 본 아이디어 같다면, 맞아요

이 아이디어의 뿌리는 'self-adjusting computation'이라는 학계 연구예요. 그리고 요즘 프론트엔드에서 뜨거운 시그널(signal)이 정확히 같은 계열이거든요. SolidJS, Vue의 반응성 시스템, 자바스크립트 표준 제안까지 올라간 Signals가 전부 '값이 바뀌면 의존하는 것만 다시 계산한다'는 원리로 움직여요. React가 일단 컴포넌트를 다시 실행하고 가상 DOM을 비교하는 방식이라면, 시그널 계열은 애초에 바뀔 곳을 정확히 알고 그곳만 건드리는 방식이라 결이 달라요. rust-analyzer가 쓰는 Salsa 프레임워크, 바뀐 파일만 다시 빌드하는 Bazel 같은 빌드 시스템도 다 같은 문제를 푸는 형제들이고요.

한국 개발자에게

솔직히 OCaml을 실무에서 쓸 분은 많지 않을 거예요. 그래도 이 라이브러리를 들여다볼 가치는 충분한데요. 시그널이 왜 그렇게 동작하는지, 캐시 무효화를 어떻게 설계해야 하는지 같은 문제의 '원형'을 가장 잘 다듬어진 형태로 볼 수 있거든요. 특히 대시보드, 실시간 시세, 대규모 폼처럼 입력이 자주 바뀌는 화면을 만들다가 성능 벽에 부딪혀본 분이라면, README와 문서만 읽어도 얻어가는 게 많을 거예요.

한줄 정리: 엑셀의 재계산 원리를 범용 라이브러리로 만든 게 Incremental이고, 요즘 프론트엔드의 시그널 열풍은 이 아이디어의 대중화 버전이에요.

여러분은 실무에서 '전체 재계산 때문에 느려지는' 문제를 어떻게 풀고 계신가요? 메모이제이션으로 버티는 편인가요, 아니면 반응형 구조로 다시 설계하는 편인가요?


🔗 출처: Hacker News

이 뉴스가 유용했나요?

TTJ 코딩클래스 정규반

월급 외 수입,
코딩으로 만들 수 있습니다

17가지 수익 모델을 직접 실습하고, 1,300만원 상당의 자동화 도구와 소스코드를 받아가세요.

144+실전 강의
17개수익 모델
4.9수강생 평점
정규반 자세히 보기

"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"

실제 수강생 후기
  • 비전공자도 6개월이면 첫 수익
  • 20년 경력 개발자 직강
  • 자동화 프로그램 + 소스코드 제공

매일 AI·개발 뉴스를 받아보세요

주요 테크 뉴스를 매일 아침 이메일로 전해드립니다.

스팸 없이, 언제든 구독 취소 가능합니다.