통진당 부정 경선 의혹. 소스코드를 열었다는 소리가 무엇인가?

2012/5/10 by

통진당 부정 경선 의혹. 소스코드를 열었다는 소리가 무엇인가?

 

통합진보당 부정선거 의혹과 관련해 소스코드를 수정했다던가, 혹은 소스코드를 보더라도 실행코드는 변경이 안된다고 했다던가 하는 이야기가 있더군요. 이와 관련해 도대체 이게 무슨 소리냐는 질문을 좀 받아서 간단하게 이해하실 수 있게 정리했습니다. (일반인이 이해하실 수 있게 하려고 생략하거나 엉터리 용어를 붙이거나 대충 얼버무린 부분도 있으니 개발자 분들은 좀 거슬려도 태클 걸지 말아주세요 ^^ 거짓말을 한 내용은 없습니다)

 

원래 프로그램을 짤 때에는 대부분 인간이 이해하기 쉬운 형태의 규격(언어)으로 프로그램을 짭니다. 내용을 들여다 보면 if .. then 이라던가 and, for, or, not 같은 쉽게 의미를 짐작할 수 있는 단어들로 되어 있죠. 이런 것을 컴퓨터 프로그래밍 언어라고 하는데 php, C#, Java, VB, Perl, Ruby, JavaScript 등 다양한 언어가 있습니다. 이 중에서 웹 환경에서 가장 많이 쓰이는 언어가 php, Java, 그리고 C#(혹은 VP.net으로 대변되는 ASP.net 환경) 입니다.

 

벌써부터 복잡하죠? 위의 문단에서 기억할 것은 웹 프로그램을 짤 때에는 php, Java, ASP.net 이라는 언어 중 하나를 사용하는게 보통이다라는 것입니다. 나머지는 그냥 잊으셔도 되죠. 그리고, 이런 언어를 이용해서 개발된 프로그램 문서를 가리켜 소스 코드(Source Code)라고 합니다. 한 마디로 소스 코드란, 개발된 프로그램을 가리킵니다.

 

그런데 문제는 컴퓨터는 이런 언어를 그대로 이해하지 못한다는 겁니다. 그래서 이것을 컴퓨터가 이해하는 형태로 번역해 주어야 합니다. 이렇게 번역된 코드를 실행 프로그램(Executable Program) 이라고 합니다.

 

이렇게 번역을 해 주는 방식은 크게 두 가지가 있습니다. 하나는 미리 번역(컴파일)을 해서 실행 프로그램을 생성한 후 그것만 가져다 실행하는 경우, 다른 하나는 사용자가 실행하라고 명령하면 그제서야 번역(인터프릿)을 해서 실시간으로 실행하는 경우입니다. 요새는 이 두 가지의 중간 형태로, 실시간 컴파일을 해주는 경우(JIT Compiler)도 있습니다.

 

정리합니다.

 

1. 컴퓨터 프로그램을 짤 때에는 인간도 알아보기 쉬운 언어를 사용한다.

 

2. 컴퓨터는 이걸 바로 이해하지 못하므로 번역해 주어야 한다.

 

3. 번역 방법에는 실시간 번역과 사전 번역 두 가지가 있다.

 

그렇다면 실시간 번역과 사전 번역의 가장 큰 차이점이 무엇일까요? 실시간 번역의 경우 소스코드가 실행될 컴퓨터에 있어야 하고, 사전 번역의 경우 소스코드는 프로그램 개발 컴퓨터에만 있다는 점입니다. 왜냐하면, 프로그램 개발 컴퓨터에서 번역(컴파일)을 해서 실행 코드가 생성되면, 그냥 그 실행 코드만 실제 실행될 컴퓨터에 갖다 놓으면 되기 때문입니다. 여러분이 사용하는 오피스 프로그램이나 아래아한글 같은 프로그램은 이렇게 실행 코드만 설치하는 것입니다. 따라서 여러분의 컴퓨터에는 그 프로그램들의 소스코드가 없습니다.

 

하지만 웹 프로그램의 경우에는 사전 번역 방식보다는 실시간 번역 방식을 쓰는 경우가 더 많습니다. 특히 웹 프로그래밍 환경은 앞서 말했듯 php, Java, ASP.net 으로 나뉘는데, ASP.net은 개발이 완전히 완료된 경우에 사전 번역 방식으로 설치하기도 하고, Java 역시 사전에 1차 번역된 실행 가능 코드로 설치하는 경우가 많지만, php의 경우 특별한 경우를 제외하고는 대부분 소스 코드 그대로 사용합니다.

 

통합진보당 온라인 투표 환경을 보지 못해 정확하게 말하기는 어렵지만 흘러나오는 정보를 보거나 현재 통합진보당 홈페이지를 보면 php로 되어 있는 것을 알 수 있습니다. 그것도 소스코드가 그대로 사용된 경우로 추측됩니다. (같은 업체가 개발한 것으로 알려졌습니다.) 그 말은 결국 소스코드 자체가 웹서버에 있기 때문에 소스코드를 열었다는 것은 프로그램에 손을 댔다는 것이나 별반 차이가 없다는 소리입니다. 왜냐하면 소스코드를 수정하는 순간, 변경된 내용이 즉시 웹사이트에 반영되기 때문입니다.

 

이런 일을 막기 위해 원래 이런 민감한 작업을 하는 웹 프로그램은 php를 이용하더라도 Zend와 같은 컴파일 방식의 도구를 이용해서 사전에 번역을 하고 소스코드는 격리해 버리던가, 혹은 ASP.net이나 Java를 사용하고 사전에 완전히 컴파일(번역)을 해 놓아 주어야 합니다. 그래도 불안하니 실제 사용 중에는 서버 패스워드를 선거관리자가 변경하고 접근을 막아야 하는게 원칙입니다.

 

