Skip to main content

컬럼 마스킹이란?

컬럼 마스킹(Column Masking) 은 민감한 컬럼의 값을 사용자 권한에 따라 동적으로 가림 처리 하는 기능입니다. 원본 데이터를 변경하지 않고, 조회 시점에 SQL 함수가 실행되어 마스킹된 값이 반환됩니다.
💡 왜 필요한가요? 고객 정보 테이블에는 이메일, 전화번호, 주민번호 같은 개인정보가 포함되어 있습니다. 분석가는 고객 구매 패턴을 분석해야 하지만, 개인 식별 정보는 볼 필요가 없습니다. 컬럼 마스킹을 사용하면 역할에 따라 적절한 수준의 데이터만 노출할 수 있습니다.
기본 개념은 권한 관리의 “열 수준 보안” 섹션에서 소개했습니다. 이 문서에서는 다양한 마스킹 패턴과 고급 활용법을 상세히 다룹니다.

동작 원리

컬럼 마스킹은 SQL 함수 로 구현됩니다. 함수는 원본 값을 입력받아, 사용자 권한에 따라 원본 또는 마스킹된 값을 반환합니다.

다단계 마스킹 패턴

관리자 / 분석가 / 일반 사용자 3단계

대부분의 기업에서는 다음 3단계 마스킹을 적용합니다.

마스킹 함수 작성

이메일 마스킹

전화번호 마스킹

주민번호 마스킹

카드번호 마스킹


테이블에 마스킹 적용

마스킹 함수 연결

마스킹 해제


고급 패턴

패턴 1: CURRENT_USER 기반 마스킹

💡 USING COLUMNS 절을 사용하면 마스킹 함수에 같은 행의 다른 컬럼 값 을 추가 인자로 전달할 수 있습니다.

패턴 2: 해싱(Hashing) 마스킹

해싱 마스킹은 원본을 볼 수 없지만, 동일 값은 동일 해시를 생성 하므로 분석가가 고유 사용자 수 파악이나 테이블 간 조인에 활용할 수 있습니다.

패턴 3: 범위형 마스킹 (숫자)


마스킹 확인 및 모니터링


주의사항 및 제한


행 필터 + 컬럼 마스킹 조합

행 필터와 컬럼 마스킹을 함께 적용 하면 더욱 정밀한 보안을 구현할 수 있습니다.

모범 사례


실전 인사이트: 이메일 마스킹을 안 했다가 GDPR 벌금 이야기

유럽 시장을 대상으로 서비스하는 한 이커머스 기업의 사례입니다. 분석 팀이 마케팅 세그먼트 분석을 위해 고객 데이터를 쿼리하는데, 이메일 주소가 마스킹 없이 그대로 노출 되고 있었습니다. 내부 분석 목적이라 큰 문제가 없다고 생각했지만, GDPR 감사에서 다음이 지적되었습니다: GDPR 위반으로 연 매출의 2%에 해당하는 벌금 이 부과될 수 있다는 경고를 받고, 2주 만에 긴급 마스킹을 적용했습니다.
⚠️ 핵심 교훈: “내부 분석용이니까 괜찮겠지”는 GDPR, 개인정보보호법 등에서 통하지 않습니다. 데이터 최소화 원칙(Data Minimization) 에 따라, 업무 수행에 필요한 최소한의 정보만 노출해야 합니다. 마케팅 분석에는 해시된 이메일로 충분하고, CS 팀에는 부분 마스킹이면 충분합니다.

실전 인사이트: 다단계 마스킹의 실전 설계

현실적인 마스킹 등급 설계

이론적으로는 3단계(관리자/분석가/일반)가 깔끔하지만, 실제 조직에서는 더 세분화된 등급이 필요합니다.
💡 L2 분석용 해시 마스킹의 핵심: 분석가에게 해시값을 반환하면, 원본 이메일은 볼 수 없지만 동일 이메일은 동일 해시 를 생성하므로 고유 사용자 수 집계, 테이블 간 조인이 가능합니다. 반드시 LOWER(TRIM())을 적용하여 “Alice@Company.com”과 “alice@company.com”이 같은 해시가 되도록 정규화하세요.

마스킹 적용 시 흔한 실수들


실전 인사이트: 마스킹 함수의 성능 영향 측정

마스킹 함수는 행 단위로 실행 되므로, 대량 데이터에서 성능 영향이 있을 수 있습니다. 실측 결과를 공유합니다.

성능 벤치마크 (1억 행 테이블 기준)

💡 실전 최적화 팁:
  • 마스킹된 컬럼을 SELECT *로 항상 가져오지 말고, 필요한 컬럼만 명시 하세요
  • 집계 쿼리에서 마스킹된 컬럼이 필요 없다면 제외하면 성능 저하가 거의 없습니다
  • SHA256 해시는 단순 문자열 치환보다 비용이 높으므로, 성능이 중요한 배치 작업에서는 미리 해시된 컬럼을 별도로 생성 하는 것도 방법입니다
  • 마스킹 함수 내에서 IS_ACCOUNT_GROUP_MEMBER()는 세션당 1번만 평가되므로, 이 부분의 오버헤드는 무시할 수 있습니다

정리


참고 링크