본문 바로가기

Function

Urban Density Profiler : 경계 너머 도시 들여다보기

나고야와 대구

 

일본의 나고야에 처음 갔을 때, 나고야 역 지하상가에서 마주쳤던 엄청난 인파에 놀란 적이 있다. 도쿄도 오사카도 아닌데 여긴 어떻게 사람이 이렇게 많을까 하는 생각을 했다. '나고야 인구'로 찾아보니 230만명이란다. 우리나라로 치면 대구(240만)와 비슷한 수준이다. 그렇게 비교해보니 더 이해가 가지 않았다. 인구규모가 비슷함에도 불구하고, 평일 나고야 역과 그 주변의 인파는 주말의 대구 동성로에 비할 바가 아니었다.

 

지도로 보니 나고야는 아이치현의 일부였다. 물론 대구도 경상북도에 포함되어 있지만, 주변이 산지인 탓에 도시가 연속적이지는 않다. 나고야와 아이치현은 마치 한 덩어리 같다. 인구도 750만명으로, 면적이 더 넓은 대구경북지역보다 250만명 더 많다. 

그러니까, 나고야는 대구에 비해 엄청난 배후 인구를 지닌 도시이고, 평일의 나고야 에서 목격한건 그 출퇴근 인구의 흐름이 만들어내는 거대한 인파였던 셈이다.

 

 

서울과 도쿄

 

서울이 큰가 도쿄가 더 큰가? 

이겨야 하는 힘자랑같은 약간 유치한 이 질문은 의외로 진지하게 다루어질 때가 많다.

'서울과 도쿄는 비슷하게 1000만이다'

'도쿄도는 1400만인데?'

'그럼 수도권과 비교해야지. 한국 수도권은 2600만이다!'

 

일본의 경우 수도권과 견주려면 도쿄, 가나가와, 사이타마, 치바를 합쳐 봐야한다. 그렇게 되면 3600만명이다.

 

 

Urban Density Profiler

 

도시의 규모를 비교하고 싶었을 뿐인데 행정구역의 크기까지 신경써야 한다니. 그냥 그런 구분 없이 한번 중심과 반경으로 펼쳐보고 싶었다. 그래서 만들게 된게 Urban Density Profiler다.

 

위의 지도에서처럼 중심지를 클릭하면 설정해 둔 반경에 따라 인구의 분포를 볼 수 있다. 2개 이상의 도시를 클릭한 후 비교해서 볼 수 있다.

 

같은 데이터로 PMTiles 형식의 타일맵도 만들었다. 타일맵을 켜서서 지도 전체에 격자 단위로 인구를 올려볼 수도 있다. 줌 레벨에 따라 집계하는 격자 크기가 달라진다. 연도별로 인구 밀도의 변화를 인터랙티브하게 탐색할 수 있다.

 

 

그럼 데이터 이야기부터 다시 시작해보자.

 

데이터 : WorldPop Population Count

https://www.worldpop.org/

 

데이터는 WorldPop에서 받았다. 여러가지 데이터 중 Population Count다. 경위도 0.0008333도로 분할한(100m 격자) 면적에 센서스 인구를 배분했다. 여기서 사용한 데이터는 그걸 다시 1km로 집계해서 배포된 데이터다.

 

Population Count는 2000~2020년의 한 그룹과 2015~2030년의 한 그룹으로 구분되어 있다.

https://www.worldpop.org/methods/

 

2000-2020년 데이터는 토지 피복 기준으로 배분한 탓에 사람이 살지 않는 곳에도 인구가 할당되었다. 2015-2030년 데이터는 단순히 면적으로 균등배분하지 않고, 실제 분포 가능성이 있는 곳에만 인구를 배분했다고 밝혀져 있다. 랜덤포레스트로 배분 가중치를 학습 후 배분했다고 한다.

 

물론 이 사이트에서도 자체적인 탐색 도구를 제공한다.

https://www.portal.worldpop.org/demographics/

 

 

 

GHSL 데이터도 인구 데이터로 많이 사용된다.

 

GHSL 데이터 역시 시각화된 결과물을 찾아볼 수 있다.

https://pudding.cool/2018/10/city_3d/

 

 

