- 책_곽용재님 홈페이지
- 책_노란북 - 책 가격비교
- 책_김재우-SICP번역
- 플밍_쏘쓰포지
- 플밍_CodingHorror ?
- 플밍_상킴
- 플밍_김민장님
- GPGStudy
- 플밍_jz
- 플밍_샤방샤방님
- 플밍_글쓰는프로그래머2
- 플밍_키보드후킹
- 사람_재혁
- 사람_kernel0
- 사람_경석형
- 사람_kikiwaka
- 사람_Junios
- 사람_harry
- 사람_어떤 개발자의 금서목록..
- 사람_모기소리
- 사람_웅섭형
- 사람_민식형
- 도스박스 다음카페
- 플레이웨어즈 - 게임하드웨어벤치마크
- David harvey의 Reading Marx's c…
- 한겨레_임경선의 이기적인 상담실
- 본격2차대전만화 - 굽시니스트
- 영화_정성일 아카이브
- 영화_영화속이데올로기파악하기
- 음식_생선회
- 죽력고
- 사람_한밀
- 플밍_수까락
- 게임제작
- 공룡_박진영박사님
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
- 강유원
- 삼국지6
- 일리아스
- 고전강의
- 건강
- 인문학
- modernc++
- BSP
- 진중권
- 진삼국무쌍5
- 김두식
- 유시민
- c++
- programming challenges
- 영화
- 정성일
- 삼국지
- 게임
- 유머
- 소비자고발
- 정신분석
- 프로그래밍
- stl
- Programming
- 단상
- 태그가 아깝다
- template
- 노무현
- 책
- 고등학교 사회공부
- Today
- Total
lancelot.com
MoinMoin Wiki to Doku Wiki Migration 후기 feat. Gemini & ChatGPT 본문
3개월 전 쯤에 진행하였던 MoinMoin wiki to Doku wiki migration 작업 결과 많은 생각이 들었는데, 잊어버리기전에 기록해보기로 하자.
오래된 MoinMoin Wiki가 설치되어 사용하던 머신을, 다른 머신으로 옮기는 김에 Wiki를 변경하기로 하였다.
검토 결과, 가볍고 스틱 버전이라는 것이 있어서 별다른 설치 없이도 파일 복사만으로 사용 가능한 장점이 있는 doku wiki를 써보기로 했다. (moin to dokuwiki converter 도 존재하고)
일단 Gemini에게 migration을 어떻게 하면 좋냐고 하는 물음을 하니 적당하게 계획도 세워주고, moin to dokuwiki 마이그레이션 python이 어디있는지도 알려주고, 사용법도 알려주었다.
converter 의 설명을 좀 읽어보니, MoinMoin의 parser를 복사해와서 와서 그걸 가지고 MoinMoin의 기존데이터를 읽어서, DokuWiki 의 formatter 를 붙인후, MoinMoin의 data를 convert 시키면, MoinMoin의 page들을 dokuwiki의 format에 맞게 변환해주는 툴이었다. MoinMoin의 구조가 잘되어있어서, formatter만 갈아끼우면, 다른 형식으로 할 수 있게 되어있어서 가능한 것이었다.
MoinMoin의 parser에서는, 이게 headline인지, link인지, macro인지 등등으로 Moinmoin wiki의 문법에 맞게 구분으로 하면, 그걸 formatter는 dokuwiki의 headline, link, macro 등에 맞게 format을 변경해주는 식이었다.
처음에는 parser, formatter의 구조를 살필 겨를도 없이 일단 돌아가게 만드는게 우선이었다.
MoinMoin이 10년도 넘은 것이었던데다, 20 여년전에 설치한 버전을 10년전에 한 번 버전업을 해 둔 것이었는데, 그것마저 완벽하지 않아, 곳곳에 문법이 잘못된 페이지들이 존재하고 있었다.
게다가 오래된 wiki의 parser 를 가지고 와서 돌리자, python library들이 문제를 일으키기 시작했다.
애초에 library 버전이 예전 것이라, 업데이트만 하면 되는 것은 문제가 크게 안되는 것이고, 오래된 라이브러리 A가 나중에 B와 C라이브러리로 나뉘었는데, A라이브러리를 B 와 C로 변경해서 교체를 하게되면, C라이브러리에서는 함수의 사용법이 변경되어서, 코드를 다 수정해야하고... 하는 상황들이 몇 번 벌어졌다.
DLL hell 못지않은 python의 import hell 이었다.
다행히도 python의 이런 경험은 처음이었지만, Gemini의 도움으로 잘 해결할 수 있었다. 애초에 Gemini가 없었다면 엄두도 내기 힘들었던 상황이었다. 무엇이 문제인지 분석하고 답을 찾아 헤매는 데만 엄청난 시간을 썼을텐데, Gemini는 에러메세지만 넣으면, 문제의 원인과 해결책을 던져주었다. 코딩 문제가 아니고, 이런 설정 문제는 정말 쉽게 해결하게 만들어주는 듯하다. 설령 해결책이 잘못된 것이라하더라도, 문제의 원인을 파악하는 시간이 줄어든 것만으로 엄청난 시간 절약이 되는 일이었다.
며칠을 씨름한 끝에 빌드를 성공하니 본격적으로 page들을 convert 하는 단계로 접어들어갔다. 이제는 Gemini가 잘못된 해결책을 내놓는 일이 잦아졌다. MoinMoin이 parser 파일 하나가 python으로 1700 line을 훌쩍 넘어가고 있었고. dokuwiki formatter 도 800line을 넘었기때문에, Gemini의 한계인 1500라인 정도를 넘어서기 때문인 것 같았다. 이것은 ChatGPT 역시 마찬가지였다. 그래도 꾸역꾸역 Pycharm 의 도움을 받으며 하나하나 디버깅하면서 코드의 오류를 잡아내고, 원래 page를 우리의 상황에 맞게 formatting 하도록 코드를 수정하면서 진행했다.
애초에 MoinMoin의 문법도 완벽하게 알지 못하는데, 이 MoinMoin의 버전이 2가지였고, DokuWiki는 문법 자체를 알지못하니, 하나하나 배워가며 할 수 밖에 없었다. 그래도 그 덕분에 문법을 잘 알게 되어, Dokuwiki를 설치하자마자 잘 쓸 수 있게 되었다.ㅋㅋ
페이지가 3000개가 넘었기때문에, 처음에는 페이지 한개를 converting 해보고, 오류가 없으면 다음 페이지를 하고, 또 오류를 수정하고, 하는 작업을 반복하다가, 오류가 없이 몇 개가 반복되자, 자동화해서, 폴더에있는 page들을 모두 converting하게 만들고, 살펴보고 오류를 수정하고, 나중에는 퇴근하기전에 convert를 돌려놓고, 심각한 오류가 아니면 멈추지 않고 넘어가게 만들고, 다음날와서 오류를 한꺼번에 수정하고 하는 식으로 작업하게되었다.
3000개가 넘는 페이지들 돌려서 converting을 거의 다 끝내고 완성하고 끝무렵이 되자, 이제서야 내가 앞에 말한 parser와 formatter의 구조가 눈에 들어오기 시작했다. 그리고 초반에 코드와 개념을 이해하지 못한 상태에서 짰던 code들이 완전히 잘못되어있다는 것이 보이기 시작했다. (원하는 결과가 나오기는 하지만, 거기에 있을 코드가 아니고 다른 곳에 있어야 하는 코드들... -_-; )
아, 그냥 이렇게만 했어도 되었던 것을. 이럴땐 여기를 수정하는게 아니라, 다른 곳을 수정하는게 맞는 것이었는데. 이런 부분들이 눈에 확 들어오기 시작했다. 여지껏 했던 부분이 전부 잘못된 방향으로 진행되어있었다고 판단한 상황도 생겼다.
아, 그런데 거기서 무언가 하나의 깨달음이 생겼다.
이 코드는 어차피 한 번 page를 migration하면 필요없어질 코드였다. 누군가를 위해 web에 올릴 필요도 없는 코드였다. 그렇다면, 이 코드의 구조가 잘못되었든, 아니든 결과물만 나오면 되는 것이었다. 지금 기능추가를 위해, 수많은 코드를 리팩토링할 필요없이, 이거 하나만 더 덕지덕지 붙이는게, 시간상 이득이었다.
거기까지 생각이 미치자, 내가 하는 습관들이, 대부분, 지속가능한 개발을 위한 것에 초점이 맞춰져있다는 사실이 새삼 떠올랐다. 그리고 예전에 Package game 을 개발한다는 것은 약간 이런 면이 있을까... 하는 생각을 해보게 되었다.
예전엔 패키지게임이, 인터넷이 있던 것도 아니고, 패치를 만들긴 했었겠지만, 발매하고나면 다시 그 코드를 볼일이 없는 그런 상황..그런 상황에서는, 시간에 맞추는 것이, 코드의 구조나 품질보다 훨씬 더 중요한 순간이 올 때가 있었겠다, 라는 생각도 들었다.
그렇다면 그때 넣은 코드는, 과연 나의 성장에 얼마나 도움이 되었겠는가, 하는 생각도 들고....
프로그래밍이란 무엇인가, 단지 제품을 만들어내기 위한 도구에 불과한가... 하는 생각도 들고...
많은 생각들이 드는 경험이었다.
모든 걸 다 끝낼 때까지, 한 달 정도 걸렸고, 초반에는 생전 처음 해보는 일이라 스트레스도 많이 받았지만, 나중에 코드 구조가 다 보이자, 아쉽다는 생각이 들었다. 이 구조가 초반에 조금 더 빨리 익숙해졌더라면, 좀 더 편하고 쉽게 작업했을텐데.
그리고, 이제 뭔가 전문가(?)가 된 기분이 들어, 이 지식과 경험이 머리속에서 사라지기전에 어디 또 moinmoin 을 dokuwiki로 마이그레이션 할 곳이 있으면 해주고싶었지만, 그런 곳은 아무데도 없겠지.....ㅋㅋㅋㅋ
쓸모 없는 전문성이었다.
여튼 망한 MoinMoin보다 dokuwiki로 갈아타고 나니, plugin도 있고, 훨씬 나은 환경에서 wiki를 사용할 수 있게되어 보람찬 일이었다.