데이터 중복 제거

컴퓨팅에서 **데이터 중복 제거**(data deduplication)는 반복되는 데이터의 중복 복사본을 제거하는 기술이다. 이 기술의 성공적인 구현은 저장 장치 활용도를 높여, 저장 용량 요구 사항을 충족하는 데 필요한 전체 저장 매체 양을 줄임으로써 CAPEX를 낮출 수 있다. 또한 네트워크 데이터 전송에 적용하여 전송해야 하는 바이트 수를 줄일 수도 있다.

중복 제거 과정은 고유하고 연속적인 데이터 블록인 데이터 '덩어리'(바이트 패턴이라고도 함)를 비교하는 것을 필요로 한다. 이 덩어리들은 분석 과정에서 식별되고 저장되며, 기존 데이터 내의 다른 덩어리들과 비교된다. 일치하는 부분이 발견될 때마다 중복되는 덩어리는 저장된 덩어리를 가리키는 작은 참조로 대체된다. 동일한 바이트 패턴이 수십, 수백, 심지어 수천 번 발생할 수 있다는 점을 감안할 때(일치 빈도는 덩어리 크기에 따라 다름), 저장되거나 전송되어야 하는 데이터 양을 크게 줄일 수 있다.

관련 기술로는 단일 인스턴스 (데이터) 저장소가 있는데, 이는 파일 전체 수준에서 여러 복사본의 콘텐츠를 단일 공유 복사본으로 대체하는 것이다. 다른 형태의 데이터 압축 및 중복 제거와 결합하는 것이 가능하지만, 데이터 중복 제거의 새로운 접근 방식(세그먼트 또는 서브 블록 수준에서 작동할 수 있음)과는 구별된다.

중복 제거는 LZ77 및 LZ78과 같은 데이터 압축 알고리즘과는 다르다. 압축 알고리즘이 개별 파일 내의 중복 데이터를 식별하고 이 중복 데이터를 더 효율적으로 인코딩하는 반면, 중복 제거의 목적은 대량의 데이터를 검사하고 동일한 파일 전체 또는 파일의 큰 섹션과 같은 큰 부분을 식별하여 공유 복사본으로 대체하는 것이다.

## 작동 원리
예를 들어, 일반적인 전자우편 시스템에는 동일한 1 MB(메가바이트) 파일 첨부 파일 100개가 포함될 수 있다. 전자우편 플랫폼이 백업될 때마다 첨부 파일의 100개 인스턴스가 모두 저장되어 100MB의 저장 공간이 필요하다. 데이터 중복 제거를 사용하면 첨부 파일의 인스턴스 하나만 실제로 저장되며, 이후 인스턴스는 저장된 복사본을 참조하여 약 100:1의 중복 제거 비율을 갖는다. 중복 제거는 추가 저장 공간 절약을 위해 데이터 압축과 함께 사용되는 경우가 많다. 중복 제거는 먼저 반복되는 데이터의 큰 덩어리를 제거하는 데 사용된 다음, 압축은 저장된 각 덩어리를 효율적으로 인코딩하는 데 사용된다.

컴퓨터 코드에서 중복 제거는 예를 들어 정보를 변수에 저장하여 개별적으로 작성할 필요 없이 중앙 참조된 위치에서 한 번에 모두 변경할 수 있도록 하는 방식으로 수행된다. 예를 들어 CSS 클래스 및 가 미디어위키에 있다.

