카드 그림 속 "자연산 광어"가 "자련산 광어"가 돼 있었다. 70장을 검수하다 나온 오류다. 기획서에서는 괜찮아 보였는데, 실제로 만들어 보니 고쳐야 했던 일이 이것 말고도 더 있었다. 안드로이드에서 지도가 안 그려진 일, 카드를 뽑을 때 기다리는 시간의 기준을 바꾼 일, 그리고 위치정보랑 개인정보에 대한 내 해석이 기관의 답으로 바로잡힌 일까지.
카드 그림 속 한글이 깨졌다
카드 그림은 AI로 만들었다. 화풍 다섯 가지에 열네 장씩, 모두 70장. 8월 10일, 컴퓨터의 문자 인식 기능으로 70장 전부의 글자를 읽어서 목록으로 만들고, 인식이 흐린 부분은 눈으로 확대해서 확인했다.
결과는 글자가 깨진 그림 9장, 이름이 틀린 그림 1장, 장면이 기획과 다르게 그려진 그림 4장. 수산시장 가격표에는 "자연산 광어"가 "자련산 광어"로, "멍게"가 "멍개"로 그려져 있었다. 두부집 간판의 "초당 순두부"는 한자처럼 뭉개져 있었고.
제일 문제가 컸던 건 "대관령단오제"였다. 실제 축제 이름은 강릉단오제고, 대관령에서 지내는 제례는 강릉단오제의 한 절차일 뿐 따로 있는 축제가 아니다. 같은 카드를 다른 화풍으로 그린 그림에는 "강릉 단오제"로 바르게 들어가 있어서 차이가 더 눈에 띄었다. 지역 여행 서비스가 지역 이름을 틀리면 신뢰를 잃는다. 공모전이라면 감점 요인이 될 수도 있었고.

문제는 고치는 방법이었다. 이 글자들은 그림 위에 따로 얹힌 게 아니라, 그림을 만들 때 그림과 한 덩어리로 같이 그려진 거다. 그래서 글자만 쏙 고칠 수가 없고, 그림을 통째로 다시 만들어야 한다. 검수 문서에도 다시 만드는 게 유일한 해결책이라고 적혀 있다. 8월 19일에 한 번 더 전부 살펴봤을 때, 다시 만들어야 할 그림은 모두 17장이었다.
이 일 뒤로 원칙을 하나 정했다. 정확해야 하는 한글은 그림으로 만들지 않고, 실제 서체로 얹는다. 그림은 글자 없이 만들고, 글자는 나중에 컴퓨터 글꼴로 올리는 거다. 이 글에 들어간 정보 그림들도 그렇게 만들었다.
안드로이드에서 지도가 안 그려졌다
7월 11일 새벽, 앱에 카카오맵을 붙였다. 그런데 안드로이드 폰에서 지도 화면을 열자 앱이 그대로 꺼져 버렸다. 우리가 앱을 만드는 방식에서 카카오맵을 쓰려면 중간에서 이어 주는 도구가 필요한데, 쓸 만한 게 사실상 하나뿐이었다. 그런데 그 도구는 안드로이드용 지도 부분이 아예 만들어져 있지 않았고, 관리도 멈춰 있었다.

어떤 설정으로도 안 돼서, 그날 저녁 방법을 바꿨다. 앱 화면 안에 웹 화면을 하나 끼워 넣고, 그 안에서 웹용 카카오맵을 그리는 방식이다. 장소 핀이랑 방문 순서를 잇는 선은 웹용 지도가 공식으로 지원했고, 나중에 아이폰 앱을 만들 때도 같은 코드를 그대로 쓸 수 있다. 지도에서 보여 주려던 건 그대로 두고, 보여 주는 기술만 바꾼 셈이다.
3초의 벽
카드를 뽑으면 AI가 왜 이 카드인지 짧은 해설을 써 준다. 처음 정한 기준은 '전체 3초 안에, 해설은 2초 안에'였다. 2초를 넘기면 서비스 장애에 대비해 만들어 둔 문장을 대신 보여 준다.
9월에 실제 기록을 보니, AI 해설은 보통 2.3초쯤 걸렸다. 기준이 2초라서 정작 AI가 쓴 해설이 나간 건 열 번 중 한두 번(15%)뿐이었다. 빠르긴 한데, 카드마다 AI가 왜 이걸 골랐는지 들려주는 부분이 거의 안 보이는 상태였던 거다.

