이 글은 크리에이티브 커먼즈 코리아 활동가이자 '코드나무' 활동가인 장승훈 님이 코드나무 블로그에 연재 중인 '춘식이의 코드이야기'의 일부입니다. 필자 동의를 얻어 게재합니다. (편집자)

'코드나무' 활동을 하면서, 그리고 '코드포서울' 프로젝트를 진행하면서 해외의 많은 사례들을 자연스레 공부하게 됩니다. 보고서 자료나 웹사이트, 응용프로그램(앱) 등 지금 우리 문제들을 고민하고 해결하려 노력했던 사례들을 찾아볼 수 있죠. 이런 자료들은 CC 라이선스로 배포되거나 오픈소스로 공개돼 있습니다. 이번 코드이야기를 통해 들려드릴 오픈소스 개발기도 이렇게 알게된 프로젝트 중 하나입니다.

Openspending.org


열린 정부에서 첫 번째로 언급되는 주제이자 제가 개인적으로도 가장 관심을 갖는 것이 정부 투명성입니다. 정부가 보다 일을 잘하고 시민들이 더욱 편한 삶을 누리기 위해서는 정부가 오롯이 시민들을 위해 일해야 합니다. 그것을 판단하는 1차 기준은 바로 세금이 어떤 곳에 쓰이는지 확인하는 것입니다. '오픈스펜딩'은 ‘세출’ 데이터만을 위해 구축된 프로젝트입니다. 각 나라 국민들이 자기 나라에서 공개된 세출 데이터(CSV 형태)를 직접 업로드하면 웹에서 단순한 조회 기능을 제공하기도 하고, 제공되는 도구로 간단한 시각화 작업도 할 수 있습니다. 가장 중요한 것은 자동으로 데이터를 오픈API로 변환해 제공한다는 점입니다. 자동으로!

OpenSpendingTwitterAvatar
▲ OpenSpendingTwitterAvatar

제가 처음 프로젝트를 알았을 때만 해도 한국 관련 자료는 열린지식재단 한국 활동가분이 작업한 '2012년 국내 세출 데이터'가 유일했습니다. 대부분 나라가 한자릿수 데이터를 가지고 있긴 하지만, 387개 데이터가 올라와 있는 일본을 보니 경쟁심도 생기더군요. 곧바로 눈에 불을 켜고 2013~2014년 국내 데이터를 업데이트하기 위해 국내 지방자치단체 웹사이트를 돌아다니기 시작했습니다.

제 점수는요, 별 1개입니다!


국내 세출 데이터는 지자체별로 예산을 공개해야 하기 때문에 찾기 어렵지는 않았습니다. 아쉬운 것은 공공데이터포털의 존재가 무색할만큼 공공데이터로 공개된 세출 데이터는 서울특별시가 유일했던 점입니다. 나머지 지자체는 각 도청·시청 홈페이지에 들어가 예산 공개 페이지에서 직접 데이터를 내려받아야 했습니다. 그러나! 제가 지난번 코드이야기에서 소개해드린 오픈 데이터를 별점으로 평가하는 별점 평가 시스템 기억하시나요? 찾아낸 데이터에 제가 줄 수 있는 별점은 냉혹하지만 1개가 전부입니다. 공공데이터포탈을 통해 공개하고 있는, 서울시를 포함한 모든 지자체별 세출 데이터는 PDF 혹은 HWP 형태로 제공되고 있습니다. 데이터를 ‘데이터’로 보지 않는 것, 이것이 '정부3.0'의 현실입니다.

▲  출처: http://5stardata.info. CC0.
▲ 출처: http://5stardata.info. CC0.

