본문 바로가기
컴퓨터

Journaling

by dbadoy 2023. 8. 13.

파일 시스템에는 Journaling 이라는 모드가 존재한다.

먼저, 기술적인 이야기를 하기 전에 단어를 보며 어떤 것을 하려는지 유추해보자. Journey 는 여정이란 뜻을 갖고 있는데, 여정 가운데 발생한 수많은 변화, 반응에 대해 기록하는 것을 Journaling 이라고 한다. 파일 시스템에는 계속해서 읽기 및 쓰기 작업이 발생할텐데, 파일 시스템에 변화를 일으키는 쓰기 작업에 대한 변화들을 기록하는 것을 Journaling 모드라고 한다.

변화를 모두 저장하는 만큼 쓰기 작업에 대한 리소스가 더욱 많이 들지만, 시스템 충돌 및 비정상적 작동으로 인한 종료가 발생하게 됐을 때 작업하고 있던 내용에 대한 복구가 쉬워진다. 이 장점은 작업하던 내용의 용량이 클 때 더욱 부각된다. 

보통 스토리지에 실제 쓰기 작업을 하기 전에 관련 메타 데이터를 로깅하며, 해당 공간은 원자적이어야 한다. 정상 처리된 시점부터 시스템이 비정상적 종료된 시점 이전까지 기록된 로그들을 순차적으로 replay 하게 되는데, 모든 로그가 replay 되거나 모두 replay 되지 않아야 한다는 것이다.

Journal 은 보통 버퍼에 저장된 후, 커밋 규칙에 따라 디스크로 저장되는데 이 규칙 또한 여러 방법이 존재한다. 어느 시스템에서는 버퍼의 1/4 이 찼을 때 커밋을 하고, 어느 시스템에서는 타임아웃을 두고 커밋을 수행하기도 한다.

실제 소프트웨어를 만들 때도 이에 대한 내용을 응용할 수 있어 보인다. 예를 들어 특정 테스크들을 쌓아놓고 묶어서 원자적으로 처리하고 싶은 경우가 존재할 수 있는데, 실패하여 재시도할 때 처음부터 작업을 다시 하는 것이 아니라 남겨놓은 로그로 빠르게 복구를 할 수 있을 것이다.