도대체 뭔 소리인지 모르겠네요. 아는 분이 읽고 좀 판단해주셨으면. (그냥 느낀건 통진당 당권파나 아니나 다 무능하구나.)


내용이 길기 때문에 스킵하고 싶으신 분들은 5,6번과 10번부터 읽으셔도 됩니다.
 
0. 지난주 수요일.(6월 27일)
여기저기에서 전화가 옵니다. 투표가 뻑났다고 합니다.
"뭐야? ㅆㅍ. 또 사고났대?" "생전 연락한번 없다가 꼭 사고날때만 연락하는구만!" "내가 무슨 사고수습반이냐? 내가 뭘 어쩌라고?"
그래서 한달에 한두번 들어올까 말까한 당사이트에 들어와서 게시물들 보면서 일단 무슨현상인지 파악하고 있었습니다.
프로그램 오류가 나면 오류나는 현상을 보고 원인이 뭘까를 유추하는 게 일종의 직업병같은 것이랄까요..
 
1. 모 선본에서 온 요청.
그러던 중 알지못하는 번호로부터 한통의 전화를 받았습니다. 
"xxx선본인데요..."로 시작하는 통화에서 다른 사람들이 소개해서 전화줬다는 이야기며 오후4시에 전문가회의가 있으니 참석좀 해달라고 합니다.
오후4시에는 못가고 당사에 가면 7시30분쯤 될거라고 했습니다. 제가 있는 곳이 일산이거든요. 
그런 이유를 설명하고 다른 사람을 부르시라고 했는데, 다른 사람이 없다고 늦게라도 와달라고 합니다.
그래서 알았다고 했습니다.
 
2. 회상.
2004년 사고가 오버랩되면서 별별 생각들이 다 납니다. 이게 뭔 쪽이냐... ㅆㅍ.. 
어디 쬐끄만 구멍가게 운영하는 것도 아니고 10명넘는 국회의원이 있는 정당이 2004년에 사고난 것도 모자라 또 이 ㅈㄹ이냐.
화도 나고, 어이없기도 합니다.
 
3. 사전정보.
일단 회의에 참가하기로 했으니 사전정보가 좀 필요합니다.
처음에는 트래픽과다가 원인일 것으로 생각하고 당홈피에 올라오는 현상들을 살펴봤습니다.
예상과 달리 대체로 가장 많은 경우가 투표가 진행중에 다시 이전 투표로 돌아가버리는 롤백(이미 수행한 작업을 원점으로 되돌리는 것을 롤백이라고 합니다.)현상이 가장 많았습니다.
 
그리고 어떤 프로그램인지도 살펴보려고 프로그램 제공업체 홈페이지에 들어가 봤습니다.
제가 하는 일이 이러저러한 홈페이지들을 많이 보다 보니 홈페이지만 봐도 대충 평가가 되곤 하는데요...
업체에 대한 평가는 하지 않겠습니다.
다만 한가지만 이야기하자면, 어느정도 공신력도 있고 마인드도 있는 회사일 줄 알았는데 적잖이 실망스러웠습니다. 특히 투표프로그램을 운용하는 곳이면 개인정보에 대해 민감할테인데도 일단 홈페이지가 개인정보에 대해 전혀 신경쓰지 않는 홈페이지여서 당혹스러움을 느꼈습니다.
 
4. 수요일 회의 참가.
7시 10분쯤에 당사에 도착해서 들어가니 이미 몇몇선본에서 전문가위원들을 불러다가 회의를 하고 있었습니다.
늦게 와서 지금까지 봤던거 다시 보자고 할 수도 없으니 다른 사람들 이야기 조용히 듣고 있다가 끝날 즈음에 DB스키마만 좀 보여달라고 했습니다.
제가 DB스키마를 본 이유는 딱 하나입니다. 
순전히 개인적인 판단기준이지만 제가 php개발자의 수준을 가늠할 때 기준점 중의 하나가 클래스와 인덱싱에 대해 얼마나 이해를 하고 있는가 입니다.
어쨌든 개인적인 판단기준일뿐이니 이 부분에 대해서도 별도로 언급하지는 않겠습니다.
이날 확인된 것은 "이유를 알수는 없으나 DB파일이 두개 삭제되었다"는 "사실"만 확인하고 돌아갔습니다.
이때는 해당 테이블이 무슨 역할을 하는 테이블인지도 모른 상태니 당연히 롤백현상의 원인도 거기에서 비롯된 것이라고 생각했습니다.
 