이제 직접 제 이름으로 데이터를 올려야겠죠? 기존 2012년 세출 데이터에서 오타를 고치고 기능별로 분류된 항목를 정리한 뒤, 2013~2014년 서울특별시 데이터를 추가해서 올렸습니다. 데이터 원본은 코드나무같은 '시빅해커'(Civic Hacker)들을 위해 오픈 데이터를 자유롭게 공개할 수 있는 플랫폼 '시빅데이터'를 이용했습니다. (코드나무 폴더는 여기에) 오픈스펜딩에서 UTF-8 인코딩 파일만 인식하는 등의 이유로 CSV 편집은 오픈오피스를 이용하는 것이 용이하더군요. (엑셀로 삽질한 시간이 몇 분이던지..).

▲  또 HWP라구요?출처: https://www.flickr.com/photos/selfecce/4011704777. CC BY-NC-ND.
▲ 또 HWP라구요?출처: https://www.flickr.com/photos/selfecce/4011704777. CC BY-NC-ND.

Where Does My Money Go?


이렇게 올린 데이터를 어떻게 사용할 수 있을까요? 대표 사례로 오픈스펜딩을 활용한 영국의 '내가 낸 세금은 어디에 쓰일까?'(Where Does My Money Go?) 프로젝트가 있습니다. 각 기능별로 세금이 어디 쓰였는지 기록한 데이터를 기반으로 2가지 방법으로 시각화 자료를 보여줍니다. 하나는 연소득에 따라 대략적인 소득세를 계산하고 이 소득세를 기준으로 오픈스펜딩에서 제공하는 API를 이용해 하루에 내가 낸 세금이 어느 분야에 얼만큼 쓰이는지 보여주는 것입니다. 두 번째는 전국 지자체별로 기능별 세출액을 지도와 함께 비교해 보여주는 것입니다. 오픈소스로 공개돼 있는 프로젝트니 당연히 시도해보지 않을 수 없겠죠?

▲  출처: https://www.flickr.com/photos/jwyg/8166530255. CC BY-SA.
▲ 출처: https://www.flickr.com/photos/jwyg/8166530255. CC BY-SA.

소득세 계산하기


우선 첫 번째 시각화 작업을 우리나라 실정에 맞게 적용하기 위해서는 국내 소득세를 계산할 필요가 있었습니다. 현재 세금을 계산하는 ‘택스맨’ 깃허브 저장소에는 영국과 일본을 포함해 6개국 알고리즘이 포함돼 있습니다. 저는 먼저 이곳에 한국 소득세(가장 기본적인 과세율만 적용)를 계산하는 알고리즘을 추가해 풀 요청(Pull Request)를 보냈습니다. (왜 내가 보낸 풀을 받아달라는 트윗, e메일도 다 씹는거니!).

exports.income_tax =

# Source: http://www.nts.go.kr/tax/tax_01.asp?cinfo_key=MINF5520100726112800&menu_a=100&menu_b=100&menu_c=400&flag=01
2013:
bands: [
{ width: 12000000.0, rate: 0.06 }
{ width: 46000000.0, rate: 0.15 }
{ width: 88000000.0, rate: 0.24 }
{ width: 300000000.0, rate: 0.35 }
{ rate: 0.38 }
]



다음으로는, 세금이 쓰이는 항목들이 나라마다 다른 만큼 한국 항목에 맞는 아이콘을 적용할 필요가 있겠죠? 현재 아이콘을 별도로 제작하는 작업은 이응셋 님이 진행중이고요. 저는 항목마다 아이디와 아이콘을 매칭하는 작업을 진행했습니다. 오픈소스로 공개된 라이브러리에서는 데이터의 아이디 값과 항목별 아이콘을 매칭시켜 주는 알고리즘이 따로 존재하기 때문에, 각 항목별 아이디 값은 세출 데이터에 공개된 번호를 사용했습니다.

▲  기능별 아이콘이 군데군데 적용된 모습.
▲ 기능별 아이콘이 군데군데 적용된 모습.


