핵심 요약
- 한 개발자가 상태 영속성과 런타임 업그레이드를 가로막는 진짜 원인은 전역 상태가 아니라 '로컬 상태(Local State)'라는 주장을 제기했습니다.
- 명시적인 객체 생성뿐 아니라 클로저나 콜백 등 내부 캡슐화된 암묵적 로컬 상태 역시 외부 접근을 차단해 시스템을 복잡하게 만든다고 지적했습니다.
- 그는 상태를 파일시스템이나 DB 같은 외부 트리형 공유 자원으로 분리하고, 프로그램은 이를 조작하는 무상태 로직이 되어야 한다고 대안을 제시했습니다.
요약 소프트웨어 설계에서 흔히 '전역 상태(Global State)는 악이고, 지역 상태(Local State)로 캡슐화해야 안전하다'는 원칙이 정설처럼 여겨집니다. 하지만 RDP(Reactive Demand Programming) 언어 패러다임을 연구하던 한 개발자가 "오히려 로컬 상태야말로 프로그램의 지속성(Persistence), 확장성, 런타임 업그레이드를 가로막는 독(Poison)"이라는 파격적인 주장을 펼쳐 개발자 커뮤니티에서 주목을 받았습니다.
글쓴이는 2011년 초 RDP를 설계할 당시 `new` 키워드나 명시적 객체 생성 방식을 사용하는 2계층 모델을 구상했으나, 상태 지속성이나 라이브 프로그래밍을 다루는 데서 복잡성과 한계에 부딪혔다고 회고합니다. 깊은 고민 끝에 그는 명시적인 가변 참조나 객체뿐 아니라 클로저, 콜백, 메시지 큐, 프로시저 스택 같은 '암묵적인 로컬 상태'까지도 모두 동일한 문제를 유발한다는 결론에 도달했습니다. 로컬 상태는 컴포넌트 내부에 캡슐화되어 외부에서 의미론적으로 접근할 수 없기 때문에, 업그레이드 시 상태를 전이하거나 외부에서 지속성을 부여하기가 극도로 어렵다는 분석입니다.
그가 제시한 대안은 프로그램 로직 내부에서 로컬 상태를 완전히 제거하고, 파일 시스템이나 데이터베이스처럼 프로그램 경계 밖의 공유된 외부 자원으로 상태를 밀어내는 구조입니다. 즉, 프로그램은 상태를 직접 생성하고 파괴하는 대신 이미 존재하는 트리 형태의 자원 공간을 발견하고 조작하는 '무상태 로직(Stateless Logic)'이 되어야 한다는 설명입니다. 그는 트리형 리소스 구조(마치 파일시스템 메타포)를 활용하면 직교적 영속성, 보안 분할, 런타임 업그레이드 및 디버깅을 훨씬 우아하게 해결할 수 있다고 주장했습니다.
Sponsored · 광고