트랜잭션 NTFS 사용에 대한 대안

요약

Microsoft는 개발자가 향후 Windows 버전에서 사용할 수 없는 API 플랫폼을 채택하기보다는 논의된 대안을 활용하거나 경우에 따라 다른 대안을 조사할 것을 적극 권장합니다.

소개

TxF는 Windows에 원자성 파일 트랜잭션을 도입하기 위한 수단으로 Windows Vista에 도입되었습니다. 이를 통해 Windows 개발자는 단일 파일과의 트랜잭션, 여러 파일이 포함된 트랜잭션, 레지스트리(TxR을 통한) 및 데이터베이스(예: SQL)와 같은 여러 소스에 걸친 트랜잭션에서 파일 작업에 대한 트랜잭션 원자성을 가질 수 있습니다. TxF는 강력한 API 세트이지만 개발자가 애플리케이션 개발의 일부로 고려해야 하는 복잡성과 다양한 뉘앙스로 인해 Windows Vista 이후 이 API 플랫폼에 대한 개발자의 관심은 극히 제한적이었습니다. 그 결과 Microsoft는 대부분의 고객에게 더 많은 가치를 제공하는 다른 기능 및 API에 개발 및 유지 관리 노력을 집중하기 위해 향후 Windows 버전에서 TxF API를 더 이상 사용하지 않는 것을 고려하고 있습니다. 다음 섹션에서는 여러 유형의 애플리케이션 시나리오에서 TxF와 유사한 결과를 얻기 위한 샘플 대체 방법에 대해 설명합니다.

시나리오별 TxF의 대안

위에서 설명한 제한 사항으로 인해 개발자는 TxF가 충족하지 못하는 애플리케이션 시나리오를 처리하기 위해 TxF의 대안을 조사해야 합니다. 여기에서는 개발자가 고려해야 할 TxF의 일반적인 사용에 대한 몇 가지 추천 대안을 설명합니다. 이 목록은 완전하지도 완벽하지도 않습니다.

“document-like” 데이터로 단일 파일을 업데이트하는 애플리케이션

“document-like” 데이터를 처리하는 많은 애플리케이션은 전체 문서를 메모리에 로드하고 작업한 다음, 변경 내용을 저장하기 위해 다시 작성하는 경향이 있습니다. 여기서 필요한 원자성은 일관성 없는 상태가 파일을 손상시킬 수 있으므로 변경 내용이 완전히 적용되거나 전혀 적용되지 않는다는 것입니다. 일반적인 방법은 문서를 새 파일에 쓴 다음, 원래 파일을 새 파일로 바꾸는 것입니다. 이 작업을 수행하는 한 가지 방법은 ReplaceFile API를 사용하는 것입니다.

여러 파일 및/또는 레지스트리 하이브에 대한 업데이트를 수행하는 애플리케이션

파일 세트 및 레지스트리에 대한 업데이트를 원자적으로 수행해야 하는 많은 애플리케이션이 있습니다. 이 시나리오는 Windows Installer와 같은 설치 관리자 애플리케이션을 통해 가장 일반적으로 수행됩니다. Windows Installer에 대한 자세한 내용은 Windows Installer를 참조하세요.

구조적 데이터 세트를 관리하는 애플리케이션

많은 애플리케이션이 데이터를 저장하는 수단으로 다양한 유형의 독점 데이터 구조 세트를 관리합니다. 이러한 애플리케이션의 중요한 문제는 업데이트 작업 중에 오류가 발생하는 경우 내부 포인터/참조의 무결성을 유지하는 프로세스입니다. 이를 위한 메커니즘을 만드는 것은 실제로 “어려운 문제”이므로 대부분의 애플리케이션이 실제 데이터베이스 서버를 사용하여 데이터 세트를 관리합니다.

구조적 데이터를 관리하는 데 도움이 되는 두 가지 제안 사항은 다음과 같습니다.

  • Microsoft는 애플리케이션이 트랜잭션된 데이터 업데이트 및 검색 작업을 수행할 수 있도록 Windows에서 ESE(Extensible Storage Engine) 받은 편지함을 제공합니다. ESE(Extensible Storage Engine)에 대한 자세한 내용은 https://msdn.microsoft.com/library/gg269259.aspx를 참조하세요.
  • 보다 강력하고 견고하며 확장 가능한 데이터베이스 공급자가 필요한 애플리케이션의 경우 고객은 Microsoft SQL Server에서 제공되는 Filestream 기능을 사용하는 것이 좋습니다. SQL Filestream에 대한 자세한 내용은 https://technet.microsoft.com/library/bb933993.aspx를 참조하세요.

로컬 NTFS 볼륨의 파일 및 외부 SQL 데이터베이스의 테이블과 관련된 트랜잭션이 있는 애플리케이션

대규모 데이터 세트가 필요하거나 외부 데이터베이스 및 로컬 스토리지와 관련된 작업에서 트랜잭션 원자성을 가져야 하는 애플리케이션 클래스가 있습니다. 이 시나리오에서는 개발자가 SQL Filestream을 사용하여 트랜잭션 파일 작업을 수행하는 것이 좋습니다. SQL Filestream에 대한 자세한 내용은 https://technet.microsoft.com/library/bb933993.aspx를 참조하세요.

TxF는 타사 애플리케이션에서 일반적으로 사용되지 않는 복잡하고 미묘한 API 세트입니다. 향후 Windows 버전에서 이 API를 사용하지 못할 수도 있고 TxF가 개발된 많은 시나리오를 구현할 수 있는 더 간단한 대체 방법이 있다는 사실을 고려하여 Microsoft는 개발자가 애플리케이션에서 TxF에 종속되지 않고 대체 방법을 조사할 것을 강력하게 권장합니다.