주제별 포럼 - 위키
이번 문서에서는 http://spring.zeroboard.com/prj_wiki/570428 에서 도출된 기본 기능을 바탕으로 각 기능별 상세내용을 정의합니다. 위키의 가장 큰 특징 중 하나인 '버젼컨트롤'이 이번 문서의 이슈인데, 여러가지 기술적으로 고려해야할 사항이 많네요..
언제나 그렇듯, 모든 부분에서 의견을 환영합니다. 놀아주실분도 환영합니다.
버젼 컨트롤 기능의 상세
버젼 컨트롤 - 문서의 수정이력을 별도로 보관하고 문서의 내용을 이전의 버젼으로 Rollback(돌아가기)할 수 있는 기능.
1. 버젼 히스토리의 생성
1.1. 버젼은 어떻게 나누는가?
- 문서의 총 용량(byte)를 기준으로 하거나 md5 해쉬를 통해 변경을 확인
- md5 해쉬를 (16bit만 해도 충분?) 이용하여 해쉬값이 바뀌면 문서의 내용이 변경된것으로 판단하고 새로운 버젼으로 정의
- 해쉬를 사용한다면 해쉬생성에 소요되는 시간이 전체 실행시간에 얼마만큼의 영향을 끼치는지 확인해 볼 필요가 있을듯
- 해쉬를 사용하여 문서의 변경을 확인한다면 버젼컨트롤을 주제하는 테이블에 md5해쉬값 또한 보관하고 있어야 한다.
1.2. 최신문서를 DB에 저장
- DB에 저장해 두면 ZBXE의 내부 검색을 통한 검색이 가능하다.
1.3. 기존의 문서는 별도의 파일로 저장하고 보관
- 기존버젼의 문서는 검색의 필요가 없기 때문에 별도의 파일을 만들어서 DB의 오버헤드를 줄인다.
- version 관리 정책 초안 : zero님의 제안
작성된 페이지는 고유 퍼머링크를 가지고 document module, 즉 게시물과 같은 구조로 데이터를 입력한다.
: update가 발생하게 되면 수정 전 글을 따로 정한 format의 문서로 저장하고 db update를 한다.
이럴 경우 최신 페이지들을 대상으로 검색등이 가능하다.
./files/wiki/모듈명/.../고유번호.글버전.txt 등으로 규칙을 정해서 저장하면 될듯 합니다.
1.3.1. 이전버젼 문서를 저장할 때 파일의 형식에 대한 고민
- 문서의 raw를 저장하는것이 line by line의 diff를 구현하는데 도움이 될 것으로 보인다.
- 어차피 raw문서의 용량이 1MB를 넘는 경우는 발생하지 않을것으로 보이기 때문에 해쉬를 통한 변경의 확인이 시스템 퍼포먼스에 큰 영향을 끼치지는 않을듯?
1.3.2. 보관시 오래된 히스토리를 gz로 보관하는것은 어떨지?
- 베니님의 제안
2) 버전 관리
제로님 의견과 비슷합니다. doku처럼 오래된 히스토리를 아예 gz로 묶어서 저장하는 방식이라면 좋을것 같고 '히스토리' 내용에 대한 저장이 아주 중요하지는 않은 사용처도 있으므로 오래된 어카이브를 어떻게 관리할지 관리해주는 모듈이 있어주면 편할 것 같습니다.
- 오래된 문서버젼의 보관기준에 대한 고민이 필요, 혹은 이것을 옵션으로 두어 관리자가 선택하도록 하는 방법은 어떨지?
2. 버젼 히스토리의 열람
2.1. 위키모듈로 생성된 페이지에 'Version info(수정이력)'버튼 표시
- 혹은 문서의 하단(혹은 별도의 레이어)에 more/less 형태로 뿌려주는것도 좋을듯
2.2. Version info는 버젼을 최근버젼이 위로 올라오도록(내림차순) 리스팅
- 리스트에 표시될 내용 : 버젼 넘버 / 변경내용(작성자의 코멘트) / 작성자 / 수정일자
2.3 문서의 각 버젼별 변경된 내용을 비교할 수 있는 기능.
(ex: r1.0과 r1.5의 diff 표시 - 새로 추가된 내용, 변경된 내용과 삭제된 내용에 밑줄을 긋거나 배경색을 바꾸어 표시)
2.4. Rollback
- 이전문서로 돌아갈 수 있는 기능 관리권한자가 리스트에서 해당 버젼 옆에 표시되어 있는 Rollback을 클릭하면 (confirm메시지를 표시한 후) 이후버젼을 무시하고 이전버젼으로 Rollback
2.5. History Purge
버젼 히스토리를 비우는 기능. 버젼히스토리에 큰 의미가 없는 경우 이것을 Purge하여 리소스를 절약할 수 있다. History의 전체를 Purge 하거나 선택한 버젼, 혹은 개별로 Purge할 수 있다면 어떨지? -> 오래된 항목을 gz로 저장한다면 일부 버젼만을 삭제하기가 복잡해질듯?
- Purge의 경우 전체 히스토리를 삭제 (물론 관리권한자에게만 허용)
- 히스토리 리스트에서 관리권한이 있는 사용자는 문서 버젼별로 삭제 가능
버젼컨트롤에 대해서는 조금 더 고민을 해 봐야겠습니다. 조금 더 고민을 해서 정리를 깔끔하게 해야겠네요.. ^^;;;

지금, 언제나 사진에 목마른, 부족한 자신에 좌절하며 도전하는 쌈마이.
길스튜디오 실장 (http://gilstudio.co.kr)
핫셀클럽 운영자 (http://hasselclub.net)
아직 몇가지 미진한 부분들이 보이고 있습니다. 위키가 그 자체로 재미있는건 여러가지 WIKISEED들을 기본적으로 지원하고 있기 때문이기도 하고 InterWiki(아직 이해가 덜 되어서 공부중입니다..;;;) 라든지 공동저작을 도와주는 몇가지 기능이라든지 에 대한 고민을 좀 더 해야할듯 싶습니다. 게다가, 많은 사람들이 극찬하고 있는 스프링노트의 기능을 차용할 수 있지 않을까 하는 고민도 해 둘 필요가 있을듯 싶구요.. 매일 하나씩 이슈문서를 만들고 고민을 진행해야지.. 하고 결심은 했지만 슬슬 어려운 고민에 들어서니까 쉽지 않네요.. ^^;;
물론 플로우챠트나 세부 행동 절차에 대한 명세또한 할 수 있는 만큼 진행하려구요.. 다른 다이어그램을 쓸지도 모르겠고.. 명세에선 슈도코드를 쓸지도 모르겠지만 어느정도로 자세히 명시해야할지 난감한 점도 있어서리..^^;;; 너무 러프하게 만들면 안만드니만 못하구요..;;;; 일단은 계획만 잔뜩 세우고 있습니다.. (.................어이)
아무튼 꾸준히 진행해 나가겠습니다. ^_^




정리해주신 기획안을 바탕으로 flow chart등으로 세부 행동 절차를 정리하면 개발하기도 쉽고 허점도 생기지 않을 것 같습니다. ^^
위키 기획안 완료되기 전에 얼른 다른 문제점이나 기능 추가들 끝내놔야 겠네요.