https://luminocity3d.org/WorldPopDen

 

 

 

그런데 중심과 반경을 설정해서 비교할 수 있는 사이트는 없었다.

그래서, 만들어보기로 했다. 조정을 한참 해야하긴 했지만, 대부분은 Claude Code로 작업했다.

 

 

데이터 가공&아키텍쳐

 

WorldPop에서 받은 GeoTIFF가 원본이다. 

Qgis에 올리면 아래와 같다. 단일 밴드 파일이다.

 

 

간단히 COG(Cloud Optimized GeoTiFF)로 변환하여 AWS S3에 올렸다.

COG는 전체를 512x512로 분할하여 요청한 지역만 다운받을 수 있도록 한다. 타일 한 장은 1MB 안팎의 용량이다. 액티브 서버 없이 AWS S3, CloudFlare R2 등에 올려서 Http Range Request로 받을 수 있다.

 

 

앞서 밝혔듯, 중심점과 반경조회용 GeoTiFF와는 별개로 각 연도의 원본 래스터 파일을 PMTiles로 변환하였다.

전세계를 줌 레벨에 따라 xyz 타일로 만들면 줌 레벨에 따라 수만장에서 수십만장 이상의 작은 파일들이 생겨난다. PMTiles 역시 이 파일들을 하나의 파일에 이어붙여 앞 단의 인덱스를 통해 Http Range Request를 통해 받을 수 있다. COG와 마찬가지로 정적 파일 서버에만 올리면 접근 가능하다.

 

이렇게 만든 파일들을 각각 AWS S3와 CloudFlare R2에 올렸다.

AWS S3의 파일은, 사용자가 요청하면 AWS Lambda를 통해 집계 후 crop해서 돌려주게 된다. 512x512 단위의 청크들은 AWS 서버에서만 오가고, 사용자는 필요한 영역만 효율적으로 받을 수 있다. CloudFlare R2에 올라간 타일맵은 CloudFlare 도메인을 통해 CDN을 거치게 된다. 받은 파일들은 캐시될 확률이 높아진다. 즉, 같은 파일을 요청할 경우 사용자는 추가 과금 없이 빠르게 받을 수 있다.

 

 

클라이언트 시각화는 MapLibre를 배경지도로 두고 컨트롤러를 설정했다.

Deck.gl의 ColumnLayer로 지도 위의 막대를 표시했다. Echart의 Scatterplot으로 카드섹션의 원형 플롯을 했다. 위도에 따라서 전체적인 원의 크기 및 형상과 개별 plot의 가로세로 비율을 재조정해주어야 한다. 막대 차트 역시 Echarts를 이용했다.

 

 

 

밀도 산정

 

거리별 인구 밀도, 즉 위의 그림 우측 상단에 보이는 막대 그래프는 좌측에서 보이는 도넛 영역의 인구을 도넛 영역의 면적을 나누어 구했다. 바다가 주변의 절반인 부산 같은 경우에는 분모에서 바다 면적을 제외했다. 실질적으로 사람들이 살 수 있는 영역을 분모로 산정하여 밀도를 계산했다. 다행히도 원본 래스터 파일에서 바다는 -99999 등 특별한 값으로 표기되어 있었다.

 

밀도 산정에서 분모를 좀 더 치밀하게 구하고 싶다면 DEM 데이터를 구해서 적절한 경사도 이하만 취할 수도 있다.

 

위의 그림에서 붉은 부분은 경사도 10% 이상인 산지에 해당한다.

 

 

아래 연구에서는 논지에 있어 중요한 부분인 밀도를 어떻게 구했는지 명시하고 있다. 습지와 빙하 같은 곳들은 제외했는데, 산지는 특별히 구분하고 있지 않다. 

https://ar5iv.labs.arxiv.org/html/2111.02112

 

조건 설정에 따라 밀도가 달라질 수 있으므로 데이터 처리에 있어 변수의 엄밀한 설정은 무척 중요하다.

 

 

 

그럼 이제 본격적으로 탐색해보자.

 

 

서울 vs 도쿄

 

서울과 도쿄는 사실 비교하는데 있어 좀 차이가 난다. 위의 그림은 반경을 20km, 50km, 100km로 조정해가면서 밀도 분포를 살펴본 결과다. 중심점은 각각 서울역과 도쿄역으로 두었다.

 

