지속성 계층(The Persistence Layer) — 혹은 당신이 동의한 적 없는 데몬
요약
본 글은 소프트웨어의 '지속성(persistence)'이라는 아키텍처적 측면을 다루며, 사용자가 인지하지 못하는 사이에 백그라운드에서 실행되거나 권한이 유지되는 데몬 및 에이전트의 위험성을 경고합니다. 이는 단순한 제품 결함이 아닌, 전체 분야가 직면한 방향성 문제로 지적됩니다. 사용자는 장치 내 모든 지속 프로세스를 파악하고, 일회성/영구 실행을 분리하며, 부여된 권한과 접근을 작업 완료와 함께 회수하는 것이 중요합니다.
핵심 포인트
- 지속성은 사용자가 인지하지 못하는 백그라운드 아키텍처 문제입니다.
- 자동 시작 데몬이나 업데이트되는 에이전트는 통제되지 않은 위험 요소입니다.
- 사용자는 장치 내 모든 지속 프로세스(데몬, 크론 등)를 파악해야 합니다.
- 특정 작업에 부여된 권한은 해당 작업 완료와 함께 회수되어야 합니다.
지난번에는 종료를 자체적인 계층으로 명명했습니다(#58). 떠나는 대가가 '자체적'이라는 것이 과연 선택이었는지 결정하는 그 계층입니다. 오늘은 한 층 더 내려가서, 애초에 퇴장을 어렵게 만드는 것, 즉 **지속성(persistence)**을 이름 붙이고 싶습니다. 당신이 나갈 수 있는지 여부가 아니라, 설치한 것이 실제로 멈출지 여부 말입니다.
이 글을 쓰게 만든 헤드라인
바로 그 하나의 동작 방식이, 당신이 자유롭게 내린 선택이라고 생각하는 수십 가지 결정 아래에 있는 조용한 아키텍처입니다. 그리고 이것은 어느 한 제품의 결함이 아니라, 전체 분야의 방향성 문제입니다.
지속성이 자체적인 계층인 이유
다른 모든 계층들은 당신이 그 것을 실행하고 있다고 가정합니다. 하지만 지속성은 당신이 보고 있지 않을 때 무엇이 실행되고 있는지, 그리고 누가 그것을 멈출 스위치를 가지고 있는가에 관한 것입니다.
- 당신의 결정에도 살아남는다. 자동 시작 및 자체 업데이트되도록 설정된 데몬은 당신이 예산 책정하지 않은 수명을 가집니다. 앱을 제거하는 것이 데몬을 제거하는 것과 같지 않습니다. 알아야 할 상태는 눈에 보이는 디렉터리에 있지 않습니다.
- 당신이 검토한 후에도 바뀐다. 당신은 버전 1을 평가했습니다. 그런데 다음 주 화요일에 그것이 스스로 버전 1.0.7로 배포됩니다. 당신의 승인은 스냅샷(snapshot)에 대한 것이었지만, 지금 당신은 설정 파일에 자신의 이름이 걸린 움직이는 목표물(moving target)을 실행하고 있습니다.
- 당신이 한 번 부여한 권한을 유지한다. 토큰, 키, 파일 시스템 범위, 네트워크 이그레스(network egress) — 모두 설치 시점에 승인되었고, 여전히 활성화되어 있습니다. 갱신하지 않는 접근은 감사할 수 없는 접근입니다.
- 기본값이 되고, 기본값은 고착적이다.
이것이 샌드박스가 다음에 등장하는 이유입니다. 오늘 'Launch HN'에서는 에이전트 실행을 위한 저비용 에이전트 샌드박스(96점)를 발표했습니다. 이는 격리 자체가 상품이 되었기 때문인데, 자율적인 코드가 통제되지 않은 채 사용자의 장치에 지속되는 것은 명백한 책임(liability)이 되었습니다. 그리고 더 조용한 게시물에서는 자체 호스팅 대안을 보여주었는데, 일반 WiFi 7 라우터를 소프트웨어 정의 무선 주파수(Software-Defined Radio)로 변환하거나(254점), SSD에서 전문가 가중치(expert weights)를 스트리밍하여 RAM보다 큰 모델을 실행하는 것(18점)이었습니다. 패턴은 명확합니다: 사용자가 소유한 기기가 사용자가 지시한 것만, 그리고 오직 그것만을 수행하게 하는 것입니다.
실제로 해야 할 일
- 지속되는 것을 파악하세요. 장치에 있는 데몬(daemon), 실행 에이전트(launch agents), 크론 작업(cron jobs), 자동 업데이트 프로그램 목록을 작성하세요. 열었던 앱이 아니라, 재부팅 후에도 살아남는 프로세스들입니다. 만약 그것들을 나열할 수 없다면, 정의상 관리되지 않는 것입니다.
- 일회성 실행과 영구 실행을 분리하세요. 사용자가 호출하는 도구와 부팅 시 환영 인사를 하는 서비스는 신뢰 수준이 다릅니다. 그 차이에 비용을 지불하고, 그것을 기본값으로 받아들이지 마세요.
- 특권(privileged)에 대한 무음 업데이트를 끄세요. 브라우저 탭의 자동 업데이트는 허용할 수 있습니다. 하지만 토큰과 네트워크 접근 권한이 있는 것에 대해서는 '예상치 못한 변경'은 기능(feature)이 아니라 취약점(vulnerability)입니다.
- 작업이 끝날 때 액세스 권한을 회수하세요. 특정 작업을 위해 부여된 액세스는 그 작업과 함께 사라져야 합니다. 이는 신원(identity)에 대한 교훈(#47)과 액세스에 대한 교훈(#48)이 습관으로 압축된 것입니다.
- 자율적으로 작동하는 것을 샌드박싱하세요. 감독 없이, 신뢰되지 않은 채, 반복적으로 실행되는 모든 것은 종료 스위치와 자원 제한(resource ceiling)을 가진 컨테이너에 속해야 합니다(#50). 격리는 사고보다 저렴합니다.
- 설치하기 전에 제거 경로를 아세요. 그것을 완전히 제거하는 방법—프로세스, 상태, 자격 증명(credentials), 예약된 작업—을 설명할 수 없다면, 당신은 그것을 평가한 것이 아니라 오디션 본 것입니다.
한 줄 요약 버전
지속성(Persistence)은 당신이 그것을 선택한 순간보다 더 오래 살아남는 계층이기 때문에 그렇습니다. 당신은 종료 비용(#58)을 측정하고, 자신만의 데이터를 보유하며(#52), 자체 런타임(#51)을 실행할 수 있지만, 여전히 자신이 동의했다는 것을 잊어버린 프로세스에 의해 조용히 통제되고 있을 수 있습니다. 당신이 소유하지 않은 계층은 당신을 소유하는 계층이며, 데몬(daemon)은 당신이 주의를 기울이는 것을 멈춘 후에도 계속 실행되는 계층입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기