OpenSpending.Styles.Cofog = {
// 일반공공행정
'010': { icon: '/img/functions/government-uk.svg' },

// 공공질서 및 안전
'020': { icon: '/img/functions/order-safety.svg' },

// 교육
'050': { icon: '/img/functions/education.svg' },

// 문화 및 관광
'060': { icon: '/img/functions/culture.svg'},

// 환경보호
'070': { icon: '/img/functions/environment.svg' },

...



SVG? SVG!


이제 각 지자체별 기능별 사용액을 비교해주는 시각화 작업이 남았네요. 오픈스펜딩 데이터를 라이브러리에서 트리 형태로 그대로 보여주기에 크게 손 볼 것은 없었지만, 가장 큰 난관은 대한민국 지도를 SVG 형태로 시각화해 인터랙티브한 기능을 구현하는 부분이었습니다. SVG를 다뤄본 경험이 없었기에(oTL) 지도 부분을 빼고 보여줄까 고민하던 찰나(실제 일본 프로젝트에서는 각 지자체 별로 구현하고 있어서 지자체별 비교하는 지도는 빠져 있습니다) 강철 님이 진행하셨던 공공데이터 워크숍을 통해 SVG에 대한 이해도 급상승! 현재는 강철 님이 제공해 주신 대한민국 SVG 파일을 파일 크기를 줄이고 웹사이트에 맞게 적용해보고 있는 단계입니다.

▲  강원도, 경기도, 서울 등의 SVG 파일을 적용한 모습.
▲ 강원도, 경기도, 서울 등의 SVG 파일을 적용한 모습.

완성된 결과물까지


이미 공개된 소스코드에 대한민국 세출 데이터에 맞는 결과물을 집어넣는 과정이기 때문에 오픈소스 개발기였지만 소스코드를 직접 짜는 작업은 많지 않았습니다. 완성된 결과물을 내놓기 위해 남은 작업은 ▲서울특별시를 제외한 나머지 지자체들의 세출데이터를 업로드하는 것 ▲대한민국 종합소득세 계산 알고리즘을 단순 세율 뿐만 아니라 필요한 조건들도 포함하도록 가다듬는 것 ▲작업이 진행중인 아이콘을 적용하는 것 ▲대한민국 SVG 파일을 가다듬어 인터랙티브하게 지자체별 세출 항목을 비교할 수 있는 시각화를 마무리하는 것입니다.

▲  출처: https://www.flickr.com/photos/tedxshelburnefalls/10855440265. CC BY-NC-ND.
▲ 출처: https://www.flickr.com/photos/tedxshelburnefalls/10855440265. CC BY-NC-ND.

‘시빅 해커’가 되는 길


읽어보면서 다들 느끼셨나요? 제가 진행했던 작업을 살펴보면 누구나(!) 할 수 있는 그런 작업 과정들입니다. 물론 이미 갖추어진 오픈 플랫폼과 오픈소스 덕을 톡톡히 본 것이지만요. 단순히 오픈스펜딩에 있던 대한민국 세출 데이터가 1개에서 2개가 되는 것도, PDF·HWP 파일로만 존재했던 데이터가 눈에 보이는 시각화 작업물로 바뀌는 것도 뛰어난 기술을 가진 전문가들만의 영역은 아닙니다. 이건 제가 이번 작업을 진행해오면서 깨달은 것이기도 하고요. 제가 꼭 전해드리고자 하는 이야기는 바로 이것입니다. ‘시빅해커’가 되는 길은 어렵지 않습니다. 관심과 참여, 이 2가지만 있으면 언제든 모든 시민이 각자 자리에서 해커가 될 수 있다고 생각합니다. 열린 정부는 정부의 노력도 중요하지만, 많은 시민들의 관심과 참여가 더 중요하기 때문입니다.
chunsik
▲ chunsik
글_장승훈. 크리에이티브 커먼즈 코리아와 코드나무 활동가. 히피개발자를 꿈꾸며 독학하는 대학생. 웹과 IT기술이 보다 나은 세상을 만들 수 있다고 믿습니다. 트위터_@thechunsik

저작권자 © 블로터 무단전재 및 재배포 금지