여기까지 이야기를 다시 정리합니다.

 

1. 웹 프로그램은 흔히 실시간 번역 방식으로 개발되지만 사전 번역 방식도 있기는 하다.

 

2. 현재 통진당 웹사이트와 기타 정보로 볼 때 실시간 번역 방식이 사용된 걸로 보이며 이 경우 소스코드는 웹 서버에 있다.

 

3. 이 경우 소스코드를 열었다는 것은 웹 프로그램 자체에 직접 접근했다는 것을 의미한다.

 

 

그러면, 과연 소스코드를 열어서 간단히 투표 결과를 조작하는게 가능할까요? 결론만 말하자면 “너무나 쉽다” 입니다. 예를 들어 접속한 사람이 A 후보를 찍으면 해당 후보에 +1 이 되도록 데이터베이스에 저장하는 문장이 있다고 칩시다. 그러면 그 바로 윗 줄에 슬쩍 “3번 반복” 이라고 다음과 같이 넣어주면 갑자기 득표율이 3배로 튑니다.

 

for ($i = 1; $i <= 3; $i++) {

저장 명령;

}

 

물론 꼭 이런 일이 저질러졌다거나 이 방식을 사용했다고 말할 수는 없습니다만, 마음만 먹으면 5분 정도면 이런 장난이 가능하다는 이야기입니다. 특히 사전에 이런 저런 조작을 하는 프로그램 코드를 미리 만들어 뒀다가 해당 소스코드에 복사-붙여넣기-저장 만 해주면 몇 초 안에 끝나는 일입니다. 어짜피 프로그램 개발사까지도 의혹의 시선을 받고 있는 상황이니 말입니다.

 

결론을 말하자면, 선거를 하던 중 웹 서버에 있는 소스코드를 열었다는 것은, 이미 그것 만으로도 선거가 중지될 수 있는 심각한 일입니다. 이건 그냥 투표함을 깐 수준이 아니라, 투표함에 무엇이든 할 수 있는 전지전능한 신이 투표소에 강림한 것이나 다름이 없습니다. 뿐만 아니라, 실행코드를 사용하기 때문에 소스코드를 열어도 상관없다는 것 역시 말이 안됩니다. 실행코드를 사용하는 방식이었다면 소스코드를 실제 웹 서버에 두는 경우는 없기 때문입니다. 소스코드를 열었다는 말이 나왔다는 것 만으로 이미 실행코드를 사용하는 방식이 아니라는 걸 인증한 겁니다.

 

백번 양보해 사전 번역 방식을 사용했고, 소스코드가 다른 폴더에 있었는데 그걸 열었다고 칩시다. 이건 이것대로 문제입니다. 선거 기간 중에 상관도 없는 이 소스코드를 왜 열었으며, 그 코드를 열었다면 그걸 수정해서 그 순간 번역(컴파일)을 한 후 실행 코드를 바꿔치기 하지 않았다고 누가 보장한다는 말입니까.

 

또한, 이게 실시간 번역 방식이었다고 하더라도 소스코드는 원래 개발자의 PC에 따로 저장해 두게 마련입니다. 만에 하나 확인할 것이 있었다고 하더라도 그냥 개발자 PC에 있는 사본을 열어봤으면 될 일입니다. 서버에 접속할 필요도, 이유도 없습니다.

 

통진당 당권파는 더 이상 이런 걸 가지고 장난을 치지 말아야 합니다. 애초에 개발 업체가 특정 정파와 관련이 있어서도 안되었고, 관계가 없었다고 하더라도 그걸 연 순간 이미 선거는 끝장 난 겁니다. 온라인 게임을 하다가 누군가 한 명이 치트 프로그램을 켰는데, 그게 밝혀지자 “난 그냥 들여다 보기만 했다”라고 한들, 이미 게임의 공정성은 끝장난 것과 마찬가지 입니다.

 

지금으로부터 20여년 전, 처음 컴퓨터 집계가 우리나라 선거에 도입됐을 때, 그 컴퓨터 집계가 조작될 수 있음을 보여주는 시뮬레이션 프로그램을 개발해서 대학교 축제의 컴퓨터 동아리 전시회 때 전시했던 기억이 납니다. 20여년이 지난 지금 똑같은 이야기를 수구 정당이 아니라 진보 정당을 놓고 하고 있다는 점이 저를 더욱 아프게 합니다. 그래서 이런 일들이 우리 정치판에서 빨리 사라지기를 기원합니다.

 

배리

 

 

Print Friendly

3 Comments

  1. 자유시민

    마음대로 데이터를 조작했다는 말을 참 어렵게 말하네요.

       0 likes

    • 현재 NL 측에서 데이터 조작 비판을 엉뚱한 논리로 받아치고 있는데 이걸 반박하기 위해서 가장 쉬운 정도 수준의 설명은 이 정도라고 생각합니다..

         2 likes

    • YanPi

      조작했다는게 아니라 일각에서 나오는 말을 기술적 논리로 반박하고 조작가능성은 언제든 있다는걸 말하는거 아닌가요?? 제가 잘못본건가???

         2 likes

Trackbacks/Pingbacks

  1. [희곡] 아저씨들의 저녁식사 | 카인의 여행자 안내소 - [...] [통진당 부정 경선 의혹, 소스코드를 열었다는 소리가 무엇인가?] 중에서, IT 전문가 Barry [...]

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>