5. 파일삭제 해프닝.
그런데 아무리 생각해도 이해가 안됩니다. DB파일이 이유없이 사라져? 아무도 들어갈 수 없는 서버인데? 웹서버로 구동하는 것 이외에 별 다른 프로그램이 설치되어 있는 것도 아닌데?
지금껏 운영중인 서버들을 수백개 봐왔지만 여지껏 단 한번도 듣도 보도 못한 현상입니다. 이거 kldp(리눅스한글문서프로젝트)에 리포팅해야 되나? 하는 생각을 했습니다.
계속 고민했습니다. 이유가 도대체 뭘까? 별별 가능성을 다 생각해 봤지만 답이 안나옵니다.
게다가 해당 파일이 없다면 애초에 투표자체가 진행이 안되었어야 되는데 웹을 다운시키기 전까지 투표가 진행은 되었다고 들었으니 미치고 답답할 노릇입니다.
결론적으로 파일이 사라지거나 한 것은 아니었고 업체쪽에서 초기 설정할때 실수한 부분이 있었고 그로인해 오판을 하게 되었다는 점에 대해 수차례 사과를 했습니다.
 
6. 바보.
다만 수요일부터 토요일날 전문가 회의를 하면서 눈으로 확인하기 전까지의 과정이 제가 참 한심하게 느껴졌습니다.
왜 InnoDB일 가능성을 생각하지 않았을까? 
왜 추호도 의심을 하지 않았을까? 
데이타파일이 세개중 한개만 있다면 당연히 제일 먼저 의심해 보았어야 되는 부분인데 나는 왜 그 의심을 전혀 하지 않았을까?
네... 그렇습니다. 너무 기본적인 것이라 처음부터 아예 의심을 하지 않았던 것입니다.
 
이 상황을 예를 들어 이야기해보면...
제가 일산에서 서울가려고 버스를 탔습니다.
그런데 한 사람이 교통카드를 찍는데 안찍힙니다. 버스 운전사는 가면서 찍으라고 하고 버스를 출발 시킵니다. 그런데 그 사람이 아무리 지갑과 가방을 뒤져봐도 교통카드가 없는 겁니다. 저도 그 사람 가방속에 떨어져 있나 같이 찾아봅니다. 그런데 없습니다.
어라? 교통카드가 왜 없지? 
그 사람이 교통카드가 없어졌다고 하소연 합니다. 기억을 더듬어 보니 버스에 타기전에 누군가 자기 지갑에 손을 대는 느낌이 있었다고 합니다. 
분명히 있었는데 도난당한 것 같다고 울먹입니다. 지갑은 있지만 카드만 없어졌답니다. 귀신이 곡할 노릇입니다.
그런데 사실은 그 사람이 교통카드를 발급받은 적도 없는 사람인데 자기가 교통카드가 있다고 착각하고 있던 겁니다.
딱 이런 상황인 겁니다.
어이없게도....
 