## 장점
저장 장치 기반 데이터 중복 제거는 주어진 파일 집합에 필요한 저장 공간의 양을 줄인다. 이는 매우 유사하거나 심지어 동일한 데이터의 여러 복사본이 단일 디스크에 저장되는 응용 프로그램에서 가장 효과적이다. 데이터 손실에 대비하여 정기적으로 수행되는 데이터 백업의 경우, 주어진 백업의 대부분의 데이터는 이전 백업과 비교하여 변경되지 않은 상태로 유지된다. 일반적인 백업 시스템은 변경되지 않은 파일을 생략하거나 (하드 링크를 통해 연결하거나) 파일 간의 차이점을 저장하여 이를 활용하려고 한다. 그러나 두 접근 방식 모두 모든 중복성을 포착하지는 못한다. 하드 링크는 이메일 데이터베이스와 같이 약간만 변경된 큰 파일에는 도움이 되지 않는다. 차이점은 단일 파일의 인접한 버전에서만 중복성을 찾는다(삭제되었다가 나중에 다시 추가된 섹션이나 여러 문서에 포함된 로고 이미지를 고려해보라).

인라인 네트워크 데이터 중복 제거는 종점 간에 전송되어야 하는 바이트 수를 줄이는 데 사용되며, 이는 필요한 대역폭 양을 줄일 수 있다.(자세한 내용은 WAN 최적화를 참조)

가상 서버와 가상 데스크톱은 중복 제거의 이점을 얻는다. 각 가상 머신에 대한 명목상 별도의 시스템 파일을 단일 저장 공간으로 통합할 수 있기 때문이다. 동시에, 주어진 가상 머신이 파일을 사용자 지정하는 경우, 중복 제거는 다른 가상 머신의 파일을 변경하지 않는다. 이는 하드 링크 또는 공유 디스크와 같은 대안이 제공하지 않는 것이다. 가상 환경을 백업하거나 중복 복사본을 만드는 것도 유사하게 개선된다.

## 분류
### 후처리 대 인라인 중복 제거
중복 제거는 데이터가 흐르는 동안 "인라인"으로 발생하거나, 데이터가 기록된 후 "후처리" 방식으로 발생할 수 있다.

후처리 중복 제거의 경우, 새 데이터는 먼저 저장 장치에 저장되고, 나중에 프로세스가 데이터를 분석하여 중복을 찾는다. 이점은 데이터를 저장하기 전에 해시 계산 및 조회가 완료될 때까지 기다릴 필요가 없으므로 저장 성능이 저하되지 않는다는 것이다. 정책 기반 작업을 제공하는 구현은 사용자에게 "활성" 파일에 대한 최적화를 연기하거나 유형 및 위치에 따라 파일을 처리할 수 있는 기능을 제공할 수 있다. 한 가지 잠재적인 단점은 중복 데이터가 짧은 시간 동안 불필요하게 저장될 수 있다는 것인데, 이는 시스템이 거의 용량에 도달했을 때 문제가 될 수 있다.

또는 중복 제거 해시 계산은 인라인으로 수행될 수 있다. 즉, 데이터가 대상 장치에 들어올 때 동기화된다. 저장 시스템이 이미 저장한 블록을 식별하면 전체 새 블록 대신 기존 블록에 대한 참조만 저장된다.

인라인 중복 제거의 장점은 중복 데이터가 저장되거나 전송되지 않으므로 저장 공간 및 네트워크 트래픽이 적게 필요하다는 것이다. 단점은 해시 계산이 계산 비용이 많이 들 수 있으므로 저장 처리량이 감소할 수 있다는 것이다. 그러나 인라인 중복 제거를 사용하는 일부 공급업체는 높은 속도로 인라인 중복 제거를 수행하는 장비를 시연했다.

후처리 및 인라인 중복 제거 방법은 종종 격렬하게 논의된다.

### 데이터 형식
SNIA 사전은 두 가지 방법을 식별한다.
* 콘텐츠 비인지 데이터 중복 제거 - 특정 애플리케이션 데이터 형식에 대한 인식이 필요 없는 데이터 중복 제거 방법.
* 콘텐츠 인지 데이터 중복 제거 - 특정 애플리케이션 데이터 형식에 대한 지식을 활용하는 데이터 중복 제거 방법.

