본문 바로가기

개발/C#

파일 작성 시 원자성 유지방법

원자성이란?

파일 작성 과정에서 정전등으로 인한 사고로 파일 작성 실패 및 손실까지 나는 경우가 발생합니다.

윈도우 NT계열 운영체제의 파일 시스템은 NTFS를 사용하는데 트랜잭션 처리 모델이 적용되었지만

파일 작성 시에는 트랜잭션 처리를 하지 못한다고 합니다.

위의 예제처럼 콘솔로 실행 중일 때 노트북(데스크탑)을 임의로 강제 종료하게 되면 첫 스크린샷처럼 NUL(\0)이 발생됩니다.

MS에서는 이 문제를 지원하기 위해 TxF기술이 나왔지만 현재는 권장하지도 않고 지원도 하지 않는걸로 보입니다.

그래서 원자성을 지키기 위한 파일작성의 일반적인 접근 방법은 문서를 새 파일에 쓰고 원본 파일을 새 파일로 바꾸는 방법이라고 합니다.

중용한 파일을 작성할 때는 위 처럼 백업을 할 수 있는 방안을 마련하도록 해야겠습니다.

※ 참고 사이트

  1. StreamWriter 시스템 종료가 갑작스럽게 끝날 때 NUL 문자를 파일 끝에 씁니다.
  2. 파일에 원자 쓰기를 수행하는 방법
  3. 트랜잭션 NTFS 사용에 대한 대안