요청은 "세계의 아름다운 도서관을 지도에 모은 사이트"였다. 구조는 앞서 만든 그림 지도(ghmun.com/painting)와 같게 하되 별도 페이지로 두라는 지시가 붙었다. 왼쪽에 목록, 가운데 지도, 핀을 누르면 오른쪽에 사진과 설명이 열리는 화면이다. 완성본은 ghmun.com/library 에 있다.
100곳을 고르는 방식
그림 지도는 위키데이터에서 소장처를 질의로 뽑았지만, 도서관은 "아름답다"를 질의로 표현할 수 없다. 그래서 목록은 내가 직접 정했다. 트리니티 칼리지 롱룸, 아드몬트 수도원, 조아니나 도서관처럼 이름이 알려진 곳을 먼저 넣고, 스톡홀름 시립도서관, 헬싱키 오디, 가나자와 우미미라이 도서관 같은 현대 건축을 더했다. 국내는 별마당 도서관, 서울도서관, 해인사 장경판전, 국립중앙도서관, 의정부 미술도서관을 넣었다. 처음에는 34개 나라 80곳이었고 유럽이 46곳이었다. 유럽의 수도원·대학 도서관에 볼 곳이 몰려 있기도 하고, 내가 아는 곳이 유럽에 치우쳐 있기도 했다.
곳마다 id, 위키백과 제목, 한글 이름, 도시, 지은 해, 설계자, 입장 방식(무료·유료·투어·제한), 설명 두세 문장, "가기 전에" 한 줄을 JSON에 적었다. 이 문구는 내가 쓴 것이다. 입장료와 운영 시간처럼 바뀌는 정보는 숫자를 적지 않고 누리집에서 확인하라는 말만 남겼다.
좌표와 사진은 위키데이터에서
위키 제목을 위키데이터 항목으로 바꾸고 좌표, 대표 사진(P18), 한국어·영어 위키백과 제목을 받아 캐시 파일로 저장했다. 좌표는 대부분 그대로 쓸 수 있었다. 핀이 엉뚱한 곳에 찍히는 몇 곳만 직접 고쳤다. 별마당 도서관, 의정부, 보스턴 공공도서관, 해인사는 좌표를 손으로 넣었다.
문제는 사진이었다. 대표 사진이 수도원이나 궁전의 바깥 모습인 곳이 많았다. 아드몬트, 멜크, 마프라, 스트라호프, 클레멘티눔 같은 곳은 책장이 아니라 건물 전경이 나왔다. 도서관 지도에서 건물 외관이 나오면 쓸모가 줄어든다.
사진 후보를 늘어놓고 고르기
곳마다 위키미디어 공용에서 "도서관 이름 + interior"로 검색해 후보를 최대 8장 모았다. 사람이 일일이 파일 이름을 찾아 붙일 수는 없어서, 한 장에 10곳씩 번호를 붙인 비교표 이미지 8장을 만들어 내가 눈으로 보고 번호를 골랐다. 고른 번호는 picks.json에 파일 이름으로 옮겼다. 44곳의 사진을 실내 사진으로 바꿨다.
후보 검색이 틀리는 경우도 많았다. 마시 도서관 후보에는 19세기 입체 사진이 섞였고, 렌(Wren) 도서관 검색 결과에는 새 사진(wren은 굴뚝새이기도 하다)이 세 장 나왔다. 의정부 미술도서관은 후보 첫 장이 미국 볼티모어 피바디 도서관이었다. 이런 곳은 사진을 고르지 않고 비워 두었다. 지금 사진이 없는 곳은 의정부 한 곳이다.
후보가 외관뿐인 곳이 여덟 곳 남았다. 플로리안, 비블링엔, 메텐, 발트자센, 판논할마, 암브로시아나, 안젤리카, 보켄베르흐다. 검색어를 "이름 + library hall"이나 독일어·이탈리아어 이름으로 바꾸고 공용 카테고리를 직접 훑어서 일곱 곳의 실내 사진을 찾았다. 메텐은 1896년 흑백 사진이 유일해서 그걸 썼다. 이 일곱 곳을 더해 사진을 바꾼 곳은 51곳이다.
80곳에서 100곳으로
지도를 공개한 뒤 사용자가 20곳을 더 넣자고 했다. 지역 쏠림부터 줄이려고 후보를 골랐다. 중남미(메데인 에스파냐 도서관 공원, 멕시코 국립자치대학 중앙도서관, 아르헨티나 국립도서관)와 오세아니아(크라이스트처치 투랑가), 아시아(닝보 천일각, 기후 미디어 코스모스, 센다이 미디어테크, 싱가포르 국립도서관), 북미(로스앤젤레스 중앙도서관, 프로비던스 애서니엄, 시카고 맨수에토, 밴쿠버 중앙도서관)를 더했다. 유럽은 볼펜뷔텔, 겐트, 알텐부르크, 리버풀 픽턴 열람실, 체스터 비티, 살라망카, 체세나, 오슬로 도이크만을 넣었다. 지금은 유럽 54곳, 북미와 아시아 각 16곳, 중남미 6곳, 중동·아프리카 5곳, 오세아니아 3곳이고 40개 나라다.
처음 꼽은 후보 가운데 세 곳은 빠졌다. 파주 지혜의 숲은 위키데이터에 항목이 없고 공용에도 쓸 만한 사진이 없었다. 무사시노 미술대학 도서관도 마찬가지였다. 팀북투의 마마 하이다라 도서관은 필사본 사진만 있고 건물이나 서가 사진이 없었다. 사진 없는 카드가 이미 의정부 한 곳이라 더 늘리지 않았다. 대신 프로비던스 애서니엄, 멕시코 국립자치대학 중앙도서관, 센다이 미디어테크를 넣었다. 기후 미디어 코스모스는 위키데이터에 좌표가 없어서 OpenStreetMap에서 주소로 찾아 직접 넣었다. 아프리카에서는 알렉산드리아 말고 넣은 곳이 없다.
목록 순서
20곳을 더하면서 목록 순서도 다시 정했다. 파일에 적힌 순서가 곧 화면 순서였는데, 처음 80곳은 유럽 위주로 아무 기준 없이 쌓은 순서였다. 도서관마다 우선순위 값을 1, 2, 3으로 달았다. 1은 이름이 널리 알려졌고 들어가 볼 수 있고 사진이 좋은 곳으로 트리니티 칼리지, 아드몬트, 조아니나, 슈투트가르트 같은 27곳이다. 3은 사진이 외관뿐이거나 없는 곳, 일반인이 들어가기 어려운 곳, 거리가 멀거나 열람을 제한하는 곳으로 27곳이다. 래드클리프 카메라, 올 소울스, 캐나다 의회 도서관, 의정부 미술도서관이 여기 들어간다. 나머지 46곳이 2다. 새로 넣은 곳 가운데 살라망카, 체세나, 닝보, 투랑가, 기후, 오슬로, 리버풀은 1로 올렸다. 목록과 지도 아래 전체 목록 모두 1, 2, 3 순서로 나오고 같은 값 안에서는 이전 순서를 지킨다. 값은 내가 정한 것이라 기준이 주관적이다.
화면
- 목록과 핀. 왼쪽 목록과 지도의 핀이 같이 움직인다. 목록에서 누르면 지도가 그 핀으로 날아가고, 오른쪽 패널을 피해 핀이 남은 화면 가운데에 오도록 위치를 보정했다.
- 필터. 지역 6개, 시대 6개를 단추로 두었다. 시대는 고대, 중세·르네상스, 바로크, 19세기, 20세기, 21세기다. 21세기 28곳, 바로크 23곳, 20세기 22곳 순으로 많다.
- 입장 방식. 무료 54곳, 유료 26곳, 일반 관람 제한 14곳, 가이드 투어 6곳이다. 상세 화면에 태그로 보여 준다.
- 다녀온 곳. 체크하면 핀 색이 바뀌고 "다녀온 곳"만 모아 볼 수 있다. 처음에는 브라우저 localStorage에만 저장했고, 그림 지도와 같은 구글 로그인과 공유 Supabase 프로젝트를 붙여 library_visited 테이블 하나(도서관 id 한 행)로 동기화했다. 로그인하면 계정과 이 브라우저의 기록을 합치고 어느 쪽도 지우지 않는다. 로그인하지 않은 사람에게는 서버 요청이 가지 않는다.
- 사진 저작자. 사진가와 라이선스를 상세 화면 아래와 지도 아래 카드에 표시한다.
- 지도 아래 전체 목록. 지도 밖에도 지역별로 100곳의 사진과 설명을 모두 HTML로 넣었다. 지도 스크립트가 없어도 내용이 읽힌다.
처음 화면에서 지도의 확대 버튼이 왼쪽 목록 패널 위에 겹쳐 있었다. 데스크톱에서는 오른쪽 아래, 휴대폰에서는 오른쪽 위로 옮겼다.
공개 뒤에 고친 것
100곳이 된 뒤 사이트를 스스로 점검해서 세 가지를 고쳤다.
- 사진 크기. 목록 120, 카드 640, 상세 900, 확대 1600으로 요청하고 있었다. 그림 지도에서 임의 크기 요청이 429(요청 과다)로 돌아온 적이 있어서, 위키미디어가 권하는 표준 크기인 120, 500, 960, 1280으로 맞췄다. 카드는 640에서 500으로 줄었다.
- 묶음 핀. 유럽에 54곳이 몰려 처음 화면에서 핀이 한 덩어리였다. Leaflet.markercluster를 붙여 가까운 핀을 숫자 원으로 묶었다. 처음 화면에는 묶음 13개와 낱개 20개가 보인다. 목록에서 도서관을 누르면 지도가 날아간 뒤 묶음 안에 있던 핀도 펼쳐지게 했다. 묶음에 든 곳이 모두 다녀온 곳이면 원이 붉게 바뀐다.
- 카드 사진 출처. 상세 화면에는 사진가와 라이선스가 있었지만 지도 아래 카드 100장에는 없었다. 빌드할 때 공용에서 작성자와 라이선스를 한꺼번에 받아 두고(tools/library/credits.py), 카드와 상세 화면에 정적으로 넣었다. 99장 모두 라이선스가 확인됐다. CC BY-SA 4.0이 35장, 3.0이 23장으로 가장 많고 CC0와 퍼블릭 도메인이 16장이다. 상세 화면은 이제 요청 없이 이 값을 쓴다.
영어판
공개 뒤 영어판(ghmun.com/en/library)을 추가했다. 도서관마다 영어 이름, 도시, 설계자, 설명, 팁을 en_1.json과 en_2.json에 따로 적었다. 한국어 설명을 한 문장씩 옮기되 한국 독자를 전제한 표현은 영어 독자 기준으로 풀었다. 지역, 시대, 입장 방식 이름과 나라 이름은 표로 바꿨다. 화면 문구는 한국어 템플릿(page.html)을 하나만 두고 빌드할 때 문구 표(build.py의 UI_EN)로 치환해서 영어 페이지를 만든다. 템플릿을 둘로 나누지 않은 것은 기능을 고칠 때 한쪽만 고치는 일을 막으려는 것이다. 문구 표에 없는 한국어 조각이 템플릿에 생기면 빌드가 멈춘다. 영어 화면에 남는 한글은 사진 파일 이름 하나(별마당 도서관 사진)뿐이다. 영어판에서는 한국어 위키백과 링크를 숨겼고, '다녀온 곳' 기록은 한국어판과 같은 저장소와 같은 계정을 쓴다. 영어 설명도 한국어와 같은 수준으로만 확인했다.
한계
- 처음 80곳의 설명과 "가기 전에" 문구를 위키백과 도입부와 대조해 13곳을 고쳤다. 나중에 더한 20곳은 위키백과 본문에서 건축가, 연도, 숫자를 찾아 확인하고 다섯 곳의 문장을 고쳤다. 올 소울스 도서관의 해시계가 홀 안이 아니라 바깥에 있다는 것, 영국 국립도서관 소장 자료가 "1억 7천만"이 아니라 2억 점에 가깝다는 것 같은 오류였다. 도입부에 없는 세부 숫자와 인명은 전부 확인하지 못했다. 건축가나 연도가 틀린 곳이 있을 수 있다.
- 100곳은 고른 목록이다. 빠진 도서관이 많다.
- 입장 방식은 쓸 당시 기준이다. 예약제로 바뀌거나 공사로 닫힌 곳이 있을 수 있다.
다음에 할 수 있는 것
- 설명을 위키백과 본문 전체와 대조해 남은 오류 고치기.
- 사진이 없는 의정부 미술도서관의 사진 찾기.
- 개별 도서관마다 정적 페이지를 만들어 검색 결과에 한 곳씩 노출되게 하기.