brunch

매거진 기사 너머

You can make anything
by writing

C.S.Lewis

by 다혜 Jul 19. 2018

영화 <그날, 바다> 검증보도

데이터 작업 후기

기사 출판한지 일주일. 느지막이 작업후기를 적는다.


영화 <그날 바다>를 보러 4월 11일, 용산 시사회를 찾았다. 파파이스를 직접 찾아 들은 바 전혀 없었고, 영화 내용에도 별 관심없었다. 동료들과 이전에 영화 <곡성>을 같이보고나와 이런저런 얘기 나눴던 술자리가 재밌었기에 '시간도 있는 데 가볼까' 정도.

영화를 보고 난 뒤 솔직한 궁금증은 "CG 얼마나 들었을까"였고, "데이터를 영상으로 다룰 때는 저 정도의 친절함이 필요하구나"하는 반성도 했다. 영화에서 '까만 배경에 흰 글씨'로 세월호 AIS 코드를 띄워놓고 효과음을 넣어가며 '엄청난 것을 발견했다'고 할 때는 오글거리더라. 공식 해설문서가 있었을 텐데 분명.

딱 거기까지였다. 당시에는 하고 있던 아이템도 있었고, 직접 검증해봐야겠다는 생각은 전혀 안 했다. 하지만 늘 모든 일은 내 예상의 범주를 벗어난다. 5월 15일, "<그날 바다> 검증팀"이 됐다. 이유는? "데이터팀에서 유일하게 영화 봤다며"


"선박에서 전송한 데이터는 실시간으로 인접한 정부 관할 해상교통관제센터(VTS)뿐만 아니라 주변 선박들, 민간에서 설치한 상업용 육상 수신기, 위성 등에서 동시에 수신된다. 우리는 각각에 수신된 데이터 원문을 모두 입수해 직접 디코딩, 비교분석한다."


7월 13일까지 그렇게 만 두 달을 세월호만 봤다. 처음엔 어떻게 열어야 할지도 모르겠는 AIS로그를 띄워놓고 참고할만한 문서부터 다 찾아 읽었다. 공식 사이트에도 없는 문서를 찾아가며, 모르는 영어 단어 찾아 띄엄띄엄. 입사 이래 가장 많은 영문 문서를 읽었다. 그러다가 윈도우에서만 돌아가는 무료 AIS decoder를 찾았고 무작정 세월호 항적 데이터를 돌렸다. 그제야 longitude, latitude 등등 알만한 단어들이 눈 앞에 펼쳐지기 시작했다. 다음 문제는 펼쳐진 모든 정보를 다 파일로 저장하고 싶은데, 1) 행마다 담고 있는 정보의 양이 다르다 2) 위경도 값을 소수점 여덟째 자리까지 뽑고 싶다 3) 99척 선박의 정보가 함께 담긴 데이터는 용량이 커서 돌아가지 않는다 등등의 문제들이 계속 발생했다.

처음 시도했던 무료 디코더 툴


결국 개발자님이 등판해 코드를 짰고 JsonLines, CSV로 받았다. ITU 기술문서를 찾아가며, 이런저런 시행착오를 겪어가며, 같은 데이터를 두 번, 세 번, 네 번 돌렸다. 존재하는지도 몰랐던 정보를 취재하다가 발견해 새로 뽑았다. 도분법, 도분초법으로 위경도를 디코딩할 수 있는 건지 확인하기 위해 또 뽑았다. 관리업체가 다른 진도 VTS 데이터 양식이 조금 달라 또 뽑았다.

선박의 항해정보를 수집해 판매하는 네덜란드 Made Smart Group에서 구매한 세월호 AIS 데이터를 또 돌렸다. 이번엔 container 부분에 담긴 수신시각 정보가 UTC인가를 확인하는데 수번의 메일이 오갔다. 담당 직원은 대체 무엇을 하는데 언론사에서 디코딩한 버전이 아니라 데이터원문을 구하는지 의아해했다.

