Skip to main content
테이블 데이터 난독화를 위한 간단한 도구입니다. 입력 테이블을 읽어 입력 데이터의 일부 속성은 유지하면서도 내용은 다른 출력 테이블을 생성합니다. 벤치마크에 사용할 수 있도록 실제 운영 데이터에 가까운 데이터를 공개할 수 있게 해줍니다. 다음과 같은 데이터 속성을 유지하도록 설계되었습니다.
  • 모든 컬럼과 모든 컬럼 튜플에 대한 값의 카디널리티(서로 다른 값의 개수)
  • 조건부 카디널리티: 다른 컬럼 값에 대한 조건하에서 특정 컬럼의 서로 다른 값 개수
  • 정수 절댓값의 확률 분포, 부호 있는 정수의 부호, 부동소수점 수의 지수와 부호
  • 문자열 길이의 확률 분포
  • 숫자에서 0이 나올 확률, 빈 문자열과 빈 배열, NULL 값의 확률
  • LZ77 및 엔트로피 계열 코덱으로 압축했을 때의 데이터 압축률
  • 테이블 전체에서 시간값의 연속성(값 차이의 크기), 부동소수점 값의 연속성
  • DateTime 값의 날짜 구성 요소
  • 문자열 값의 UTF-8 유효성
  • 문자열 값이 자연스럽게 보이는 특성
위 속성의 대부분은 성능 테스트에 유용합니다. 카디널리티, 크기, 압축률 등이 유지되므로 데이터 읽기, 필터링, 집계, 정렬은 원본 데이터와 거의 같은 속도로 동작합니다. 이 도구는 deterministic한 방식으로 동작합니다. 즉, 시드 값을 정의하면 변환 결과는 입력 데이터와 시드에 따라 결정됩니다. 일부 변환은 일대일 대응이므로 역으로 복원될 수 있습니다. 따라서 충분히 큰 시드 값을 사용하고 이를 비밀로 유지해야 합니다. 데이터를 변환하기 위해 일부 암호학적 기본 요소를 사용하지만, 암호학적 관점에서 보면 이를 올바른 방식으로 사용하지는 않습니다. 따라서 별도의 근거가 없는 한 결과를 안전하다고 간주해서는 안 됩니다. 공개하고 싶지 않은 데이터가 일부 남아 있을 수 있습니다. 항상 숫자 0, 1, -1, 날짜, 배열 길이, null 플래그는 원본 데이터와 정확히 동일하게 유지됩니다. 예를 들어 테이블에 값이 0과 1인 IsMobile 컬럼이 있다면, 변환된 데이터에서도 해당 값은 그대로 유지됩니다. 따라서 사용자는 모바일 트래픽의 정확한 비율을 계산할 수 있습니다. 다른 예를 들어보겠습니다. 테이블에 사용자 이메일처럼 비공개 데이터가 있고, 어떤 개별 이메일 주소도 공개하고 싶지 않다고 가정해 보겠습니다. 테이블이 충분히 크고 서로 다른 이메일을 여러 개 포함하고 있으며, 특정 이메일 하나의 빈도가 다른 값들보다 지나치게 높지 않다면 모든 데이터가 익명화됩니다. 하지만 한 컬럼의 서로 다른 값 개수가 적으면 그중 일부가 재현될 수 있습니다. 이 도구의 동작 알고리즘을 살펴보고 명령줄 매개변수를 세부 조정해야 합니다. 이 도구는 적어도 어느 정도 이상의 데이터 양(최소 수천 개의 행)이 있을 때만 제대로 동작합니다.
마지막 수정일 2026년 7월 3일