7. 토요일,일요일 회의 참가.
제가 원래 지난 주말 이틀동안 아는 사람들과 강릉엘 가서 마라톤대회를 뛰기로 되어 있었습니다. 회비도 다 내고 교통편도 다 짜놓고 오랫만에 바다바람 쐬러가니 신나서 들떠있다가 이번 주말을 완전히 날려버렸습니다. (이줄은 그냥 하소연입니다.. 에휴.. 이 때문에 그냥 날려버린 돈도 돈이지만... 근 2년만에 처음 가는 바다인데...)
어쨌든 토요일 오전 10시에 회의를 시작해서 오후 5시경까지 진행했습니다.
방식은 8개 선본에서 추천받아 구성된 전문가8명이 모여서 함께 이야기해서 확인해야 되는 것으로 서로 합의가 된 것에 대해서 함께 확인했습니다. 
이 과정에서 접속로그, 작업히스토리, 백업화일(테이블 스키마), DB파일 구조 등을 확인했습니다.
그러면서 다른 접속이나 의심되는 작업이 있었는지 여부와 오류의 원인을 파악하기 위한 지난한 확인작업을 했습니다.
(제 성격에서는 오류에 대해서 "차라리 나에게 해결하라고 맡겨주면 한두시간만에 문제를 해결하고 리포팅이 가능할 것 같은데..." 하는 생각만 수차례 했습니다. 실제 당일날 저에게 "우리는 오류를 확인만 하는 거고 디버깅(오류를 수정하는 작업)은 업체 몫인데 왜 직접 디버깅을 하려고 하느냐?" 하는 타박도 받았습니다.)
어쨌든 이 과정에서 생각했던 것보다 더 많은 것들을 확인 할 수 있었습니다. 회의가 끝난 후 문서로 정리된 내용은 모든 사람들이 합의된 내용이고 문서에 명시되지 않은 것들도 많습니다.
 
일요일은 오전 10시에 회의를 시작해서 밤 9시경까지 진행했습니다.
전날 확인된 사항(파일삭제가 아니라는 것)에 대해 우일소프트의 소명을 듣고난 후 우일소프트와 엑스인터넷 두개 회사 투표 프로그램에 대한 적합성 검증을 했으며, 전날 확인하지 못했던 사항에 대해 일부 확인과정을 거친 후 8명이 결론을 내리기 위해 토론을 계속 했습니다.
 
9. 회의참가에 임하는 마음자세.
이틀동안 회의의 명칭은 분명히 "기술전문가 회의"입니다. 그리고 선관위의 주문이 "정치적판단을 배제하고 기술적판단만 해달라"였습니다.
"정치적판단을 배제하고" 진행해야 되는 회의에 참가하는 저의 마음자세는 대단히 애매했습니다.
참고로 저의 정파적 견해를 밝히자면 민주노동당 중앙당에서 수년간 일을 했었음에도 불구하고 정파가 없는 무정파입니다. 한때 저와 비슷한 무정파들이 모여서 "우리처럼 보호해줄 조직도 없는 사람들은 짤리지 않기 위해 무조건 지도부에 충성해야 된다. 그래서 우리는 왕당파다"라고 우스개소리를 하곤 했습니다. 
우스개 소리로 하곤 했지만 이게 맞지 않나요? 어쨌든 지도부를 선출해서 뽑았으면 죽이 되든 밥이 되든 지도부가 잘 하도록 일단 밀어주고 그 결과가 잘못되면 그건 그때가서 그에 대해 평가하고 비판해야지 애초에 하지도 못하게 딴지거는 것은 맞지 않다는 생각을 하고 있습니다.
 
그러다보니 과거 당직을 맡고 있을때는 당내에서 무슨 일이라도 있을라치면 이쪽저쪽 눈치보면서 판단하곤 했습니다.
지금은 당활동을 완전히 접고 생업에 종사하는 입장에서 총선이후 발생한 울화통이 터지는 상황을 혼자 뉴스기사를 보면서 판단하곤 했습니다.
저와 페북이 맺어진 분들은 알겠지만 저는 "경기동부 해체하라"는 글을 올리기도 했고, 김재연에 대해서는 유보하더라도 이석기는 사퇴가 답이라는 생각을 하고 있습니다. 역시 전통적인 왕당파답게 혁신비대위의 입장에 훨씬 가깝게 서 있네요. 
제가 이런 판단을 하고 있는 이유는 엔지니어답게 대단히 단순합니다. 이미 정치적으로 밀릴대로 밀리고 궁지에 몰려있는 상황이며 아무리 억울하다고 하소연해도 되돌리기 어려운 상황이 되어 버렸다는 데에 있습니다.
제가 이런 입장을 먼저 밝히는 이유는 설령 이쪽 저쪽 양쪽에서 다 욕을 듣더라도 할 이야기는 해야 속이 좀 풀리겠다는 답답함이 있기 때문이며, 이글로 인해 혹시라도 제가 "경기동부"로 낙인찍히고 싶지는 않기 때문입니다. 낙인찍으려거든 차라리 이쪽에 붙었다 저쪽에 붙는 기회주의자로 낙인찍지 제가 해체하라고 주장하는 "경기동부"로 낙인찍히고 싶지는 않기 때문입니다.
그리고 정말 순수하게 엔지니어의 관점에서 서술하는 것임을 믿어달라는 하소연입니다.
 