### 소스 대 타겟 중복 제거
데이터 중복 제거 방법을 분류하는 또 다른 방법은 발생 위치에 따라 분류하는 것이다. 데이터가 생성되는 위치에 가까운 곳에서 발생하는 중복 제거를 "소스 중복 제거"라고 한다. 데이터가 저장되는 위치에 가까운 곳에서 발생하는 중복 제거를 "타겟 중복 제거"라고 한다.

소스 중복 제거는 데이터 소스에서 데이터가 중복 제거되도록 보장한다. 이는 일반적으로 파일 시스템 내에서 직접 발생한다. 파일 시스템은 주기적으로 새 파일을 스캔하여 해시를 생성하고 기존 파일의 해시와 비교한다. 동일한 해시를 가진 파일이 발견되면 파일 복사본은 제거되고 새 파일은 이전 파일을 가리킨다. 그러나 하드 링크와 달리 중복 파일은 별개의 엔티티로 간주되며, 중복 파일 중 하나가 나중에 수정되면 카피 온 라이트라는 시스템을 사용하여 변경된 파일 또는 블록의 복사본이 생성된다. 중복 제거 프로세스는 사용자 및 백업 응용 프로그램에 투명하다. 중복 제거된 파일 시스템을 백업하면 종종 중복이 발생하여 백업이 원본 데이터보다 커진다.

소스 중복 제거는 복사 작업에 대해 명시적으로 선언될 수 있는데, 이는 복사된 데이터가 중복 제거되어야 한다는 것을 알기 위해 계산이 필요 없기 때문이다. 이는 파일 시스템에서 **리링크(reflink)** (리눅스) 또는 **클론파일(clonefile)** (맥 OS)이라는 새로운 형태의 "링크"로 이어진다. 여기서 하나 이상의 아이노드 (파일 정보 항목)가 데이터의 일부 또는 전부를 공유하게 된다. 이는 아이노드 수준에서 작동하는 하드 링크와 파일명 수준에서 작동하는 심볼릭 링크와 유사하게 명명되었다. 개별 엔트리는 복사본 변경 시 다른 복사본에 영향을 미치지 않는 비앨리어싱 카피 온 라이트 동작을 가진다. 마이크로소프트의 ReFS도 이 작업을 지원한다.

타겟 중복 제거는 데이터가 생성되지 않은 위치에서 중복을 제거하는 프로세스이다. 예를 들어 SAN/NAS에 연결된 서버가 있는데, SAN/NAS는 서버의 대상이 될 것이다(타겟 중복 제거). 서버는 어떠한 중복 제거도 인식하지 못하며, 서버는 데이터 생성 지점이기도 하다. 두 번째 예는 백업이다. 일반적으로 이는 데이터 저장소 또는 가상 테이프 라이브러리와 같은 백업 저장소가 된다.

### 중복 제거 방법
데이터 중복 제거 구현의 가장 일반적인 형태 중 하나는 데이터 덩어리를 비교하여 중복을 감지하는 방식으로 작동한다. 이를 위해 각 데이터 덩어리에는 소프트웨어에 의해 계산되는 식별자가 할당되며, 일반적으로 암호화 해시 함수를 사용한다. 많은 구현에서 식별자가 동일하면 데이터가 동일하다고 가정하지만, 비둘기집 원리 때문에 모든 경우에 사실일 수는 없다. 다른 구현에서는 동일한 식별자를 가진 두 데이터 블록이 동일하다고 가정하지 않고 실제로 동일한 식별자를 가진 데이터가 동일한지 확인한다. 소프트웨어가 주어진 식별자가 중복 제거 네임스페이스에 이미 존재한다고 가정하거나 실제로 두 데이터 블록의 식별을 확인하는 경우(구현에 따라 다름), 해당 중복 덩어리를 링크로 대체한다.

데이터가 중복 제거된 후, 파일을 다시 읽을 때 링크가 발견될 때마다 시스템은 해당 링크를 참조된 데이터 덩어리로 간단히 대체한다. 중복 제거 프로세스는 최종 사용자 및 애플리케이션에 투명하도록 의도되었다.

