비즈니스 앱을 위한 데이터 보존 정책: 보존 기간과 워크플로우
비즈니스 앱을 위한 데이터 보존 정책을 설계하는 방법: 명확한 보존 기간, 아카이브 전략, 삭제·익명화 워크플로우로 보고 가치를 유지하는 법을 배우세요.

보존 정책이 실제로 해결하는 문제
보존 정책은 앱이 따라야 할 명확한 규칙 모음입니다: 무엇을 보관하는지, 얼마나 오래 보관하는지, 어디에 보관하는지, 그리고 기한이 끝나면 무엇을 할지. 목표는 “모든 것을 삭제”하는 것이 아니라, 비즈니스를 운영하고 과거 사건을 설명하는 데 필요한 것은 유지하되 더 이상 필요하지 않은 것은 제거하는 것입니다.
계획이 없으면 세 가지 문제가 빠르게 나타납니다. 저장소는 조용히 늘어나 비용이 커지고, 개인 데이터의 복사본이 늘어날수록 프라이버시와 보안 위험이 커지며, 오래된 레코드가 오늘의 로직과 맞지 않거나 사람들이 임의로 항목을 삭제해 대시보드가 갑자기 바뀌면 보고가 신뢰할 수 없게 됩니다.
실용적인 보존 정책은 일상 운영, 증거, 고객 보호 사이의 균형을 맞춥니다:
- 운영: 사람들이 여전히 업무를 수행할 수 있어야 합니다.
- 증거: 나중에 거래를 설명할 수 있어야 합니다.
- 고객: 필요 이상으로 개인 데이터를 보관하지 않습니다.
대부분의 비즈니스 앱은 이름은 다르더라도 공통된 데이터 영역을 갖고 있습니다: 사용자 프로필, 거래, 감사 로그, 메시지, 업로드된 파일 등입니다.
정책은 규칙, 워크플로우, 도구의 조합입니다. 규칙은 예를 들어 “지원 티켓은 2년 보관”이라고 말할 수 있습니다. 워크플로우는 실제로 그게 무슨 뜻인지 정의합니다: 오래된 티켓을 아카이브 영역으로 이동하고, 고객 필드를 익명화하며, 무슨 일이 있었는지 기록합니다. 도구는 이를 반복 가능하고 감사 가능하게 만듭니다.
AppMaster로 앱을 구축한다면 보존을 일회성 정리 작업이 아니라 제품 동작으로 다루세요. 스케줄된 Business Processes는 매번 같은 방식으로 데이터를 아카이브, 삭제, 익명화할 수 있어 보고가 일관되고 사람들이 숫자를 신뢰할 수 있게 합니다.
기간을 정하기 전에 명확히 할 제약 조건
날짜를 정하기 전에, 데이터를 왜 보관하는지 명확히 하세요. 보존 결정은 보통 개인정보법, 고객 계약, 감사 또는 세무 규정에 의해 좌우됩니다. 이 단계를 건너뛰면 너무 많이 보관해 위험과 비용이 커지거나 나중에 필요할 데이터를 삭제하게 됩니다.
먼저 “반드시 보관해야 할 것”과 “있으면 좋은 것”을 구분하세요. 반드시 보관해야 할 데이터에는 보통 송장, 회계 항목, 누가 언제 무엇을 했는지 증명할 수 있는 감사 로그가 포함됩니다. 있으면 좋은 데이터는 오래된 채팅 기록, 상세 클릭 히스토리, 가끔 분석에만 쓰는 원시 이벤트 로그일 수 있습니다.
요구사항은 국가와 산업에 따라 다릅니다. 의료 제공자의 지원 포털은 B2B 관리 도구와 매우 다른 제약을 가질 수 있습니다. 같은 회사 내에서도 여러 국가의 사용자가 있으면 동일한 레코드 유형에 대해 규정이 달라질 수 있습니다.
결정을 평이한 언어로 작성하고 책임자를 지정하세요. “티켓은 24개월 보관”만으로는 충분하지 않습니다. 무엇이 포함되고 무엇이 제외되며 기간이 끝났을 때 무슨 일이 일어나는지(아카이브, 익명화, 삭제)를 정의하세요. 제품이나 법이 바뀔 때 업데이트가 지연되지 않도록 담당자나 팀을 지정하세요.
엔지니어링이 아무것도 만들기 전에 미리 승인을 받으세요. 법무는 최소 보관 기간과 삭제 의무를 확인합니다. 보안은 위험, 접근 제어, 로깅을 확인합니다. 제품은 사용자가 무엇을 계속 볼 필요가 있는지를 확인하고, 재무는 기록 보관 필요를 확인합니다.
예: 청구 기록은 7년 보관, 티켓은 2년 보관, 계정 종료 후 사용자 프로필 필드는 익명화하되 집계 지표는 유지할 수 있습니다. AppMaster에서는 이러한 문서화된 규칙을 스케줄된 프로세스와 역할 기반 접근으로 깔끔하게 매핑할 수 있어 나중에 추측이 줄어듭니다.
유형·민감도·저장 위치별로 데이터를 매핑하세요
팀이 “2년 보관”이라고만 결정하고 ‘그것’이 무엇인지 모르면 보존 정책은 실패합니다. 보유한 데이터를 간단히 매핑하세요. 완벽을 목표로 하지 말고, 지원 책임자와 재무 책임자가 모두 이해할 수 있는 수준이면 충분합니다.
유형과 민감도로 분류하기
실용적인 시작 분류 예시:
- 고객 데이터: 프로필, 티켓, 주문, 메시지
- 직원 데이터: 인사 기록, 접근 로그, 기기 정보
- 운영 데이터: 워크플로우, 시스템 이벤트, 감사 로그
- 재무 데이터: 송장, 지급, 세무 필드
- 콘텐츠와 파일: 업로드, 내보내기, 첨부파일
그다음 평이한 용어로 민감도를 표시하세요: 개인 데이터(이름, 이메일), 재무(계좌 정보, 결제 토큰), 자격 증명(비밀번호 해시, API 키), 규제 대상 데이터(예: 건강 정보) 등입니다. 확실하지 않으면 “잠재적 민감”으로 표시하고 확인될 때까지 주의해서 다루세요.
어디에 저장되고 누가 의존하는지 매핑하기
“어디에 저장되는지”는 보통 메인 DB 이상을 포함합니다. 정확한 위치를 기록하세요: 데이터베이스 테이블, 파일 스토리지, 이메일/SMS 로그, 분석 도구, 데이터 웨어하우스 등. 각 데이터셋에 의존하는 팀(지원, 영업, 재무, 경영)과 사용 빈도도 적어두세요. 그래야 너무 공격적으로 삭제하면 무엇이 깨질지 알 수 있습니다.
도움되는 습관: 각 데이터셋의 목적을 한 문장으로 적으세요. 예: “지원 티켓은 분쟁 해결과 응답 시간 추세 추적을 위해 보관됩니다.”
AppMaster로 구축했다면 Data Designer 모델, 파일 처리, 활성화된 통합을 검토해 실제로 배포된 것과 인벤토리를 정렬할 수 있습니다.
지도(map)가 마련되면 보존 결정은 하나의 큰 추측이 아니라 작은 명확한 선택의 연속이 됩니다.
사람들이 따를 수 있는 보존 기간 설정 방법
기간(window)은 설명하기 쉬우면서 적용하기 쉬워야 효과가 있습니다. 많은 팀이 데이터 사용 방식에 맞춘 단순한 티어를 사용하면 좋습니다: 핫(매일 사용), 웜(가끔 사용), 콜드(증빙을 위해 보관), 그다음 삭제 또는 익명화. 티어는 추상적 정책을 일상적 규칙으로 바꿉니다.
카테고리별로 기간을 설정하세요. 한 개의 전역 숫자로 모든 것을 처리하지 마세요. 송장과 결제 기록은 세무·감사를 위해 긴 콜드 기간이 필요하고, 지원 채팅은 가치를 빨리 잃을 수 있습니다.
또한 어떤 시점에서 카운트가 시작되는지 결정하세요. “2년 보관”은 ‘무엇으로부터 2년인지’를 정의하지 않으면 무의미합니다. 카테고리당 하나의 트리거를 선택하세요(생성일, 마지막 고객 활동, 티켓 마감일, 계정 종료 등). 트리거가 명확하지 않으면 사람들이 추측하게 되고 보존은 흩어집니다.
예외를 미리 문서화해 팀이 즉흥적으로 처리하지 않게 하세요. 공통 예외는 법적 보류, 환불 분쟁, 사기 조사 등입니다. 이들은 삭제를 일시 중지해야 하며, 숨겨진 복사본을 만들면 안 됩니다.
최종 규칙은 짧고 테스트 가능하게 유지하세요:
- 지원 채팅: 마지막 메시지 이후 6개월 뒤 익명화(법적 보류가 없는 경우)
- 마케팅 리드: 계약이 없으면 마지막 활동 후 12개월 뒤 삭제
- 고객 계정: 종료 후 30일 뒤 삭제; 송장은 7년 보관
- 보안 로그: 90일 핫, 조사용으로 12개월 콜드 보관
legal_hold=true로 표시된 레코드: 클리어될 때까지 삭제 금지
아카이브 전략: 사용성은 유지하면서 비용을 낮추기
아카이브는 백업이 아닙니다. 백업은 실수나 장애 이후 복구용입니다. 아카이브는 의도적인 작업으로, 오래된 데이터는 핫 테이블에서 저렴한 저장소로 옮겨지지만 여전히 감사, 분쟁, 역사적 질문을 위해 접근할 수 있게 유지됩니다.
대부분의 앱은 백업과 아카이브 둘 다 필요합니다. 백업은 빈번하고 포괄적입니다. 아카이브는 선택적이고 제어되며, 보통 필요한 것만 검색합니다.
더 저렴하지만 검색 가능한 스토리지 선택하기
저렴한 저장소는 사람들이 필요한 것을 여전히 찾을 수 있을 때만 도움이 됩니다. 많은 팀이 읽기 중심 쿼리에 적합한 별도의 데이터베이스나 스키마를 사용하거나, 파일로 내보내고 검색용 인덱스 테이블을 둡니다. PostgreSQL을 모델로 한 앱(그리고 AppMaster 포함)은 “archive” 스키마나 별도 데이터베이스를 사용해 프로덕션 테이블을 빠르게 유지하면서 허가된 리포팅을 통해 아카이브 데이터를 조회할 수 있습니다.
형식을 선택하기 전에 비즈니스에서 “검색 가능”이 무엇을 의미하는지 정의하세요. 지원은 이메일이나 티켓 ID로 조회해야 할 수 있고, 재무는 월별 합계를 필요로 하며, 감사는 주문 ID로 추적해야 할 수 있습니다.
무엇을 아카이브할지: 전체 레코드 또는 요약
전체 레코드는 세부를 보존하지만 비용이 더 들고 프라이버시 위험을 높입니다. 요약(월별 합계, 카운트, 주요 상태 변경)은 더 저렴하고 보고에 충분한 경우가 많습니다.
실용적 접근:
- 감사에 중요한 객체(송장, 환불, 접근 로그)는 전체 레코드 아카이브
- 대량 이벤트(클릭, 페이지뷰, 센서 펑 등)는 요약 아카이브
- 핫 저장소에는 작은 참조 슬라이스(보통 최근 30~90일)를 유지
인덱스 필드를 미리 계획하세요. 일반적인 인덱스: 기본 ID, 사용자/고객 ID, 날짜 버킷(월), 지역, 상태 등입니다. 이 항목들이 없으면 아카이브는 존재하지만 검색하기 번거로워집니다.
복원 규칙도 정의하세요: 누가 복원을 요청할 수 있고 누가 승인하며, 복원된 데이터는 어디로 가는지, 예상 소요 시간은 얼마인지. 복원은 위험을 줄이기 위해 일부러 느리게 만들 수 있지만 예측 가능해야 합니다.
삭제 vs 익명화: 올바른 접근 선택하기
보존 정책은 보통 삭제할지, 개인 정보를 제거해 보관할지 선택을 요구합니다. 둘 다 정답일 수 있지만 해결하는 문제는 다릅니다.
하드 삭제는 레코드를 물리적으로 제거합니다. 법적·비즈니스 이유로 보관할 필요가 없고 존재 자체가 위험인 경우(예: 민감한 내용이 포함된 오래된 채팅 로그) 적합합니다.
소프트 삭제는 행을 남겨두지만 삭제 표시(deleted_at 타임스탬프 등)를 해 정상 화면과 API에서 숨깁니다. 복원이 기대되거나 하위 시스템이 여전히 레코드를 참조할 수 있을 때 유용합니다. 단점은 소프트 삭제된 데이터가 여전히 공간을 차지하고, 내보내기 설정이 완전하지 않으면 유출될 수 있다는 점입니다.
익명화는 이벤트나 거래 자체는 유지하되 개인을 식별할 수 있는 부분을 제거하거나 대체합니다. 제대로 수행하면 되돌릴 수 없습니다. 가명화(pseudonymization)는 달라서 식별자를 토큰으로 교체하고 재식별 맵을 별도로 유지해 사기 조사에 도움을 주지만 완전 익명화와 같지는 않습니다.
관련 데이터를 명확히 하세요. 삭제했는데 첨부파일, 썸네일, 캐시, 검색 인덱스, 분석 복사본이 남아 있으면 정책의 목적이 조용히 무너집니다.
또한 삭제가 수행되었다는 증거가 필요합니다. 간단한 삭제 영수증을 남기세요: 무엇이 제거되었는지 또는 익명화되었는지, 언제 실행되었는지, 어떤 워크플로우가 실행되었는지, 성공적으로 완료되었는지 여부. AppMaster에서는 Business Process가 잡이 끝날 때 감사 항목을 쓰도록 하면 충분합니다.
개인 데이터를 제거하면서도 보고 가치를 유지하는 방법
레코드를 삭제하거나 익명화하면 대시보드가 시간에 따라 조인하던 값이 깨질 수 있습니다. 변경하기 전에 어떤 숫자가 월별로 비교 가능해야 하는지 적어 두세요. 그렇지 않으면 나중에 "작년 차트가 왜 변했나"를 디버그하게 됩니다.
우선 유지해야 할 핵심 지표 목록을 만드세요:
- 일별/주별/월별 수익과 환불
- 제품 사용: 활성 사용자, 이벤트 카운트, 기능 채택
- SLA 지표: 응답 시간, 해결 시간, 가동 시간
- 퍼널 및 전환율
- 지원량: 티켓 수, 카테고리, 백로그 연령
그다음 보고에 필요한 데이터를 신중히 저장하도록 설계하세요. 개인 식별자가 필요하지 않도록 집계하는 것이 안전한 접근입니다. 원시 행을 영구 보관하는 대신 일일 합계, 주간 코호트, 개인 추적이 불가능한 카운트를 유지하세요. 예: 원본 티켓 내용을 나중에 삭제하더라도 "카테고리별 일별 생성 티켓 수"나 "주별 초기 응답 시간 중앙값"은 남길 수 있습니다.
신원 없이도 안정적인 분석 키 유지하기
일부 리포트는 시간에 걸쳐 행동을 그룹화할 안정적인 키가 필요합니다. 직접 식별 불가능한 대체 분석 키(예: 분석 전용 랜덤 UUID)를 사용하고, 보존 기간이 끝나면 실제 사용자 ID와의 매핑을 제거하거나 잠궈 두세요.
또한 가능하면 운영 테이블과 보고 테이블을 분리하세요. 운영 데이터는 변경되고 삭제됩니다. 보고 테이블은 append-only 스냅샷이나 집계로 유지하세요.
익명화 후 무엇이 바뀌는지 정의하기
익명화에는 결과가 따릅니다. 팀이 놀라지 않도록 무엇이 바뀌는지 문서화하세요:
- 특정 날짜 이후 사용자 레벨 드릴다운이 중단될 수 있음
- 속성이 제거되면 과거 세그먼트가 “알 수 없음”으로 표시될 수 있음
- 이메일이나 전화번호를 지우면 중복 제거(deduplication)가 달라질 수 있음
- 일부 감사는 여전히 비식별 타임스탬프와 ID를 필요로 할 수 있음
AppMaster를 사용한다면 익명화를 워크플로우로 취급하세요: 먼저 집계를 쓰고, 보고 출력이 올바른지 확인한 다음 원본 레코드의 필드를 익명화하세요.
단계별: 정책을 실제 워크플로우로 구현하기
보존 정책은 정상적인 소프트웨어 동작이 되었을 때만 작동합니다. 입력을 정의하고, 수행할 작업을 정의하며, 결과를 가시화하세요.
한 페이지짜리 매트릭스로 시작하세요. 각 데이터 유형에 대해 보존 기간, 트리거, 다음 동작(유지, 아카이브, 삭제, 익명화)을 기록하세요. 사람들이 1분 안에 설명할 수 없다면 지켜지지 않을 것입니다.
레코드가 “어디론가 사라졌다”고 느끼지 않도록 명확한 라이프사이클 상태를 추가하세요. 대부분의 앱은 세 가지로 충분합니다: active, archived, pending delete. 상태는 스프레드시트가 아니라 레코드 자체에 저장하세요.
실용적 구현 순서:
- 보존 매트릭스를 작성하고 product, legal, ops가 찾을 수 있는 곳에 저장하세요.
- 라이프사이클 필드(
status와archived_at,delete_after같은 날짜)를 추가하고 화면과 API가 이를 존중하도록 업데이트하세요. - 스케줄 잡(일간이 보통)을 구현하세요: 하나는 아카이브, 다른 하나는 기한이 지난 것을 삭제하거나 익명화합니다.
- 예외 경로를 추가하세요: 누가 삭제를 일시중지할 수 있는지, 얼마나 오래, 어떤 사유를 기록해야 하는지.
- 프로덕션과 유사한 복사본에서 테스트한 다음 주요 리포트(카운트, 합계, 퍼널)를 전후로 비교하세요.
예: 지원 티켓은 90일 동안 활성 상태였다가 18개월 동안 아카이브로 이동한 뒤 익명화될 수 있습니다. 워크플로우는 티켓을 아카이브로 표시하고 큰 첨부파일을 저렴한 저장소로 옮기며 티켓 ID와 타임스탬프는 유지하고 이름과 이메일을 익명값으로 대체합니다.
AppMaster에서는 라이프사이클 상태를 Data Designer에 두고 아카이브/정리 로직을 스케줄된 Business Processes로 실행할 수 있습니다. 목표는 반복 가능한 실행과 감사하기 쉬운 명확한 로그입니다.
데이터 손실이나 보고 손상을 일으키는 흔한 실수들
대부분의 보존 실패는 선택한 기간 자체가 원인인 경우는 적습니다. 삭제가 잘못된 테이블을 건드리거나 관련 파일을 빠뜨리거나 보고서가 의존하는 키를 변경할 때 발생합니다.
흔한 시나리오: 지원팀이 “오래된 티켓”을 삭제했는데 첨부파일은 별도 테이블이나 파일 저장소에 남겨두는 것을 잊습니다. 나중에 감사인이 환불 근거를 요청하면 티켓 텍스트는 있지만 스크린샷이 없는 상황이 됩니다.
다른 함정들:
- 주 테이블을 삭제하지만 사이드 테이블(첨부, 댓글, 감사 로그)을 고아 상태로 남겨두는 경우
- 재무·보안·컴플라이언스가 여전히 총합을 대조해야 하는 원시 이벤트를 삭제하는 경우
- 소프트 삭제에 영원히 의존해 데이터베이스가 계속 커지고 삭제된 데이터가 내보내기에서 나타나는 경우
- 익명화하면서 식별자(예:
user_id)를 변경해 대시보드의 조인과 저장된 쿼리가 깨지는 경우 - 예외와 법적 보류에 대한 책임자가 없어서 규칙을 우회하는 경우
보고가 깨지는 또 다른 빈번한 사례는 사람 기반 키에 의존한 리포트입니다. 이메일과 이름을 덮어쓰는 것은 보통 괜찮지만 내부 사용자 ID를 바꾸면 한 사람의 이력이 여러 아이덴티티로 분할되어 월간 활성 사용자나 평생 가치(LTV) 보고가 흔들릴 수 있습니다.
두 가지 해결책이 대부분의 팀에 도움이 됩니다. 첫째, 절대 바뀌지 않는 보고 키(예: 내부 계정 ID)를 정의하고 개인 필드와 분리하세요. 둘째, 삭제를 관련 데이터(파일 및 로그 포함)를 모두 순회하는 완전한 워크플로우로 구현하세요. AppMaster에서는 보통 사용자나 계정에서 시작해 의존성을 수집하고 안전한 순서로 삭제·익명화하는 Business Process로 잘 매핑됩니다.
마지막으로 누가 법적 보류를 일시중지할 수 있는지, 그 일시중지가 어떻게 기록되는지 결정하세요. 예외에 책임자가 없으면 정책은 일관성 없이 적용됩니다.
실무로 전환하기 전 빠른 점검 사항
삭제나 아카이브 잡을 실행하기 전에 현실 점검을 하세요. 대부분의 실패는 누가 데이터를 소유하는지, 복사본이 어디에 있는지, 보고서가 그것에 어떻게 의존하는지 모르는 상태에서 발생합니다.
보존 정책에는 문서뿐 아니라 명확한 책임과 테스트 가능한 계획이 필요합니다.
실행 전 체크리스트
- 모든 데이터셋별로 책임자(변경을 승인하고 질문에 답할 수 있는 사람)를 지정하세요.
- 각 데이터 카테고리에 보존 기간과 트리거(예: "티켓 종료 후 90일" 또는 "마지막 로그인 후 2년")가 있는지 확인하세요.
- 같은 레코드를 나타내는 모든 위치(데이터베이스, 파일 저장소, 내보내기, 로그, 분석 복사본, 백업)를 찾을 수 있는지 증명하세요.
- 아카이브가 유용하게 남도록 검색 및 조인을 위한 최소 필드(ID, 날짜, 상태)를 유지하고 어떤 항목이 삭제되는지 문서화하세요.
- 무엇이 삭제되거나 익명화되었는지, 언제 실행되었는지, 어떤 규칙을 따랐는지 증명할 수 있도록 하세요.
간단한 검증 방법은 드라이런입니다: 작은 배치(예: 한 고객의 오래된 사례)를 선택해 테스트 환경에서 워크플로우를 실행하고 주요 리포트를 전후로 비교하세요.
증거(evidence)는 어떻게 보여야 하나요
개인 데이터를 다시 들여오지 않으면서 증거를 저장하세요:
- 잡 실행 로그(타임스탬프, 규칙명, 레코드 수)
- 레코드 ID와 수행된 작업(삭제 또는 익명화)을 기록한 불변 감사 테이블
- 법적 보류 항목의 짧은 예외 목록
- 기대되는 지표가 안정적임을 보여주는 리포트 스냅샷
AppMaster에서 구현한다면 이 체크들은 Data Designer의 보존 필드, Business Process Editor의 스케줄 잡, 그리고 명확한 감사 출력으로 직접 매핑됩니다.
예시: 보고는 유지하면서 리스크와 비용을 줄이는 고객 포털 보존 계획
지원 티켓, 송장 및 환불, 원시 활동 로그(로그인, 페이지뷰, API 호출)를 저장하는 고객 포털을 상상해 보세요. 목표는 빌링·감사·추세 보고를 망치지 않으면서 리스크와 저장 비용을 낮추는 것입니다.
먼저 반드시 보관해야 할 데이터와 일상 지원에만 쓰이는 데이터를 분리하세요.
간단한 보존 일정 예:
- 지원 티켓: 마감일로부터 18개월 동안 전체 내용 보관
- 송장 및 결제 기록: 7년 보관
- 원시 활동 로그: 30일 보관
- 보안 감사 이벤트(관리자 변경, 권한 업데이트): 12개월 보관
오래된 티켓은 아카이브 단계로 이동하세요. 모든 메시지를 메인 테이블에 영구 보관하지 말고, 18개월이 지난 종료된 티켓은 아카이브 영역으로 옮겨 검색 가능한 작은 요약(티켓 ID, 날짜, 제품 영역, 태그, 해결 코드, 마지막 상담원 메모의 짧은 발췌)을 유지하면 전체 개인 정보를 보관하지 않으면서 맥락을 유지할 수 있습니다.
종료된 계정은 트렌드를 계속 봐야 한다면 삭제보다 익명화를 선택하세요. 개인 식별자(이름, 이메일, 주소)를 랜덤 토큰으로 대체하고, 플랜 유형이나 월별 합계 같은 비식별 필드는 유지하세요. 일일 활성 사용자 수, 월별 티켓 수, 월별 수익 같은 집계는 개인 데이터를 저장하지 않는 별도 보고 테이블에 보관하세요.
월별 보고는 변경되겠지만, 계획하면 나빠지지 않습니다:
- 티켓 볼륨 추세는 전체 텍스트가 아니라 태그와 해결 코드에서 가져오므로 유지됩니다.
- 수익 보고는 송장을 남겨 두면 안정적입니다.
- 장기 사용 추세는 원시 로그가 아니라 집계에서 도출할 수 있습니다.
- 코호트는 개인 ID 대신 계정 수준 토큰을 기준으로 이동할 수 있습니다.
AppMaster에서는 아카이브와 익명화 단계를 스케줄된 Business Processes로 실행할 수 있어 정책이 매번 동일하게 실행됩니다.
다음 단계: 정책을 반복 가능한 자동화로 전환하기
보존 정책은 사람들이 따를 수 있고 시스템이 일관되게 강제할 때만 작동합니다. 간단한 보존 매트릭스(데이터셋, 책임자, 기간, 트리거, 다음 동작, 서명)를 만들고 법무·보안·재무·지원팀과 검토하세요.
한 번에 모든 것을 자동화하지 마세요. 지원 티켓이나 로그인 로그처럼 일반적인 하나의 데이터셋을 골라 처음부터 끝까지 구현하세요. 워크플로우를 실현하고 일주일간 실행해 비즈니스가 기대하는 보고가 유지되는지 확인한 뒤 같은 패턴으로 다음 데이터셋으로 확장하세요.
자동화는 관찰 가능해야 합니다. 기본 모니터링 항목은 보통 다음을 포함합니다:
- 잡 실패(아카이브나 삭제가 실행되어 완료되었는가?)
- 아카이브 증가(저장 추세 변화)
- 삭제 대기 백로그(대상인데 처리되지 않은 항목)
- 보고 드리프트(보존 실행 후 주요 지표 변화)
사용자 관점도 계획하세요. 사용자가 무엇을 요청할 수 있는지(내보내기, 삭제, 정정), 누가 승인하는지, 시스템이 무엇을 수행하는지 결정하세요. 지원팀에는 영향을 받는 데이터, 소요 시간, 삭제 후 복구 불가능한 항목에 대한 짧은 내부 스크립트를 제공하세요.
코드를 직접 쓰지 않고 구현하고 싶다면 AppMaster (appmaster.io)는 보존 자동화에 실용적입니다. Data Designer에서 라이프사이클 필드를 모델링하고 스케줄된 Business Processes로 아카이브·익명화·감사 로깅을 실행할 수 있습니다. 하나의 데이터셋으로 시작해 지루할 만큼 신뢰 가능하게 만든 다음 나머지에 반복하세요.
자주 묻는 질문
보존 정책은 무분별한 데이터 증가와 “모든 것을 그냥 보관”하는 관행을 막아줍니다. 무엇을, 얼마 동안, 그리고 기한이 끝났을 때 무엇을 할지 예측 가능한 규칙을 정해 비용, 개인정보 위험, 그리고 보고서의 갑작스러운 변화가 쌓이는 것을 방지합니다.
데이터가 존재하는 이유와 누가 사용하는지를 기준으로 시작하세요: 운영, 감사/세무, 고객 보호 등. 인보이스, 티켓, 로그, 파일 등 데이터 유형별로 간단한 보존 기간을 정하고 법무·보안·재무·제품과 조기에 합의하면, 나중에 워크플로우를 다시 만들지 않아도 됩니다.
카테고리마다 하나의 명확한 트리거를 정의하세요. 예: 티켓 마감일, 마지막 활동일, 계정 해지일 등. 트리거가 애매하면 팀마다 다르게 해석해 ‘2년’이라는 규칙이 실제로는 여러 가지 의미가 되어 버립니다.
법적 보류나 사기 조사가 필요한 경우 해당 레코드를 보관/삭제/익명화 작업에서 일시 중지하는 legal hold 플래그나 상태를 사용하세요. 보류는 정상 워크플로우를 멈추되, 추적 가능하고 감사 가능한 방식으로 기록되어야 합니다.
백업은 실수나 장애 복구용으로 폭넓고 자주 만듭니다. 아카이브는 의도적입니다: 오래된 데이터를 핫 테이블에서 꺼내 더 저렴하고 제어된 저장소로 옮기지만, 감사나 분쟁을 위해 필요 시 검색할 수 있게 유지합니다.
데이터를 보관할 이유가 전혀 없고 존재 자체가 위험을 키울 때 삭제를 선택하세요. 반면 트렌드나 증거로서 항목은 남겨두되 개인 식별 정보를 제거해야 한다면 익명화가 맞습니다.
소프트 딜리트는 복원이나 참조 무결성 측면에서 유용하지만, 실제로는 데이터가 제거되지 않습니다. 소프트 삭제된 행은 여전히 공간을 차지하고, 쿼리나 내보내기 설정이 불완전하면 유출될 수 있습니다.
오래된 레코드를 익명화하거나 삭제할 때는 장기 집계나 스냅샷을 먼저 저장해 보고서가 개인 식별자에 의존하지 않도록 하세요. 대시보드가 개인 식별자로 조인하지 않도록 보고 모델을 재설계하면 보존 실행 후에도 차트가 깨지지 않습니다.
레코드에 라이프사이클 필드를 추가하고, 스케줄 잡으로 아카이브→익명화/삭제를 실행하며, 무엇이 일어났는지 증명할 감사 항목을 남기세요. AppMaster에서는 Data Designer의 필드와 스케줄된 Business Processes로 이를 깔끔하게 구현할 수 있습니다.
작은 범위로 건조 실행(dry run)을 해보고 주요 집계(카운트, 합계, 퍼널)를 전후로 비교하세요. 또한 레코드가 존재하는 모든 위치(테이블, 파일 스토리지, 내보내기, 로그, 백업)를 추적할 수 있고, 삭제·익명화 영수증(타임스탬프, 규칙명, 처리 건수)을 캡처할 수 있어야 합니다.


