danew 작성:위키에서 텍스트는 저장할 때마다 불어나지만 (전통적인 방식에서는 맞춤법 수정으로 저장을 9번 하면 용량이 10배로 불어버립니다, 그래서 rcs를 쓰거나 합니다) 정작 diff를 들여다볼 일은 사실 최근에 수정된 것 밖에 없거든요. diff 호출은 RecentChanges 범위에 완전히 집중되어 있습니다. (만일 diff가 유용할 일이 있다면 그건 diff로 남겨놓을 게 아니라 본문에 반영해놓아야 하는 것이죠.) 나머지는 순전히 낭비입니다. 그 오래된 구버전들을 정리할 때 언급하신 방식으로는 매번 본문 테이블 전체를 긁어야 합니다. 그리고 diff 작업이 빈도가 높은 게 아닌데 본문에다 모두 모아놓는 건 다른 작업에서 손해겠죠. (특히 본문검색은)
모두 적지는 않았습니다만,
페이지를 저장할 때, 새로운 버전으로 저장할 지를 선택하도록 하는것이 유용하다고 봅니다.
예를들어,
이미 "version 3, version 2, version 1" 이 같이 기록되어 있는 상황에서,
(저장 순서는 최근버전을 먼저 저장한다고 가정하겠습니다.)
새로 저장할 때에, "save as new version" 등 과 같은 키워드를 선택하지 않고 저장한다면.
"updated version 3, version 2, version 1" 로 저장하고,
"save as new version" 등 과 같은 키워드를 선택하였다면,
"version 4, version 3, version 2, version 1" 로 저장한다고 생각했습니다.
기존의 버전을 하나의 화일에 넣는것에 대해서 생각한 이유는,
diff로 데이터를 저장하게 되면,
매번 그 페이지로 html 페이지를 만들때마다,
(1) diff로 구성되어 있는 화일로부터, 온전한 화일을 만들고,
(2) 온전하게 만들어진 화일로 html 페이지를 구성
해야하는 2단계 작업으로 됩니다. 그렇기에, 해당 서버의 리소스를 많이 잡아먹겠죠..
더구나,
- 소스페이지에 문제가 있거나(디버깅을 해야 하거나),
- 유저가 직접 페이지 정보를 참조해야 하는 경우(새로운 버전이나, 다른 툴로 옮겨타거나, 직접적인 데이터 확인을 하려 할 경우)
가독성이 떨어집니다.
어떤게 최근의 완성된 데이터인지를 확인하기가 어렵다는 말이죠.
기존의 테더툴즈의 완성된 소스를 generate하는 부분을 통하지 않고는..
또한 테더툴즈 를 업그레이드 할 경우, 특히 저 (1)부분을 업데이트 해야할 경우,
개발자에게 막대한 부담감이 가중될 것입니다. 워낙 조심스러워야 하는 부분이거든요..
하지만, 데이터를 버전별로 하나의 화일에 저장하게 되면,
- 일반적인 작업에 CPU리소스 점유율을 낮출 수 있습니다.
보기/수정하기 작업이 버전간의 차이를 확인하는 작업보다 많을 것입니다.
그렇기에, 이와같이 저장을 하게되면, 보기/수정하기 작업에 서버의 리소스 점유율을 낮출 수 있고,
다만 버전간의 차이를 확인하는 작업 시에만, 약간의(diff를 계산하기 위한) 리소스 점유율을 보일 것입니다.
그리고, 최근 버전이 화일의 앞부분에 위치하기 때문에,
해당화일에서 보기/수정하기 작업을 위해 최근 버전의 데이터를 뽑아내는데 서버의 CPU리소스를 낮출 수 있을거라 보입니다.
- 데이터 유지&관리 가 더욱 쉽습니다.
버전업이나 툴 갈아타기 등을 처리하는데, 개인이나 개발자 모두 쉽게 접근할 수 있습니다.
(온전한 데이터를 개발자 혹은 개인이 직접 보고 관리할 수 있기 때문에...)
이는 테더소스의 유지 관리 및, 개발 위임시에도 유리하게 작용할 것입니다.
혹은, danew님 처럼, 개인적으로 소스에 접근해서 수정을 하는 경우에도,
직관적으로 작업을 하면 되기 때문에 쉽게 할 수 있겠죠..
- 마지막으로, 요즘에 들어서 데이터의 크기를 많이 차지하는 것은, 멀티미디어 자료 입니다.
개인 사용자의 텍스트 정보의 사이즈를 줄이기 위해, 정보를 복잡하게 처리할 필요가 있을지는 좀 의문입니다.
간단한 그림파일을 올리는것 만으로도, 웬만큼 긴 텍스트 보다 더욱 많은 데이터 크기를 가집니다.
더구나, 요즘에는 그림파일 뿐 만 아니라 음성&동영상 자료를 올리는 경향이 많아지고 있죠.
굳이 텍스트 데이터의 크기에 인색할 필요는 없으리라 봅니다.
물론 텍스트 정보가 화일로 기록되는게 아니라 DB로 처리된다고 하더라도,
유저가 새로운 버전으로 저장할 지를 체크할 수 있는 옵션을 주게되기 때문에,
유저가 자신의 DB크기를 조절 할 수 있을 것입니다.
추가로, 수정작업을 할 때에, 수정을 한 부분이 얼마 되지 않으면, 기존의 버전에 덮어쓸 것인지를 메세지로 보내 확인하고, 아니면 새로운 버전으로 저장을 하도록 하는 것도, 유저인터페이스와 사용상의 편리함이 있을 듯 하군요...
저 역시 프로그래머 입니다만,
이런 웹프로그램쪽에는 경험이 없기에,
danew님처럼 실제 위키에서 어떤식으로 데이터를 처리한다 까지는 알지 못합니다.
다만, 간단히 생각해 봤을때, 이렇게 저장하는게, 유지&관리&확장성 등에서 낫다고 보였기 때문에 이렇게 생각한 거구요..
물론 wikipedia와 같은 대형 wiki사이트 혹은 제가 사용하는 pbwiki와 같은 상용 wiki사이트의 경우,
정말 많은 사람들이 위키페이지를 만들고 수정하고 하기 때문에,
danew의 의견과 같이 diff를 이용해서 하드리소스를 줄이려 할 것이라고 보여집니다.
하지만, 그와 동시에, CPU 리소스 점유율을 줄이기 위해, 일종의 cache 기능을 하는 부분이 있을 것으로 생각됩니다.
(일종의 paging방식처럼, 참조율이 높은 페이지에 대해서는 backup하고 있다가, 페이지를 생성하지 않고, 바로 뿌려주는...)
이런기능이 일반 개인이 홈페이지에까지 필요하다고는 보지 않구요..
^^
개인적인 생각이었습니다.
암튼, 다른 위키사이트에 접속해서, 개인정보와 데이터를 관리하고 있는 저로서는
(protection과 유지의 편리함 등 때문에..)
이 테더쪽에서 위키의 기능을 좀 통폐합 해 준다면...
정말 편하고, 많은 유저를 끌어모을 수 있지 않을까 합니다.
PS:
습관적으로 글을 올리면, 글을 길게 적는 면이 있습니다.
에구궁, 너무 읽기 불편하게 하는건 아닌가 모르겠네요...
htna (2006-08-06 01:08:39)에 의해 마지막으로 수정
Yesterday is history, tomorrow is a mystery, and today is a gift; that's why we call it - present