상업용 중복 제거 구현은 덩어리 나누기 방법 및 아키텍처에 따라 다르다.
* 덩어리 나누기: 일부 시스템에서는 덩어리가 물리적 계층 제약(예: WAFL의 4KB 블록 크기)에 의해 정의된다. 일부 시스템에서는 전체 파일만 비교하는데, 이를 단일 인스턴스 저장소 또는 SIS라고 한다. 덩어리 나누기의 가장 지능적인 (그러나 CPU 집약적인) 방법은 일반적으로 슬라이딩 블록(Sliding-block)으로 간주되며, 콘텐츠 정의 덩어리 나누기라고도 한다. 슬라이딩 블록에서는 파일 스트림을 따라 창을 이동하여 더 자연스럽게 발생하는 내부 파일 경계를 찾는다.
* 클라이언트 백업 중복 제거: 이것은 중복 제거 해시 계산이 원본(클라이언트) 머신에서 처음 생성되는 프로세스이다. 대상 장치에 이미 있는 파일과 동일한 해시를 가진 파일은 전송되지 않으며, 대상 장치는 중복된 데이터를 참조하기 위한 적절한 내부 링크를 생성한다. 이점은 데이터가 네트워크를 통해 불필요하게 전송되는 것을 방지하여 트래픽 부하를 줄인다는 것이다.
* 주 저장소 및 보조 저장소: 정의상 주 저장소 시스템은 가능한 가장 낮은 비용보다는 최적의 성능을 위해 설계되었다. 이러한 시스템의 설계 기준은 다른 고려 사항을 희생하여 성능을 높이는 것이다. 또한 주 저장소 시스템은 성능에 부정적인 영향을 미 미칠 수 있는 모든 작업에 대해 훨씬 덜 허용적이다. 또한 정의상 보조 저장소 시스템은 주로 중복되거나 보조 데이터 사본을 포함한다. 이러한 데이터 사본은 일반적으로 실제 생산 작업에 사용되지 않으므로 효율성 향상을 위해 일부 성능 저하를 더 허용한다.

현재까지 데이터 중복 제거는 주로 보조 저장소 시스템에 사용되었다. 그 이유는 두 가지이다. 첫째, 데이터 중복 제거는 중복 데이터를 검색하고 제거하는 데 오버헤드가 필요하다. 주 저장소 시스템에서는 이 오버헤드가 성능에 영향을 미 미칠 수 있다. 중복 제거가 보조 데이터에 적용되는 두 번째 이유는 보조 데이터가 중복 데이터가 더 많은 경향이 있기 때문이다. 특히 백업 응용 프로그램은 시간이 지남에 따라 상당한 양의 중복 데이터를 생성하는 경우가 많다.

데이터 중복 제거는 시스템 설계가 상당한 오버헤드를 요구하지 않거나 성능에 영향을 미 미치지 않는 일부 경우에 주 저장소와 함께 성공적으로 배포되었다.

## 단일 인스턴스 저장소
단일 인스턴스 저장소 (SIS)는 시스템이 콘텐츠 객체의 여러 복사본을 가져와 단일 공유 복사본으로 대체하는 기능이다. 이는 데이터 중복을 제거하고 효율성을 높이는 수단이다. SIS는 파일 시스템, 전자우편 서버 소프트웨어, 자료 백업 및 기타 저장소 관련 컴퓨터 소프트웨어에 자주 구현된다. 단일 인스턴스 저장소는 데이터 중복 제거의 간단한 변형이다. 데이터 중복 제거는 세그먼트 또는 서브 블록 수준에서 작동할 수 있지만, 단일 인스턴스 저장소는 객체 수준에서 작동하여 전체 파일 또는 전자우편 메시지와 같은 객체의 중복 복사본을 제거한다.