또 한가지 참고로 하자면, 전문가회의를 하는동안 다른 분들은 여기저기 보고도 하시고 또 지침도 받고 그러는 것 같던데 저는 저를 추천한 선본에 보고도 안합니다. 해당 선본이 다른 루트로 들어서 필요없는지는 모르겠지만 그 선본에서는 회의결과가 어떻게 되었느냐고 물어보지도 않더라구요.
토요일날 문자만 하나 오더군요. "어떻게 되고 있습니까?"하길래 "일요일 10시에 검증하기로 했습니다."는 답변만 한번 했습니다.
 
10. 문제 1.
뭐 제가 선관위에 공식적으로 뭔가를 요구할 위치는 아닌 것 같지만, 기술전문가 회의면 기술전문성을 갖춘 사람들만 들어와서 기술적인 판단만 해야 된다고 생각합니다.
최초 선관위의 요구대로 해야지요.
그런데 제가 보기에 최소 1인이상은 전문성이라고는 눈꼽만큼도 없고 DB구조나 프로그램에 대해 전혀 모르는 사람이 있었습니다.
그런 사람이 기술전문가 회의에 함께 할 것이라면 뭐하려 선본관계자들은 퇴장시키고 기술전문가 8인만 남겨서 회의를 하게 했습니까?
기술전문가 7인과 1명의 정치인이 모여서 회의를 하게 해놓고 무슨 기술적인 판단만 해달라고 요구를 하십니까?
선관위가 새로 구성되고 정신도 없고 그런 상황에서 제가 선관위를 비판하고자 하는 것이 아닙니다. 
다음 회의때는 최소한 로그와 히스토리를 보면 그게 무슨 뜻인지 알아야 되고, 스키마를 보면 그게 어떻게 구성된 것인지를 알고, 프로그램 소스를 보면 그 소스가 뭘하기 위해 만들어졌는지 정도는 아는 사람들로만 구성이 되었으면 합니다.
 
아니 로그를 다 들여다 봐놓고도 그게 무슨 의미인지 이해를 하지 못하니까 자꾸 딴소리하면서 결정을 내리지 못하게 만드는 거 아닙니까?
콘솔이 살아있었다고 하니까 어쨌든 접속이 있었다고 기록해야 된다고 우기는 데에야 뭐라고 더 이상 할 말이 없습니다. 아마 그분은 지금도 콘솔이 뭔지 모를 가능성도 있습니다.
저는 일요일 회의 막판에 정말 화가 많이 났습니다. 
제가 오늘 수시간을 허비하면서까지 이 글을 쓰게 된 결정적인 이유이기도 합니다.
 
11. 문제 2.
이틀동안 서버를 들여다 보면서 몇가지 위험성을 발견했고, 그중 한가지는 대단히 위험성이 큰 것이고 심각한 의혹을 가질 수 있는 것입니다.
일단 먼저 백업방식부터 이야기합니다.
저는 도대체 어떤 프로그램이 그렇게 무식하게 백업을 하는지 모르겠습니다.
아주 일반적인 백업은 트래픽이 가장 적은 시간대인 새벽에 한번 하고 동일한 서버에 받지 않고 별도의 서버에 받습니다.
지금 하는 투표처럼 오류가 절대 나지 않아야 되는 민감한 프로그램일지라도 매분마다 mysqldump받아서 별도서버도 아닌 동일한 서버에 그렇게 받으면서 서버에 과부하를 일으키도록 최초 설계를 한 이유가 뭔지 모르겠습니다.
한마디로 만에 하나 있을지 모를 사고에 대비하기 위해 사고의 위험성을 크게 증가시키는 행위입니다.
 