세월호 주변을 지나던 두우패밀리호의 VDR(항해기록장치)은 별도의 상용프로그램으로 돌렸다. 이 모든 과정을 제작진이 자체적으로 해결했으니 삽질은 필연적이었고 과정은 지난했다.


정부 관할 7개 VTS(인천, 대산, 군산, 목포, 진도, 여수, 제주)의 22개 기지국에 기록된 데이터, 네덜란드 Made Smart의 데이터베이스에 저장된 데이터, 세월호 인근에 있던 두우패밀리호에 기록된 데이터들을 상호 비교해본 결과, 동일한 위치에 있는 데이터들은 속력과 코스, 뱃머리 방향 등 모든 정보가 일치하는 것으로 확인됐다.

디코딩한 데이터들을 지도에 모두 뿌려 겹쳐지는 걸 보여주고자 했다. 퓨전테이블로 간단히 맵핑해 확인하니 정확히 같은 위치에 찍히는 대부분의 점이 완전히 겹쳐 두세 개의 점으로 보이지 않는 문제가 확인됐다. 1) 점의 투명도를 조절할 수 있어야 한다. 2) 한 점을 클릭했을 때 해당 정보가 수신된 모든 수신처가 시각적으로 보여야 한다. 3) 정부 VTS, Made Smart Group, 두우패밀리호 세 개의 층위로 나뉘어야 한다. 여러 조건을 충족하는 맵핑이 필요했고, 시각화 전문가님이 합류해 코드를 짰다.

http://pages.newstapa.org/sewolais/

모든 원문 정보를 디코딩해 추출한 AIS 메시지 개수는 4만4천여 개. 이중 복수의 수신처에서 수신돼 중복된 메시지들을 묶어서 한 개로 처리하면 모두 6천848개. 중복 메시지를 분류하는 기준은 AIS payload였다. 각각 메시지 속에는 선박의 위치와 속력, 코스, 뱃머리방향 등 핵심 항해정보 뿐만 아니라 메시지타입, 위치정확도, 수신처 개수 등 40여 개의 세부 정보들이 포함돼 있는데 그 가운데 각 메시지의 중복 여부를 확인할 수 있는 정보가 AIS payload라는 것을 수많은 디코딩 과정을 반복하면서 알게 됐다.

취재를 진행하면서 Received Stations 등의 정보를 기존에 분석하던 데이터에 추가로 병합해야하는 상황에서 기준이 될 key값이 필요했다. key값을 만들기 위해 자료를 들여다보다가 AIS payload 값이 unique 하다는 것이 눈에 띄었다. AIS 전문가에게 문의한 결과, AIS 분석 업체에서도 여러 곳에서 수신된 자료 중 동일 데이터를 걸러낼 때 AIS payload값을 사용한다는 답변을 얻었다. 삽질하다가 노다지를 캔 기분이랄까.