그래서 하나를 골라야 했다. 조금 더 빠르게 보여 줄지, 조금 더 기다리더라도 AI 해설을 보여 줄지. 이 프로젝트에서 기획과 AI 기능을 둘 다 맡고 있어서, 이 선택은 온전히 내 몫이었다. 1초를 더 기다리는 쪽을 골랐다. 기준을 전체 4초, 해설 3초로 바꾸면 해설의 약 94%가 AI가 쓴 문장으로 나온다. 이유는 간단했다. 2초 기준을 그대로 두면 해설 대부분이 장애용 문장으로 나가서, AI 해설을 넣은 의미가 없어진다.
한동안 아무도 안 쓰면 서버가 잠들어서 첫 카드가 유난히 오래 걸리는 문제도 있었다. 이건 사용자가 앱 홈에 들어올 때 서버를 미리 한 번 깨워 두는 방식으로 풀기로 했다.
사업자 없이 내놓는다는 것
회사에서 기획할 때는 늘 사업자가 있는 형태를 전제로 생각했다. 『강릉, 오늘』은 달랐다. 팀에 사업자등록을 한 사람이 아무도 없었다. 그래서 7월 26일, 사업자 없이 개인이 운영하는 서비스로 내놓는다는 가정 아래 기획을 정리했다.
막상 사업자가 없는 형태로 놓고 보니 제한이 많았다. 처리방침에 운영자 주소와 이름을 꼭 적어야 하는지부터 확인해야 했다. 개인이 운영하니 적는 순간 개인 신상이 그대로 드러난다. 스토어에 앱을 올리면 개발자 주소가 공개되는지도 미리 확인했다. 개발자 계정을 만든 뒤 구글 플레이 콘솔에서 보니, 공개되는 건 이메일뿐이고 주소를 넣는 칸은 없었다. 법률 자문을 따로 맡기기엔 비용도 일정도 부담이라, 위치정보지원센터나 국민신문고처럼 무료로 물어볼 수 있는 공공 창구에 질문을 보냈다. 아래 두 이야기는 그 답이 돌아오면서 생긴 일이다.
위치정보, 내 해석이 틀렸다
위치 기능은 처음 생각이랑 달라졌다. 처음엔 좌표를 서버로 안 보내고 휴대폰 안에서만 처리하면 위치기반서비스사업 신고(위치정보를 써서 서비스하는 사업자가 미리 하는 신고) 대상이 아니라고 봤다.
8월 초 위치정보지원센터 답변을 받고 이 판단을 고쳤다. 좌표를 서버로 안 보내도, 앱이 '이 사람이 이 장소에 다녀갔다'는 결과를 계정에 남기면 그 자체가 그 사람의 위치를 담은 정보가 될 수 있다는 거였다. 무료로 시험 삼아 공개하는 것도, 실제로 사람들에게 서비스를 시작하면 사업을 시작한 걸로 볼 수 있다는 것도 알게 됐다.

그래서 처음 공개하는 버전의 범위를 줄였다. 위치로 '정말 다녀갔는지' 확인하는 기능은 끄고, 근처에 왔다는 안내는 코스를 도는 화면을 쓰는 동안 휴대폰 안에서만 보여 주고, 방문 완료는 사람이 직접 누르게 바꿨다.
처음 공개하는 버전에서 같이 줄인 기능도 있다. 사진 AI 변환이랑 후기 자유 입력의 AI 분석을 껐고, 사진은 최대 세 장까지, 사진 속 위치 정보는 지우고 저장하게 했다.
개인정보 처리 기한, 법령을 다시 읽다
개인정보 처리방침도 비슷했다. 처리방침은 시행 전에 미리 공개(공고)해야 하는데, 기관 회신이 늦어져서 그 일정이 빠듯하던 8월, 회신을 기다리는 대신 법령 원문을 직접 읽었다. 처리방침에 책임자 이름 대신 담당 부서를 적을 수 있다는 건 조문의 "또는"에서 확인했다. 이용자가 '내 정보를 보여 달라'고 하면 10일 안에 답하고, '고쳐 달라·지워 달라·그만 써 달라'는 요청은 '지체 없이' 처리한다고 적었다.
9월 2일 개인정보보호위원회 회신을 받은 뒤 처리 기한과 담당 부서 표기를 고쳤다. 개인 운영자의 주소는 꼭 적지 않아도 된다는 답도 이때 받았다. 보여 달라·고쳐 달라·지워 달라·그만 써 달라, 네 가지 요청 모두 받은 날부터 10일 안에 결과를 알리는 걸로 통일했고, 이미 미리 공개한 처리방침에는 고쳤다는 안내를 붙였다.
정리하면 위치정보는 처음 판단을 철회했고, 개인정보는 처리 기한을 잘못 적었었다. 담당 부서를 적을 수 있다는 해석만 회신에서도 그대로 확인됐다.
이 일 뒤로 출처를 남기는 습관을 들였다. 기획서에 법에 관한 내용을 적을 때마다, 그게 내 해석인지, 법령 원문에서 확인한 건지, 기관에서 받은 답인지를 같이 적는다. 내 해석이라고 적힌 줄은 언제든 틀릴 수 있다는 표시다. 그래야 나중에 누가 봐도 어디까지 믿어도 되는지, 무엇을 다시 확인해야 하는지 바로 안다.