반경 20km로 두었을 때 두 도시가 약간 비슷하다. 서울은 1300만, 도쿄는 1350만이다. 그런데 반경을 50km로 넓히고 나면 서울은 2450만, 도쿄는 3330만이다. 100km로 두면 충청도(북으로는 북한!)까지 포함되는데 이미 '서울'과 수도권은 끝난 뒤다. 그런데 도쿄의 원형 지도를 보면 아직 인구의 연속이 계속되어 보인다. 그래서 서울은 2950만, 도쿄는 4120만이다. 

 

재밌는 점은 피크는 서울이 더 높다는 사실이다.  6~9km 구간에서 피크가 나타나는데, 서울역을 기점으로 노원구와 강서구의 주거밀집지역이 한꺼번에 겹쳐서 피크를 높이는 데 한 몫 한 듯 싶다. 반면 도쿄는 꼬리가 두텁고 길다. 광활한 평지를 바탕으로 인구가 널리 퍼져 있다.

 

 

대구 vs 나고야

 

이번에는 대구와 나고야. 20km 반경을 보면 대구는 이미 도시가 끝나버리지만 나고야는 마치 반칙을 써서 대구보다 확대한 것처럼 보인다. 제곱킬로당 5000명 인구를 표시한 주황색이 계속되어 보인다. 역시 이번에도 피크는 우리나라 도시인 대구가 높지만, 나고야는 꼬리가 길고 두텁다.

50km 반경 설정에서도 같은 맥락으로 볼 수 있다. 15~18km 거리에서는 268명과 1536명으로 나고야가 5.7배나 되는 밀도를 보여준다.

 

사실 이렇게 비교하는게 처음부터 무리가 아니었다 싶다. 아래 그림처럼 자연적 조건도 다르다.

 

우리나라의 경우 서울, 대구, 부산 모두 평지의 규모가 작다. 서울과 부산은 곳곳이 산지다. 그나마 대구는 산지에 둘러싸인 분지라고는 하지만 같은 스케일로 비교해도 일본의 오사카, 나고야, 도쿄에 비할 바가 아니다.

 

 

다시 우리나라로

 

이번에는 우리나라 대도시들을 보자. 30km 반경이다. 각각 서울역, 대전역, ()광주역, 대구역, 울산시외버스터미널, 부산역을 중심으로 두었다.

 

서울과 부산을 제외하면 10km 안팎의 거리에서 도시가 끝난다. 산지 때문일 수도 있고, 지방도시들이 여러가지 이유로 꾸준히 성장하지 못했던 이유도 없진 않을 것이다.

 

 

 

만약 좀 더 제대로 된 분석을 하려고 한다면 '어디를 중심지로 설정할 것인지'도 신중해야 한다.

아래 그림은 똑같은 부산에서 약간씩 중심지를 다르게 찍어봤다.

거리로부터 밀도 그래프를 보면 같은 도시의 밀도 분포가 다르게 해석된다. 피크가 높거나 없어 보이고, 꼬리가 급격하게 떨어지기도, 혹은 두텁고 길게 지속되는 것처럼 해석이 되기도 한다.

 

 

 

요새 우리나라는 5극 3특이라고 해서 부산, 대구, 대전, 광주 주변을 대도시권으로 묶으려고 한다.

 

자주 비교되는 일본이나 영국 맨체스터 주변을 보면 인구 밀도 분포가 많이 다르다는 점을 한 눈에 알 수 있다. 그리고 어찌 보면 인구 분포는 결과일 수도 있으므로 교통 수단의 연결이나 기업의 분포도 함께 보아야 한다. 

 

 

 

아래 데이터는 위와는 다른 국가데이터처 SGIS의 100m 격자 인구를 1km로 집계한 결과다. 

군산, 목포, 영주, 서산 등 우리나라 중소도시들의 2000년과 2023년을 비교해봤다.