예로 들어볼까요? 
지하철 출퇴근시간에 사람들이 너무 많고 붐벼서 소매치기가 있을지도 모릅니다. 
그렇다고 소매치기를 잡기위해 그 붐비고 미어터지는 지하철에 경찰관을 백명씩 들여보냅니까?
 
12. 문제 3.
투표여부를 확인하기 위해서 개인별로 투표시간을 기록하는 파일을 생성하고 있습니다.
그 파일을 왜 주민등록번호로 파일을 생성합니까?
개발사가 개인정보보호법 따위를 읽어는 보셨을까요? 이미 2012년 3월 30일부터 시행되고 있는 법입니다.
그런데 뭐 어려운 명령도 아니고, DB를 들어가서 보는 것도 아니고, 그냥 해당 디렉토리 가서 ls만 치면 주민등록번호가 줄줄이 나오는 시스템이 세상에 어디 있습니까?
누가 저좀 납득좀 시켜주세요.
개인정보보호법은 아무리 제3당이라고 그렇게 쌩까고 무시해도 되는 법이 아닙니다. 
오히려 당원 개개인의 정보들이 얼마나 소중한 가치를 갖고 있고 보호받아야 될 정보들인지 다른 어떤 누구보다 더 잘 알아야 되는 곳이 통합민주당 아닙니까?
 
이것도 예로 들어볼까요?
집에 금덩어리가 있는데, 도둑이 들어서 훔쳐갈 가능성을 완전히 없앨 수는 없습니다. 아무리 보안장치를 하고 열쇠를 수십개 달아도 훔쳐갈 놈은 들어옵니다.
그렇다고 금덩어리를 거실에 들어와서 한번 둘러보기만 하면 보이는 진열장에 떡하니 진열해 놓겠습니까?
최소한 집에 보관할 거면 금고에 넣어두거나 찾기 힘든 곳에 몰래 숨겨놓는 것이 정상아닙니까?
아~ 우리집에 금덩어리 있다고 자랑하려고 거실에 두었을 수도 있겠군요. 
앞으로는 당원들의 주민등록번호들을 전부 출력해서 당사 입구에 붙여두고 방문하는 사람들에게 자랑스럽게 보여주세요.
 
13. 문제 4.
이것은 주말에 발견된 문제는 아닙니다. 하지만 제기하지 않을 수 없습니다.
왜 제 투표권을 제한하십니까?
제가 알고 있는 투표에 대한 권한은 누군가에게 1표를 행사하는 것뿐만 아니라 기권을 할 수도 있고 불참할 수도 있습니다.
기권과 불참의 의미를 잘 알지 않습니까?
1번째 투표부터 8번째 투표까지 한다고 할 때 저는 4번째와 6번째 투표는 하고 싶지 않습니다. 기권이 아니고 아예 투표율을 올리고 싶지 않다는 말입니다.
그런데 왜 불참을 하지 못하게 합니까?
이것은 제가 직접 투표를 시행해보지는 않았으며 소스도 직접 들여다 보지 않고 다른 사람들에게 들었던 것과 지금까지 파악된 프로그램의 알고리즘상 불참이 안된다는 것으로 알고 있습니다. 혹시 불참할 방법이 있어서 알려주신다면 이 항목은 삭제하겠습니다.
 
14. 문제 5.
이제 크리티컬한 것들이 남았습니다.
웹로그를 투표시작전에 왜 끄셨을까 궁금합니다. 당에서는 특별한 이야기가 없었고 선관위원장님과 통화하면서 시스템부하가 우려되어서 껐다고 했는데, 백업은 위에 이야기한 것처럼 졸라 무식하게 시스템 과부하를 일으키게 돌리면서 웹로그를 기록하지 않는다고 했습니다.
이거 상식적으로 납득이 안됩니다.
이건 충분히 의심받을 만한 상황입니다.
 