AIS payload를 기준으로 정부 관할 7개 VTS 산하 22개 기지국에 중복 수신된 메시지들을 묶어봤더니, 하나의 메시지가 각 기지국에 수신된 시각은 제각각인 것으로 나타났다. 예를 들어, ‘16SWOT003C`wKmTChwR60TlF28:E’라는 똑같은 AIS payload 정보를 가진 메시지는 어느 곳에서 수신했던 북위 34.54273333도, 동경 125.7056833도, 속력 21.1노트, 코스값 153.8도, 뱃머리방향 154도 등의 모든 세부 정보들이 동일하다. 이 정보는 인천VTS의 덕적도 기지국, 대VTS의 후망산, 옥마산, 신진도 기지국, 군산VTS의 오식도 기지국, 목포VTS의 임자도, 흑산도, 가거도 기지국, 진도VTS의 서거차도 기지국, 제주VTS의 우도 기지국, 그리고 두우패밀리호 등 모두 11곳에서 수신됐다. 그러나 후망산 기지국에 수신된 시각은 7시 30분 18초였던데 반해 인접한 신진도 기지국에서는 7시 30분 21초, 서거차도 기지국 7시 35분 37초, 우도 기지국 7시 29분 13초 등 수신시각이 제각각으로 저장돼 있다.

이후 취재를 통해, 1) 각 VTS와 기지국 별로 장비에 입력된 시간 정보 자체가 제각각이었기 때문 2) 수신처의 수신환경에 따른 메시지의 수신지연 현상 때문이라는 사실을 확인했다. 이런 이유로 선박의 AIS 정보를 통합하는 해수부의 GICOMS(해양안전종합정보시스템)는 동일한 메시지가 여러 VTS에서 시차를 두고 수신되었을 경우 가장 먼저 수신된 메시지만을 센터의 서버로 전송하고 이후에 수신되는 동일 데이터들은 저장하지 않는 내부 알고리즘을 갖고 있었다.


정부가 발표한 세월호 AIS 항적 데이터는 이런 과정을 거쳐 수집된 '수신시각 기준 항적'이었다. 영화 <그날 바다>가 언급하는 시간 정보 역시 모두 수신시각이었다. 하지만 수신 시각을 기준으로 두 점을 잡아 이동한 시간과 기록된 속력으로 이동 거리를 추정하면, 실제 기록된 위경도로 추산한 거리와 큰 차이가 생긴다. 이 문제는 디코딩해 확인가능한 TImeStamp로 생성시각을 복원하면서 해결됐다. 같은 두 점을 생성 시각을 기준으로 이동한 시간을 적용하면, <속력(SOG)*시간(두 점 간의 생성시각 초차) = 위경도 추산 거리>에 들어맞는다. IALA(국제항로표지협회)의 기술문서에 따르면 AIS 소스코드에 반드시 포함되는 타임스탬프 정보는 전자식 위치 고정시스템에 의해 해당 메시지가 생성된 시점의 UTC(국제표준시각) 가운데 초 정보를 의미한다. 현재 세월호 선체조사위원회 역시 타임스탬프 기준 AIS 데이터를 중심으로 조사활동을 벌이고 있다.

타임스탬프로 정렬한 데이터 https://onedrive.live.com/view.aspx?resid=B56EEE4D52A26234!647&ithint=file%2cxlsx

이후 입수한 모든 세월호 AIS 데이터를 타임스탬프 값에 따른 생성시각 기준으로 정렬해 분석에 활용했다. 분석 결과는 기사에 첨부해 공개했다. 타임스탬프를 기준으로 정렬하더라도 시간의 흐름과 위치 정보가 일치하지 않는 부분이 일부 확인됐으나 세부적으로 확인해보니 대다수가 GPS 오차율을 벗어나지 않는 것으로 확인됐다. 구체적인 내용은 기사에 서술했다.

이밖에도 영화에서 수신시각 기준으로 언급한 '분당 메시지 전송횟수' 주장 등을 검증하기 위해 같은 해역에 있었다고 알려진 두우패밀리호, 둘라에이스호 등의 AIS 항적도 디코딩하고 타임스탬프 정렬작업을 진행했다. 인근 해역에 있던 99척의 항적 정보 원문을 입수했으나 양이 너무 많아 elastic sql을 썼다가 세간에 알려진 선박만 별도 추출하기로 방향을 바꿨다.


개인적으로 중요했던 포인트는 이런 것들.

긴 기간동안 한 프로젝트에만 집중할 수 있는 환경

처음 다루는 형태의 데이터

부담감과 책임감이 컸다.

매 단계마다 지나치다 싶을 정도로 반복확인하고 점검했다.

진행상황을 공유하고 문제해결을 같이 고민할 구성원은 존재 자체로 중요하다.

영어, 코딩 부지런히 공부하자.


두 달 간 머리 싸맨 모든 결과는 기사 문단 사이에, 데이터 원문은 하단에 첨부해 공개했다. '검증 과정과 결과를 투명하게 공개하려는 취지'이다. 누구든 데이터를 받아 직접 검증할 수 있다.


keyword
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari