Neovim 실행 취소 기록, 호환성이 깨졌다고 지워도 될까요?
핵심 요약
- Vim과 Neovim의 영속 실행 취소를 사용하면 편집기를 종료한 뒤에도 수정 기록을 다시 쓸 수 있습니다.
- 현재 파일이 온전해도 실행 취소 기록이 사라지면 과거의 중간 상태로 되돌리기 어려워질 수 있습니다.
- 오래된 기록을 읽지 못하는 문제와 그 기록을 지우는 결정은 따로 봐야 합니다.
- 호환성을 유지하기 어렵더라도 기존 기록을 보존해 복구를 시도할 여지는 남겨야 합니다.
편집기를 업데이트한 뒤 어제의 수정 과정을 되돌릴 수 없게 됐다고 해보겠습니다. 파일은 멀쩡해도 지웠던 문장이나 고치기 전 설정이 필요하면 곤란합니다. Neovim과 Vim의 실행 취소 기록에서도 따져볼 문제입니다. 파일 형식이 불안정하다는 이유로 그 안에 담긴 기록까지 지워도 괜찮을까요?
실행 취소 기록에는 현재 파일에 없는 내용이 있습니다
실행 취소라고 하면 보통 편집하다 실수했을 때 쓰는 기능을 떠올립니다. 영속 실행 취소, 즉 persistent undo는 이 기록을 파일로 보관했다가 다음 편집 세션에서도 쓸 수 있게 해줍니다. Vim과 Neovim에서 이 기능을 켜두면 편집기를 닫아도 수정 이력이 모두 사라지지는 않습니다.
예를 들어 설정 파일을 세 차례 수정했다고 해보겠습니다. 최종 파일은 정상적으로 저장했지만, 두 번째 수정에서 지운 설정이 나중에 다시 필요할 수 있습니다. 실행 취소 기록에는 그때의 상태로 되돌리는 데 필요한 정보가 남아 있을 수 있습니다.
이때 현재 파일만 보고 “아무것도 잃지 않았다”고 말하기는 어렵습니다. 최종 파일에 담긴 내용과 수정 이력에 남은 내용은 다르기 때문입니다. Git 같은 버전 관리 도구를 쓰더라도 중간에 수정한 내용을 모두 커밋으로 남기지는 않습니다.
물론 실행 취소 기록으로 별도 백업을 대신할 수는 없습니다. 그렇더라도 사용자가 복구에 쓰던 기록이라면, 그 기록을 잃은 일을 가볍게 넘길 수는 없습니다.
읽을 수 없는 것과 지우는 것은 다른 결정입니다
새 버전의 편집기가 예전 실행 취소 파일을 읽지 못한다고 가정해보겠습니다. 내부 구조가 바뀌었거나 예전 형식을 해석하는 코드를 더 이상 지원하지 않을 수 있습니다. 이는 새 소프트웨어가 예전 데이터를 계속 다룰 수 있는지, 곧 하위 호환성의 문제입니다.
기존 기록을 어떻게 처리할지는 따로 정해야 합니다. 읽지 못했다고 알린 뒤 파일을 그대로 남길 수도 있고, 기존 파일을 다른 이름으로 보관하고 새 기록을 만들 수도 있습니다. 기존 파일을 삭제하거나 새 기록으로 덮어쓰는 방법도 있습니다.
사용자에게는 이 차이가 큽니다. 원본이 남아 있으면 호환되는 환경이나 변환 도구로 복구를 시도할 수 있습니다. 그렇다고 복구가 반드시 성공한다는 뜻은 아닙니다. 다만 기록 자체가 사라지면 복구를 시도할 때 쓸 원본도 없어집니다.
삭제 명령이 있는지만 확인해서는 부족합니다. 오래된 기록을 새 기록으로 자동 교체해도 같은 결과가 생길 수 있습니다. 어느 쪽이든 기존 이력이 남아 있는지를 확인해야 합니다.
‘불안정한 형식’은 어디까지 설명해줄까요?
개발자가 파일 형식을 안정적으로 유지하기는 쉽지 않습니다. 오래된 형식을 계속 지원하려면 이를 해석하는 코드를 유지하고 여러 버전의 조합을 검증해야 합니다. 기능을 개선하고 버그를 고치는 데 쓸 시간을 호환성 유지에 들여야 하는 셈입니다.
“이 형식의 호환성은 보장하지 않는다”는 안내는 이런 부담에서 나올 수 있습니다. 사용자도 새 버전에서는 기록을 읽지 못할 수 있다는 점을 염두에 둬야 합니다. 하지만 그 안내를 했다는 이유만으로 기존 기록을 삭제하는 것까지 당연하게 받아들여야 한다고 보지는 않습니다.
사용자가 영속 실행 취소를 켜는 이유는 다음 작업에서도 기록을 쓰기 위해서입니다. 그 기록을 내부적으로 보조 파일에 저장한다고 해서 이런 기대가 사라지지는 않습니다. 기술적으로 어떤 파일로 분류하느냐와 그 안의 내용이 사용자에게 얼마나 중요한가는 별개의 문제입니다.
프로젝트가 모든 옛 형식을 무기한 지원할 필요는 없습니다. 그래도 지원을 끝낼 때 무엇이 사라지는지 설명하고, 사용자가 대비할 기회를 줘야 합니다. 여기서 말하는 책임은 제품을 설계하고 유지보수하는 과정에서 져야 할 책임입니다.
호환성 지원을 끝내도 기록은 남길 수 있습니다
먼저 생각해볼 방법은 읽지 못한 기록을 그대로 보존하는 것입니다. 새 실행 취소 기록을 저장해야 한다면 기존 파일을 따로 옮겨두면 됩니다. 어떤 기록을 읽지 못했는지, 원본은 어디에 보관했는지 사용자에게 알려주면 됩니다.
자동 변환 기능을 제공한다면 결과를 확인하기 전까지는 원본을 남겨두는 편이 좋습니다. 변환에 실패해도 원본이 있으면 다시 시도할 수 있기 때문입니다. 오래된 형식을 계속 지원하는 것보다 원본을 보관하는 쪽이 부담이 작을 수도 있습니다.
물론 기록을 보관하는 데도 비용은 듭니다. 기록이 쌓이면 디스크 공간을 차지하고, 이를 정리할 기능도 필요합니다. 따라서 얼마나 오래 보관하고 어떤 조건에서 삭제할지 분명히 정하되, 정리 여부는 사용자가 선택할 수 있어야 합니다.
오류 안내도 구체적으로 써야 합니다. “호환되지 않습니다”라는 말만으로는 기록이 남아 있는지 알 수 없습니다. “기존 기록을 읽지 못해 별도로 보관했습니다”라고 알려주면 사용자가 다음에 무엇을 할지 판단하는 데 도움이 됩니다.
편집기를 믿고 쓰려면 파일을 잘 저장하는 것과 함께, 문제가 생겼을 때 복구를 시도할 여지도 남아 있어야 합니다. 호환성 지원을 끝내더라도 사용자 기록은 신중하게 다뤄야 합니다. 지금 쓰는 도구에서도 읽지 못한 기록을 남겨두는지, 그 기록으로 다시 복구를 시도할 수 있는지 확인해둘 만합니다.
댓글
댓글을 불러오는 중...