중심지의 인구가 대부분 줄어들었다. 반경 5km도 되지 않아 도시가 대부분 끝나는데, 그 바깥 범위에서는 23년간 인구가 절반 이하로 줄어들었다. 중소도시들은 주변 비도시 지역 사람들이 드나드는 상업과 교통의 중심지가 되기도 한다. 지방소멸이 심각한 문제인 요즈음, 과거와의 밀도 비교를 통해 문제가 얼마나 심각한지 한 눈에 볼 수 있다.

 

세계 대도시

 

마지막으로 세계의 대도시들을 비교해봤다.

원형의 밀도 지도와 거리에 따른 막대 그래프는 그 자체로 도시의 프로파일이 된다.

인도의 다카는 온통 주황색이다. 1제곱킬로미터에 5000명 이상이 거주하는 지역이 반경 100km이상을 뻗어나가 있다. 소말리아의 모가디슈는 중심지 밀도는 매우 높지만 도시가 급격하게 끝난다. 마닐라는 중심지 인구가 최대다. 거리에 따른 밀도도 쉽사리 줄어들지 않는다. 서유럽 국가의 수도들인 파리와 런던은 그에 비하면 얌전한 수준이다. 그래도 제곱킬로미터당 100명 이상 거주하는 지역이 반경 100km를 가득 채운다.

 

 

도시 규모와 생산성

 

도시 연구들은 당연히 '어디가 더 큰가'하는 1차원적 질문을 넘어선다. 

TFP(Total Factor Productivity)는 같은 노동과 자본을 투입했을 때 얼마나 더 많이 생산하는가(GDP)를 나타내는 효율성 지표다. 

그런데 눈여겨 볼 것은 최근의 두 연구에서 다핵화로 도시 규모가 일정 정도 이상으로 증가하면 생산성이 낮아진다는 주장을 하고 있다는 점이다. 잘 짜여진 대중교통망 없이 여러 도시를 잇는 작업은 머나먼 이후의 성공으로 향해 내딛는 첫 발자국일 수도 있지만, 실패할 가능성이 큰 정책일 수도 있다. 데이터가 충분한 만큼 연구를 통해 신중하게 접근해야 하지 않을까.

 

https://www.frontiersin.org/journals/environmental-science/articles/10.3389/fenvs.2025.1545346/full

 

https://lirias.kuleuven.be/server/api/core/bitstreams/496b2022-7079-49a1-8954-40a91693b57c/content

 

 

 

이번 작업은 나고야에서 느꼈던 도시의 엄청난 활력에서 시작되었다.

그런데 알고 보니 나고야도 일본에서는 쇠퇴가 시작된 도시로 평가받는다.

https://www.nli-research.co.jp/report/detail/id=71100?pno=2&site=nli

2021년 한 해 동안 도쿄 인구는 8만명이 늘었는데 나고야는 1만명이 줄어들었다고 한다.

산업 도시로 성장한 나고야의 제조업 쇠퇴, 도쿄 중심으로 전국 인구의 집중 등 일본 역시 여러가지 문제를 겪고 있는 것 같다. 

 

 

데이터

 

여기저기서 좋은 데이터가 많이 개방되고 있으므로, 전 세계 도시를 같은 종류의 데이터로 분석할 수 있다.

여기서 소개한 인구  데이터, OpenStreetMap에서 추출 가능한 도로망, 교통 표준 데이터 형식 중 하나인 GTFS(국내 GTFS는 한국교통연구원의 KTDB에서 받을 수 있다), 토지피복 위성 데이터, DEM 등이 이미 전세계 기준으로 공개되어 있다.

 

물론 데이터를 하나하나 정리하는 것은 아무리 AI가 발달했다고 해도 시간과 노력이 많이 필요하다.

그래도 비슷한 연구를 수행하기 위해 데이터 가공 및 시뮬레이션에 소요되는 시간들은 LLM의 도움으로 드라마틱하게 줄어들었다.엄두가 나지 않던 작업들도 시작해 볼 수 있다.

 

물론, 목표를 세우고 판단하는 일은 도메인 지식을 습득한 사람의 몫이다.

아니, 그렇게 남겨두어야 한다.

 

 

아래의 사이트에서 직접 조작해 볼 수 있다.

 

 

Urban Density Profiler

Explore and compare urban population density profiles worldwide with interactive maps and charts.

udens.vw-lab.com