본문으로 건너뛰기

Cocoa/위키 봇을 처음 만드는 사람들을 위한 가이드(r1판 Blame)

r1
r1
1이 문서를 읽으시는 여러분, 환영합니다. 저는 [[리브레 위키]]에서 [[https://librewiki.net/wiki/사용자:코코아봇|코코아봇]]을, 나무위키에서 [[https://namu.wiki/w/사용자:RearAlice|RearAlice]] 봇을 운용하고 있습니다. 이 외 위키에서도 봇을 운용하고 있습니다. 여러 위키에서, 여러 위키 엔진에서 봇을 운용하며 겪은 시행 착오와 팁을 이 문서에 남깁니다.
2
3사실 "위키 봇을 처음 만드는 사람들을 위한 가이드"라는 제목이지만 전반적으로 유의미한 내용일겁니다.
4
5이 문서의 완성은 존재하지 않습니다. 계속해서 업데이트할 생각입니다. 적어도 이 문구가 지워지기 전까진 업데이트를 할 생각입니다.
6
7== 개요 ==
8이 문서는, 봇을 만드는 방법 등 기술적인 측면보다는 유의해야 할 점과 같은 내용을 중점으로 다룹니다.
9
10== 봇에 오류는 존재합니다 ==
11어떤 프로그램도 오류가 없을 수는 없습니다. 단순히 "Hello, World!"만 출력하다고 하더라도 극단적인 상황에서는 오류가 발생할 수 있습니다.
12
13중요한건, 오류가 발생할 수 있음을 인정하고 오류 발생 시에 대처할 방법을 만드는 것입니다.
14
15=== 서버는 터집니다 ===
16나무위키 서버는 상당히 안정적입니다. 위키백과 서버도 안정적인 편입니다. 그래서 주로 하는 실수가, 네트워크를 다루는 부분에 예외 처리를 하지 않는다는 것입니다. 만들 때도, 평소에 운용할 때도 문제가 생기지 않습니다. 잊고 지나갑니다. 그러다가 서버에 장애가 발생하거나, 순간적인 오류로 비정상적인 응답이 돌아왔을 때 이러한 예외 처리가 정상적으로 이루어지지 않았다면 봇은 예기치 않은 동작을 할 수 있습니다.
17
18예외 처리는 중요합니다. 통신이 일어나는 모든 부분을 예외 처리해야힙니다. 그렇다고 모든 곳에 try-catch를 넣을 수는 없으니, 외부 통신을 처리하는 함수를 만들어 함수 내에서 예외 처리를 하는 방법도 고려해볼 수 있습니다.
19
20=== 오편집은 일어납니다 ===
21잘못된 명령을 내렸던, 로직을 잘못 작성했던 결국 언젠간 오류가 발생합니다. 그렇다면 이를 해결할 수도 있어야 합니다. 그렇다고 봇을 쫓아다니면서 되돌리거나 일괄 되돌리기를 사용하는 것도 쉽지만은 않습니다.
22
23==== 테스트를 하세요 ====
24당연한 말입니다. 하지만 복잡하거나 범위가 넓은 작업을 처리한다면 예시를 몇개 만들어 테스트를 진행해보는 것이 좋습니다.
25
26너무 늦게 알면 고생하는건 운용하는 사람이니까, 작동하기 전에 꼭 테스트를 해봅시다. 잘못 동작해도 덜 후회합니다.
27
28==== 틀린 문법을 찾으세요 ====
29the seed 엔진은 특히나 더 그렇습니다만, 나무마크 자체가 휴먼 에러를 적절히 처리해주는 특징이 있습니다. {{{[include(틀:틀 이름, 인자1=값1)]}}}을 {{{[include( 틀: 틀 이름 , 인자1 = 값1)]}}}처럼 적어도 동작합니다. 적당히 정규식으로 봇을 만든다면, 이러한 경우에 편집이 잘 되지 않을 수 있습니다.
30
31틀린 문법을 잔뜩 찾으세요. 틀린 문법으로 테스트를 해보세요. 이러한 "틀린 문법"까지 대응할 수 있어야 장기적으로 편해집니다.
32
33==== 편집을 기록하세요 ====
34일시적으로 편집 전후의 본문을 저장해두는 것이 도움이 될 수 있습니다. 후술할 사후 검증 프로세스 개발에도 필요합니다. 물론 이를 저장하는 시스템 구축과 용량 사용 등은 다소 부담될 수 있으나, 어떠한 문제가 발생했을 때 검증하고 해결할 수 있는 가장 쉬운 방법의 토대를 만들어줍니다.
35
36==== 검증할 방법을 만드세요 ====
37봇 동작에 오류가 발생했을 때, 차라리 모든 편집이 오류였다면 쉬울 수도 있겠지만 보통은 그렇지 않습니다. 일부에만 문제가 발생합니다. 그럴 때는 봇을 수정해서 문제를 해결하더라도 이미 일어난 편집에 대응해야 합니다.
38
39앞에서 기록한 정보를 이용하면 이를 좀 더 쉽게 해결할 수 있습니다. 기록했던 원본을 새 로직으로 처리한 뒤 결과 값을 기록한 결과 값과 비교하여 다르다면 검토하고, 다르지 않다면 문제가 없는 것으로 간주할 수 있습니다.
40
41==== 긴급 중단 시스템을 최대한 안전하게 지키세요 ====
42만약 병렬 처리로 긴급 중단 시스템을 처리하여 편집과 별개로 동작한다면, 반드시 긴급 중단 시스템에 오류가 발생했을 때도 중단하도록 하거나, 시스템에 오류가 발생해도 다시 처리할 수 있어야 합니다.
43
44사용자 토론에 새 글이 올라왔을 때 긴급 중단하는 것이 많은 위키 봇들의 동작입니다. 만약 어떠한 오류로 인해서 이 시스템이 중단됐는데, 편집은 그대로 동작하고, 이 편집에 문제가 발생한다면 피해는 점점 커질 것이고 이를 지켜보는 다른 기여자들에게 좋은 인상을 남기진 못할 것입니다.
45
46발전소에서 중요한건 뭘까요? 전기를 잘 만드는 것도 중요하지만 긴급한 상황에 잘 멈추는 것이 가장 중요합니다. 자동차에서 중요한건 뭘까요? 잘 주행하는 것도 중요하지만 긴급한 상황에 잘 멈추는 것이 가장 중요합니다. 봇의 긴급 중단 시스템은 핵심입니다.
47
48