상권은 매장이 고객을 끌어오는 지역입니다. 상권분석에서 가장 빠른 방법은 원을 그리는 것입니다. 매장을 고르고 반경 5km를 정한 뒤 그 안의 인구를 세면 됩니다. 이 방법은 가장 부정확하기도 합니다. 고객은 도로를 따라 운전하고, 도로망은 원 모양으로 뻗어 있지 않기 때문입니다.
그 차이가 얼마나 큰지 측정했습니다. 리옹, 뮌헨, 밀라노의 슈퍼마켓 60곳에 대해 MapAtlas Isochrone API로 차로 5분, 10분, 15분 안에 닿는 지역을 요청하고, 100m 인구 격자로 각 도형 안의 거주 인구를 셌습니다. 반경 5km 원 안의 인구는 중앙값 기준으로 차로 10분 안에 실제로 닿는 인구의 1.7배였습니다. 입지 선정에서 더 큰 문제는 원이 매장 순위를 다른 순서로 매겼다는 점입니다.
데이터는 유럽 세 도시에서 측정한 것이고, 방법은 여러분의 매장 목록에 그대로 적용할 수 있습니다. 이 글에서는 상권이 무엇인지 설명하고, 세 도시를 나란히 보여 주고, 수치를 제시한 뒤, 차량 도달권 상권을 직접 그리는 데 필요한 API 요청 두 가지로 마무리합니다.
상권이란 무엇인가
상권(catchment area, trade area)은 한 입지가 고객 대부분을 끌어오는 지리적 범위입니다. 소매점, 은행, 병원, 헬스장, 외식 프랜차이즈가 모두 같은 질문에 답하려고 상권을 씁니다. 입지에 잠재 고객이 얼마나 있는지, 그 고객을 나눠 갖는 경쟁 점포는 몇 곳인지, 새 매장이 기존 매장의 고객을 가져가지는 않는지입니다.
상권을 그리는 일반적인 방법은 세 가지입니다.
- 반경. 입지를 중심으로 일정한 직선 거리의 원을 그립니다. 빠르지만 도로, 하천, 철도를 반영하지 않습니다.
- 이동 시간. 등시선(아이소크론, isochrone)으로 그린 도달권입니다. 차, 도보, 자전거로 정해진 시간 안에 닿을 수 있는 모든 지점을 도로망 위에서 계산합니다. 이 글에서 검증한 방법입니다.
- 실측. 멤버십 카드, 배송 주소, 휴대전화 위치 패널에서 얻은 실제 고객의 거주 지역입니다. 가장 정확하지만 매장을 연 뒤에야 얻을 수 있습니다.
이동 시간 상권은 보통 여러 구간으로 나눕니다. 매장에 가까운 1차 상권이 고객 대부분을 공급하고, 2차 상권은 그보다 적은 고객을, 가장자리의 3차 상권은 가끔 찾는 방문객을 공급합니다. 이번 측정에서는 차로 5분, 10분, 15분을 썼습니다.
상권은 서로 겹치기도 합니다. 슈퍼마켓 세 곳의 10분 상권에 모두 들어가는 가구는 지출을 세 곳에 나눕니다. 이 분배를 모델링하는 고전적인 방법은 데이비드 허프(David Huff)가 1964년에 발표한 중력 모델, Defining and Estimating a Trading Area입니다. 이 모델에서 어떤 매장을 선택할 확률은 매장 규모가 클수록 높아지고 이동 시간이 길수록 낮아집니다. 이 모델은 어떤 변형이든 이동 시간을 입력으로 요구하므로, 차량 도달 시간에서 출발할 이유가 하나 더 생깁니다.
측정한 내용
리옹, 뮌헨, 밀라노 도심에서 15km 안에 있는 OpenStreetMap의 슈퍼마켓을 모두 모은 뒤, 도심에서 8km 안에 있는 매장 중 도시마다 20곳을 무작위로 뽑았습니다. 각 매장에 대해 다음을 계산했습니다.
- 차량 도달권 폴리곤: MapAtlas Isochrone API로 차로 5분, 10분, 15분 폴리곤을 2026년 9월 30일에 요청했습니다. 출발 시각을 지정하지 않았으므로 실시간 교통은 반영되지 않았습니다.
- 원 두 개: 같은 지점을 중심으로 한 고정 반경 5km 원, 그리고 해당 매장의 10분 폴리곤과 면적이 정확히 같은 원입니다.
- 도형 안의 거주 인구: 유럽연합 집행위원회 공동연구센터(JRC)의 GHS-POP R2023A 인구 격자에서 100m 셀, 2025년 추정치를 썼습니다.
- 도형 안의 경쟁 점포: OpenStreetMap 목록에 있는 다른 슈퍼마켓입니다.
아래 지도는 도시마다 매장 한 곳을 보여 줍니다. 10분 도달 인구가 해당 도시의 중앙값에 가장 가까운 매장입니다.
10분 폴리곤은 모양이 들쭉날쭉합니다. 빠른 도로를 따라 길게 뻗어 나가고, 도로망이 느리거나 끊긴 곳에서는 안쪽으로 움푹 들어갑니다. 세 폴리곤 모두 점선 원과 닮지 않았고, 세 도시 모두에서 원은 10분 폴리곤이 닿지 않는 인구 밀집 지역까지 포함합니다.
반경 5km 원은 인구를 1.7배 많이 셉니다
| 도시 | 매장 수 | 10분 도달권 면적(중앙값) | 5분 내 거주 인구 | 10분 내 | 15분 내 | 반경 5km 원 내 | 원 대비 10분 인구 비율 |
|---|---|---|---|---|---|---|---|
| 리옹 | 20 | 33 km² | 46,000 | 261,000 | 617,000 | 566,000 | 45% |
| 뮌헨 | 20 | 50 km² | 71,000 | 372,000 | 920,000 | 586,000 | 65% |
| 밀라노 | 20 | 44 km² | 97,000 | 428,000 | 941,000 | 672,000 | 63% |
| 전체 60곳 | 60 | 44 km² | 67,000 | 348,000 | 807,000 | 628,000 | 60% |
모든 값은 각 행에 속한 매장들의 중앙값입니다. 마지막 열은 매장별 비율의 중앙값입니다.
이 도시들에서 차로 10분이면 약 44km²를 덮습니다. 반경 3.7km 원과 같은 면적입니다. 반경 5km 원은 79km²를 덮으므로 더 많은 사람을 세고, 중앙값 기준으로 1.7배를 셉니다. 이 비율은 매장마다 크게 다릅니다. 원 안 인구 중 10분 안에 매장에 닿을 수 있는 비율은 21~87%였습니다.
실제 문제는 이 편차입니다. 리옹 도심에서 약 6km 떨어진 슈퍼마켓 두 곳이 이를 보여 줍니다. 한 곳은 인구가 밀집한 동쪽 교외 빌뢰르반(Villeurbanne)에 있습니다. 다른 한 곳은 도시 북서쪽, 몽도르(Monts d'Or) 구릉 기슭의 리모네스트(Limonest)에 있습니다. 원 기준으로는 첫 번째 매장이 431,000명, 두 번째 매장이 168,000명으로 2.6배 차이입니다. 차로 10분 기준으로는 첫 번째 매장이 347,000명, 두 번째 매장이 36,000명에 닿아 9.6배 차이입니다. 리모네스트 주변의 원은 리옹의 인구 밀집 지역까지 들어가지만, 차로 10분 도달권은 그 지역에 거의 닿지 않습니다.
면적을 맞춘 원도 모양이 다릅니다
타당한 반론이 있습니다. 반경 5km 원이 단순히 너무 크다는 것입니다. 그래서 매장마다 10분 폴리곤과 면적이 정확히 같은 원도 그렸습니다.
그래도 모양이 결과를 바꿉니다. 중앙값 기준으로 면적이 같은 원은 매장이 10분 안에 닿는 인구의 14%를 놓쳤고, 원 안 인구의 15%는 10분 안에 매장에 올 수 없었습니다. 두 도형이 겹치는 면적은 합친 면적의 64%였습니다. 하천과 언덕이 도로망을 끊는 리옹에서는 원이 도달 가능한 인구의 20%를 놓쳤습니다. 도로망이 더 평탄하고 규칙적인 뮌헨과 밀라노에서는 각각 13%와 12%였습니다.
매장 한 곳만 본다면 15% 오차는 받아들일 만할 수 있습니다. 후보 입지를 비교할 때는 이 오차가 문제가 됩니다. 오차의 크기가 입지마다 다르기 때문입니다.
원은 입지 순위를 다르게 매깁니다
입지 선정은 순위 문제입니다. 여러 후보 중 잠재 고객이 가장 많은 곳을 찾는 일입니다. 도시마다 매장 20곳의 순위를 두 번 매겼습니다. 한 번은 반경 5km 원 안의 인구로, 한 번은 차로 10분 안의 인구로 매겼습니다.
- 순위 상관계수(Spearman)는 리옹 0.70, 뮌헨 0.70, 밀라노 0.85였고, 60곳 전체로는 0.64였습니다.
- 도시별 상위 5곳: 원과 차량 도달 시간이 함께 고른 매장은 리옹에서 5곳 중 2곳, 뮌헨에서 2곳, 밀라노에서 3곳뿐이었습니다.
- 최고 입지: 차량 도달 인구가 가장 많은 매장은 원 기준 순위로 리옹에서 4위, 뮌헨에서 6위였습니다. 두 방법이 같은 매장을 고른 곳은 밀라노뿐이었습니다.
원 안 인구로 후보 입지를 추리면 가장 좋은 입지 일부가 탈락합니다.
상권 안의 경쟁 점포
같은 도형으로 입지 선정의 두 번째 질문, 즉 시장이 얼마나 붐비는지에도 답할 수 있습니다. 중앙값 매장의 차로 10분 도달권 안에는 OpenStreetMap 목록의 다른 슈퍼마켓이 약 108곳, 반경 5km 원 안에는 167곳 있었습니다. 원은 수요를 부풀리는 만큼 경쟁도 부풀립니다. 두 오차는 서로 상쇄되지 않습니다. 오차가 나타나는 매장이 서로 다르기 때문입니다.
이 숫자에는 도심의 소형 매장부터 대형 매장까지 슈퍼마켓으로 태그된 모든 점포가 들어 있으므로, 밀도 지표로 읽으세요. 실제 시장 점유율을 추정하려면 경쟁 점포마다 규모와 각 가구까지의 이동 시간으로 가중치를 주세요. 허프 모델이 하는 일이 바로 이것입니다.
차량 도달권 상권을 그리는 방법
두 단계입니다. 폴리곤을 요청한 다음, 그 안에 있는 것을 셉니다.
1. 등시선을 요청합니다. 입지마다 POST 요청 한 번으로 모든 구간을 한꺼번에 받습니다.
curl -X POST "https://gateway.mapmetrics-atlas.net/isochrone/?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"locations": [{"lat": 45.7640, "lon": 4.8357}],
"costing": "auto",
"contours": [{"time": 5}, {"time": 10}, {"time": 15}],
"polygons": true
}'
응답은 등시선마다 폴리곤 하나를 담은 GeoJSON FeatureCollection입니다. 고객 대부분이 걸어서 오는 도심의 매장이라면 "costing": "pedestrian"을 쓰세요.
2. 안에 있는 것을 셉니다. 각 폴리곤을 인구 데이터와 교차시킵니다. GHS-POP 같은 인구 격자, 센서스 집계구, 또는 자체 고객 주소를 쓸 수 있습니다. 격자를 쓴다면 중심점이 폴리곤 안에 들어가는 셀을 합산합니다. 센서스 집계구를 쓴다면 각 구역의 인구를 폴리곤 안에 들어가는 면적 비율대로 나눕니다. 경쟁 점포 목록에도 같은 작업을 합니다.
방법 자체보다 결과를 더 크게 바꾸는 선택이 세 가지 있습니다.
- 매장 유형별 시간 구간. 같은 거리에 있는 편의점과 가구점은 상권이 크게 다릅니다. 일상 장보기에는 짧은 구간을, 가끔 찾는 쇼핑에는 긴 구간을 쓰세요.
- 교통. 이번 폴리곤은 실시간 교통 없이 일반적인 도로 속도를 씁니다. 저녁 퇴근 시간대에 손님이 몰리는 매장이라면 그 시간대의 차량 도달권은 더 작습니다.
- 이동 수단. 도심에서는 많은 고객이 걷거나 자전거를 탑니다. 어느 쪽을 기준으로 삼을지 정하기 전에 도보 등시선과 차량 등시선을 비교하세요.
상권분석 사이트나 상권분석 서비스를 찾고 있다면 주소 하나로 먼저 시험해 보세요. 이동 시간 지도가 같은 등시선을 브라우저에서 그리고, 반경 지도가 비교용 원을 그립니다. 매장 목록 전체에는 위의 두 단계를 매장마다 반복하면 됩니다.
방법과 한계
- 매장: 도시 중심에서 15km 안에 있는 OpenStreetMap의
shop=supermarket노드와 웨이 전체(리옹 287곳)에서, 8km 안에 있는 매장 중 고정 시드로 20곳을 무작위 추출했습니다. OpenStreetMap의 소형 점포 수록 정도는 지역마다 다르므로, 일부 지역의 경쟁 점포 수는 하한값입니다. - 차량 도달권: MapAtlas Isochrone API, costing
auto, 등시선 5분, 10분, 15분이며, 2026년 9월 30일에 출발 시각 없이 요청했습니다. 일반적인 도로 속도를 반영하므로 출퇴근 시간대 정체와 주차 시간은 들어 있지 않습니다. - 인구: GHS-POP R2023A, 2025년 기준, World Mollweide 등적 투영의 100m 셀입니다. 2025년 값은 센서스 데이터와 시가지 면적으로 모델링한 추정치이며, 거주지 기준으로 인구를 세므로 사무실 근무자 같은 주간 인구는 포함되지 않습니다. 셀의 중심점이 도형 안에 있으면 그 셀을 셉니다.
- 원: 매장 좌표를 중심으로 한 측지 원입니다. 면적이 같은 원은 해당 매장의 10분 폴리곤과 면적이 같습니다.
- 표본: 세 도시 60곳은 오차의 크기와 방향을 보여 주기에는 충분하지만, 다른 도시에 쓸 보정 계수를 내기에는 적습니다. 같은 방법은 어떤 입지 목록에서든 몇 분이면 실행됩니다.
데이터 다운로드: catchment-area-analysis-2026-09-30.csv (매장 60곳, 매장당 한 행, 차량 도달권 면적, 구간별 및 원별 인구, 경쟁 점포 수 포함. 매장 위치 © OpenStreetMap 기여자, ODbL. 인구 GHS-POP R2023A, CC BY 4.0. 파생 수치 CC BY 4.0 MapAtlas)
스크립트와 원본 결과는 연구 아카이브의 scripts/seo/blog-keyword-research/catchment-area-analysis.py와 docs/blog-keyword-research/catchment-area-analysis-2026-09-30.json에 있습니다.
관련 글
폴리곤을 만드는 방법은 등시선이란 무엇인가에서 설명합니다. 허프 모델처럼 모든 가구와 모든 매장 사이의 이동 시간이 필요할 때는 거리 행렬을 쓰세요. 매장 찾기 기능 구축 가이드는 같은 데이터를 고객 쪽에서 보여 줍니다.
Isochrone API는 이 글에서 쓴 차량 및 도보 도달권 폴리곤을 반환하고, GeoEnrich API는 어떤 주소에든 주변 관심 지점(POI)과 동네 정보를 더합니다.
자주 묻는 질문
소매업에서 상권이란 무엇인가요?
상권(catchment area, trade area)은 매장, 지점, 서비스가 고객 대부분을 끌어오는 지리적 범위입니다. 보통 입지를 중심으로 이동 시간 기준으로 그립니다. 예를 들어 차로 10분 안에 사는 모든 사람을 상권으로 보고, 이를 다시 1차 상권, 2차 상권, 3차 상권으로 나눕니다. 기업은 상권으로 입지의 잠재 고객 수와 그 고객을 나눠 갖는 경쟁 점포 수를 추정합니다.
상권분석은 어떻게 하나요?
입지 주변에 영역을 그린 다음 그 안에 있는 것을 셉니다. 가장 간단한 영역은 반경이 고정된 원입니다. 더 나은 영역은 경로 엔진이 계산한 차량 또는 도보 도달권 폴리곤(등시선, isochrone)입니다. 도로망을 따라가기 때문입니다. 그다음 인구 격자나 센서스 집계구로 폴리곤 안의 거주 인구를 합산하고, 그 안의 경쟁 점포를 셉니다. 슈퍼마켓 60곳을 대상으로 한 이번 측정에서는 매장마다 등시선 요청 한 번과 100m 인구 격자 합산으로 작업이 끝났습니다.
상권분석에는 반경과 차량 도달 시간 중 무엇이 더 좋나요?
고객이 도로로 온다면 차량 도달 시간이 더 좋습니다. 리옹, 뮌헨, 밀라노의 슈퍼마켓 60곳을 측정한 결과, 반경 5km 원 안의 거주 인구는 중앙값 기준으로 차로 10분 안에 닿는 인구의 1.7배였습니다. 원 안 인구로 매장 순위를 매기면 차량 도달 인구로 매긴 상위 5곳 중 도시마다 2곳이나 3곳만 일치했습니다. 반경은 첫 검토용이나, 규정 자체가 직선 거리일 때 쓰기에 적합합니다.
매장 상권에는 몇 분 도달 시간을 써야 하나요?
해당 업종의 고객이 이동하는 거리에 맞추세요. 편의점 같은 일상 장보기에는 짧은 구간을, 가구점이나 DIY 매장처럼 가끔 찾는 곳에는 긴 구간을 씁니다. 이번 측정처럼 5분, 10분, 15분 등 여러 등시선을 한 번에 요청하고, 실제 고객 주소나 멤버십 카드의 우편번호가 있다면 그것과 대조하세요. 밀집한 도심의 매장이라면 도보 상권과 차량 상권을 비교하세요.

