Spritely는 분산 애플리케이션을 기본적으로 안전하게 구축하기 위한 구상을 제시하며, 분산 시스템의 세 가지 핵심 문제인 접근 제어, 프로세스 간 통신, 리소스 명명을 해결하는 데서 출발한다. 이는 Spritely Institute의 대표인 Christine Lemmer-Webber와 연구소의 기술 책임자인 David Thompson이 진행한 발표에서 소개됐다.
이 구상은 중앙화된 서비스가 공학적으로는 더 쉽지만, 운영 주체에 서비스 변경, 사용자 감시, 제품 전체 중단에 이르는 큰 권한을 부여한다는 점에서 출발한다. Spritely는 중앙화된 플랫폼에 의존하면 사용자에게 선택지가 제한된다고 본다. 또한 대기업을 겨냥해 설계된 일부 법률이 «법적 참호»로 변해 소규모 프로젝트와 자체 호스팅에 규정 준수 비용을 높일 수 있다고 지적한다.
보안은 일반 권한이 아니라 역량에서 시작된다
이 글은 접근 제어 목록과 역할 모델을 비판한다. 이러한 모델은 대체로 광범위한 그룹과 권한, 그리고 위임을 부여하는 중앙 관리 주체에 의존하기 때문이다. Spritely가 제시하는 대안은 역량 보안이다. 여기서 역량은 리소스 식별과 해당 리소스 사용 권한 부여를 결합한 위조 불가능한 참조를 의미한다.
실제로 프로그램은 명시적으로 전달받은 역량만 획득한다. 따라서 신뢰할 수 없는 애플리케이션을 실행할 때 사용자에게 부여된 모든 권한으로 실행하는 대신, 예를 들어 디스플레이와 키보드만 사용할 수 있는 권한을 부여할 수 있다. 이 모델에서는 위임할 때 권한을 축소하고 중앙 관리자에게 돌아가지 않고 다른 주체에게 전달할 수 있으며, 나중에 이를 철회할 수도 있다.
Spritely는 이러한 원칙을 역량에 기반한 안전한 분산 프로그래밍 환경인 Goblins로 구현한다. 이 글은 역량 전달을 프로그래밍 언어에서의 인자 전달과 연결한다. 이에 따라 리소스 접근은 함수나 프로세스가 암묵적으로 접근할 수 있는 대상이 아니라, 해당 함수나 프로세스가 전달받은 것의 직접적인 결과가 된다. Goblins는 동시성, 지속성, 트랜잭션도 지원하며, 작업이 실패했을 때 이전 상태로 되돌리는 기능도 포함한다.
액터 모델과 OCapN 프로토콜
프로세스 간 통신을 조직하기 위해 Spritely는 액터 모델을 사용한다. 각 액터는 한 번에 하나의 메시지를 수신하고, 다른 액터에 메시지를 보내거나 새로운 액터를 생성하거나 다음 메시지를 위해 자신의 동작을 변경할 수 있다. 이 모델은 비동기 통신과 상태 관리를 결합해 공유 잠금에 대한 의존도를 낮춘다.
Spritely는 REST가 주로 클라이언트와 서버 애플리케이션에 적합하지만, 서로 신뢰하지 않는 당사자들로 구성된 피어 투 피어 네트워크에는 적합하지 않다고 본다. 반면 OCapN(Object-Capability Network)은 안전한 참조 전달을 원격 프로시저 호출에 추가한다. 이 프로토콜은 전송 방식과 독립적이며 WebSockets, Tor onion 서비스 또는 다른 수단을 통해 실행할 수 있다. 또한 두 당사자 간 통신과 제3자에게 객체를 전달하는 기능을 지원한다.
OCapN은 기본 계층에서 강제되는 스키마가 없는 데이터 모델을 사용하며, 비동기 호출과 약속 값을 지원한다. 이 글은 현재 Scheme, JavaScript, Dart에 구현체가 있다고 언급한다.
공개 이름을 맹목적으로 신뢰하는 대신 로컬 명명 사용
Spritely는 사용자가 알고 있는 주체나 객체에 자신이 선택한 로컬 이름을 부여하는 petname 시스템을 통해 리소스 명명 문제를 다룬다. 이는 피싱, 이름 탈취, 시각적 유사성 공격과 같은 도메인 이름의 문제에 대한 대응이다.
이 글은 이 과제를 주코의 삼각형(Zooko’s triangle)으로 알려진 문제와 연결한다. 주코의 삼각형은 하나의 시스템에서 사람이 이해할 수 있는 이름, 탈중앙화, 보안을 함께 구현하기 어렵다고 본다. 글로벌 이름을 신원에 대한 충분한 증거로 제시하는 대신, petname 모델은 사용자와 리소스 사이의 로컬 관계에 초점을 맞춘다.
실제로 무엇이 달라지는가?
Spritely는 중앙화된 서비스를 대체하는 완성된 제품이라기보다 일련의 원칙과 도구를 제시한다. 핵심 가치는 개발자에게 보안과 탈중앙화를 기본값으로 제공해, 분산 시스템과 보안 연구 수십 년의 성과를 다시 발견하도록 요구하지 않으려는 데 있다. 그러나 발표 자체는 대규모 도입, 사용자 경험, 기존 애플리케이션과의 호환성, 당사자들의 연결이 끊기거나 서로 다른 상태가 되었을 때 리소스를 관리하는 방법에 관한 문제를 해결하지 않는다.
소프트웨어 아키텍트에게 이 접근법의 중요성은 세밀한 권한 제어와 비동기 통신 및 참조 전달을 결합하는 데 있다. 개발자에게 남는 과제는 도구와 프로토콜이 얼마나 성숙했는지, 그리고 일반적인 중앙화 구조보다 더 단순한 운영 모델을 이용할 수 있는지에 달려 있다.
뉴스 출처
InfoQ - Architecture Articles
원문 보기 ↗