어제 엄청 긴 포스트를 작성해서 올렸다.
사진이 매우 많아서 작성하는데 시간이 꽤 오래걸렸다.

난 저장 버튼을 누르기 전에 한 번 에디터의 내용을 Ctrl+A 하기 때문에 작성하는데 오래 걸렸다고 해도 로그아웃 되어 내용이 날아가는 일은 없다.
그러나 전혀 생각지도 못했던 사고가 티스토리의 잘못된 로직에서 발생했다.

난 다음날 약간의 수정을 하기 위해 포스트 내용을 고쳤고 저장 버튼을 눌렀다.
그런데 맙소사!!
"저장하지 못했습니다."라는 자바스크립트 얼럿창을 띄우고는 화면이 백지가 되어버리는 것이 아닌가.

난 이런 상황을 처음 접했기 때문에 당연히 상식적인 처리를 했을 것이라 생각하고 별다른 조치를 취하지 않았다. (그래서 사고 당시의 캡쳐 화면도 없다.)
그러나 티스토리는 기본적인 처리를 해두지 않았다.

티스토리 내부에서 벌어진 일은 이렇다.
1. 기존의 포스트는 새로운 내용을 저장을 하기 위해 삭제하였다.
2. 수정한 포스트는 저장하는데 실패하였다.
3. 결국 아무 내용도 남지 않고 글이 다 날아가버렸다.

바로 트랜잭션 처리를 제대로 하지 않은 것이다!!
저장하지 못했다는 얼럿창을 띄웠다는 것은 내용이 기록되지 않았음을 프로그램적으로 인지했다는 뜻이다.
그런데 기존의 내용을 살려두지 않고 그대로 날려버렸다니 당황스럽다.

더 신기한 건 자바스크립트 얼럿창으로 실패 메세지가 떴다는 것이다.
이건 클라이언트인 내 브라우저에서 실패가 일어났다는 뜻인데 어떻게 다음 서버에 저장되어 있는 기존의 포스트 내용이 날아가버린 것일까.
이 말인 즉, 기존 내용을 지우는 명령만 다음 서버로 전달되었다는 것 아닌가.
편집한 내용을 반영하고 나서 기존의 내용을 삭제하는 것이 아니라 기존 내용을 먼저 지워버리고 수정한 내용을 저장하는 모양이다.

DB에서는 기본적으로 트랜잭션 처리라는 것을 한다.
변경 후 저장하고 삭제하는 일련의 과정에서 하나의 작업이라도 완전히 끝나지 못하고 중단되면 모든 작업을 원래대로 되돌려 놓는 것이다.
그래야 데이터가 깨지는 일이 없다.

그런데 티스토리는 이런 안전한 작업 방식을 택하지 않은 게다.
지금까지 티스토리가 가장 서비스를 잘하고 있는 블로그라고 믿고 있었는데 이렇게 뒤통수를 맞다니. 으.
배신감이 좀 크다.

어쨌든 덕분에 난 삽질을 좀 했다.
다음 고객센터에 신고를 했으나 데이터를 복구해 줄리는 만무하다.
스스로 복구하는 방법을 찾을 수 밖에 없다.
덕분에 내 디스크 캐쉬를 다 뒤지는 대작업을 했다.
다행히 글의 일부는 자체적으로 복구를 했지만 최종 버젼으로 살려내지는 못했다.

이제 티스토리 에디터를 완전히 믿을 수는 없을 것 같다.
포스트는 당연히 살릴 수 없을 테니 별로 기대하지 않고 직접 복구했지만 고객센터의 대응 태도는 계속 지켜볼 생각이다.
진짜 서비스 마인드는 고객센터의 반응으로 판단할 수 있을 테니까.



덧붙여,
문제가 발생한 코드는 아래 부분이다.
this.save = function () {
var data = this.getData(true);
if (data == null)
return false;
this.nowsaving = true;
var request = new HTTPRequest("POST", "/owner/entry/update/???");
request.message = "저장하고 있습니다.";
request.onSuccess = function () {
entryManager.pageHolder.isHolding = function () {
return false;
}
PM.removeRequest(this);
window.location = "/???";
}
request.onError = function () {
PM.removeRequest(this);
alert("저장하지 못했습니다.");
}
PM.addRequest(request, "저장하고 있습니다.");
request.send(this.getData());
}
문제는 여전히 발생하고 있으며 아직은 티스토리의 대응이 없다.


Trackbacks  | Comments