예로 들어볼까요?
투표 결과 테이블을 백업받은 화일이 그 서버에 있습니다. 그렇다면 제가 프로그램 열줄만 짜서 넣으면 그 화일들 받아갈 수 있습니다. 시간은 10분도 안걸릴 것 같네요.
물론 투표가 진행중인 상태에서도 DB에서 직접 읽어서 보여주는 것도 가능하죠. 듣기로는 선생님들을 위한 기능이 있었다고 하니 실제로 투표현황을 볼 수 있는 화면이 있었던 것 같군요. 그리고 그와 관련된 화일 두개를 삭제해서 해당 기능을 죽였다는 것은 알고 있습니다. 
하지만 그 두개 화일 이외에 다른 화일에 그런 기능을 하는 코드가 있다면요? 만약 그렇다면 언제든 브라우저로 투표현황을 열람할 수 있는 가능성이 있습니다.
문제는 이렇게 해서 선거가 끝난 후 문제제기가 있어도 검증이 불가능하겠네요.
웹로그가 남아있어야 해당 사항을 확인이 가능한데, 왜 웹로그를 죽여버렸을까요? 
당에서 특별한 이야기가 없었다면 일반적인 상식에서는 웹로그를 남기는 것이 당연한데 개발사가 임의로 판단해서 죽여버렸다면 그 의도 자체가 불순한 것이 아니라고 볼 수 있습니까?
 
그냥 개발자로서 상식수준에서 아무리 생각해봐도 이건 도저히 납득이 안됩니다.
이 의혹을 해소하기 위해서는 전체 프로그램 소스에 대한 검증이 필요합니다. 다만 문제는 다음주에 투표를 시작하기 위해서는 소스검증을 할 수 있는 시간이 안됩니다.
이 의혹은 그냥 조용히 가슴속에만 묻어둬야 될까요?
 
15. 문제 6.
위에 이야기한 것처럼 파일이 삭제된 것이라는 개발사의 판단은 일종의 해프닝으로 간주합니다.
왜냐하면 저는 프로그램 오류의 원인은 거기에 있지 않다고 판단을 하기 때문입니다.
제가 이 오류의 원인을 정확히 확인하기 위해서는 프로그램을 뜯어봐야 확인이 가능하다고 판단하고 있습니다. 그런데 개발사 이사님께서는 프로그램쪽 문제는 절대없다고 단정을 하시더군요. 제가 개발사에서 이 오류를 잡아내지 못할거라고 불신하는 가장 큰 이유중의 하나이기도 합니다.
오류의 원인이 명확해져야 디버깅이 되는데, 오류의 원인조차 불분명한 상태에서 또 다시 개발사의 이야기만을 믿고 동시당직선거로 필드테스트를 하게 하지는 말아주세요.
다음 회의때까지 DB구조만 바꿔서 오시는 것은 아닐지 우려스럽습니다. 설마 그러지는 않으시겠죠?
 
16. 또 뭐가 있었더라...
제가 이런 글을 쓸 줄 미리 알았다면 세세하게 좀 적어둘걸 그랬습니다.
일단 이틀간 서버를 들여다보고 기억나는 것들만 이야기했고요. 이 외에도 자질구레한 문제들이 더 있을지도 모르겠습니다.
기억이 떠오른다면 추가하겠습니다.
 
ps. 이 글을 올리면서도 참 조심스럽습니다. 이 글을 쓰는 동안에도 올려야 되나 말아야 되나 수십번 고민중입니다.
그리고 새로 임명되서 이제 막 일을 시작하시는 선관위원장님을 더 힘겹게 하는 것은 아닐지도 우려되고요...
만에 하나라도 이글로 인해 다음주 선거일정에 차질이 생기게 되는 것은 아닐까 하는 두려움도 있고요...
이런 내용들을 기술전문가 회의에서 충분히 확인가능한 문제라고 생각할 수도 있습니다.
그러나 지난 주말 기술전문가 회의를 경험한 바에 의하면, 전문인들 사이에 끼어있던 정치인 때문에 의혹들에 대해 충분한 해소가 될 가능성이 없다고 생각하기 때문에 이곳에 게시글을 남깁니다.
 
ps. 만약 이 글이 이후 기술검증회의와 투표프로그램 결정과정에 문제가 된다고 생각한다면 선관위원장님 판단하에 삭제하셔도 무방합니다.