단일 인스턴스 저장소는 다른 데이터 중복 또는 데이터 압축 방법과 함께 사용(또는 계층화)하여 복잡성을 증가시키고 (일부 경우) 저장 공간 요구 사항을 약간 증가시키는 대신 성능을 향상시킬 수 있다.

## 단점 및 우려 사항
데이터 중복 제거를 위한 한 가지 방법은 암호화 해시 함수를 사용하여 데이터의 중복 세그먼트를 식별하는 방식에 의존한다. 두 개의 다른 정보 조각이 동일한 해시 값을 생성하는 경우, 이를 해시 충돌이라고 한다. 충돌의 확률은 주로 해시 길이에 따라 달라진다( 생일 공격 참조). 따라서 해시 충돌이 발생하고 데이터의 차이 여부를 확인하기 위한 추가 검증 수단이 사용되지 않으면 데이터 손상이 발생할 수 있다는 우려가 제기된다. 인라인 및 후처리 아키텍처 모두 데이터 무결성을 보장하기 위해 원본 데이터의 비트별 검증을 제공할 수 있다. 사용되는 해시 함수에는 SHA-1, SHA-256 등과 같은 표준이 포함된다.

이 프로세스의 계산 자원 집약성은 데이터 중복 제거의 단점이 될 수 있다. 성능을 향상시키기 위해 일부 시스템은 약한 해시와 강력한 해시를 모두 활용한다. 약한 해시는 계산 속도가 훨씬 빠르지만 해시 충돌 위험이 더 크다. 약한 해시를 활용하는 시스템은 나중에 강력한 해시를 계산하고 이를 사용하여 실제로 동일한 데이터인지 여부를 결정하는 요소로 사용한다. 해시 값을 계산하고 조회하는 데 관련된 시스템 오버헤드는 주로 중복 제거 워크플로의 기능이다. 파일 재구성은 이 처리를 필요로 하지 않으며 데이터 덩어리 재조립과 관련된 점진적인 성능 저하는 애플리케이션 성능에 영향을 미칠 가능성이 낮다.

또 다른 우려는 압축과 암호화의 상호 작용이다. 암호화의 목표는 데이터에서 식별 가능한 패턴을 제거하는 것이다. 따라서 암호화된 데이터는 기본 데이터가 중복되더라도 중복 제거할 수 없다.

데이터 중복 제거의 단점은 아니지만, 중복 제거된 대규모 데이터 저장소에 불충분한 보안 및 접근 유효성 검사 절차가 사용될 때 데이터 유출이 발생한 사례가 있다. 일부 시스템에서는 클라우드 저장소와 마찬가지로 공격자가 원하는 데이터의 해시 값을 알거나 추측하여 다른 사람이 소유한 데이터를 검색할 수 있다.

## 구현
중복 제거는 ZFS 또는 Write Anywhere File Layout과 같은 일부 파일 시스템 및 다양한 디스크 배열 모델에서 구현된다. 이는 윈도우 서버의 NTFS 및 ReFS에서 사용 가능한 서비스이다.

## 같이 보기

* 용량 최적화
* 클라우드 스토리지
* 콘텐츠 주소 지정 저장소
* 컨버전트 암호화
* 델타 부호화
* ID 해상도
* 정보 통합
* 링크드 데이터
* 포인터 (프로그래밍)
* 기록 연결
* 단일 인스턴스 저장소

## 각주

## 외부 링크
* 빅가, 하이디(2007.12.11). 웹캐스트: 데이터 중복 제거 효과
* 데이터 중복 제거를 위한 잠재 의미 인덱싱 사용.
* 데이터를 저장하는 더 나은 방법.
* 데이터 중복 제거, 파일 중복 제거 및 데이터 압축의 차이점은 무엇입니까? - eWeek의 데이터베이스
* SNIA DDSR SIG
** 데이터 중복 제거 비율 이해
* 자틴더 싱의 적은 것으로 더 많이 하기
* 중복 제거 데모

분류:데이터 관리
분류:데이터 압축