이건 내비게이션에 필요 없어요
업무하면서 도로명과 지번주소가 혼재되어 있는 데이터를 다룬 적이 있는데, 예를 들면 이런 데이터였습니다.
- 주소1: 서울특별시 서초구 반포동 20-43 반포자이아파트 101동 101호
- 주소2: 서울특별시 영등포구 국회대로62길 9 (여의도동)
예시의 주소 1의 경우 지번주소, 주소2는 도로명주소 입니다.
문제는 이 데이터를 토대로 내비게이션 API에 요청을 보내야 했는데, 저희가 사용 중인 API에서는 상세 주소에 대한 처리가 되어 있지 않아서 간혹 응답을 내리지 않는 경우가 있었습니다.
주소 3을 예로 들면 상세주소에 해당하는 반포자이아파트 101동 101호
에서 101호
는 사실 길찾기에 필요한 정보는 아닙니다. 이걸 포함시켜서 요청하면 길을 제대로 찾지 못하더라구요.
이해를 돕기 위해 주소를 두 가지로 분류해 보겠습니다.
- 배송을 위한 주소
- 길찾기를 위한 주소
1과 2가 같은 경우도 분명 있지만, 공동주택 등의 경우 정확한 호수를 찾기 위한 상세주소가 더해지기 때문에 표기에 차이가 생깁니다.
제가 겪은 문제의 경우 2만 취급하는 API에 1을 보냈기 때문에 발생한 문제였습니다.
그렇다면 문자열 뒷부분의 상세주소만 제거해서 요청하면 되겠다는 생각이 듭니다. 이제 이 문자열들의 어디서부터가 상세주소인지를 찾아야 합니다.
그렇다면 섞여 있는 도로명주소와 지번주소를 각각 다르게 파싱해야 할까요? 애초에 별도의 칼럼이 없는데 문자열만 보고 이 둘을 구분할 수는 있을까요?
모르겠을 땐 문서를 보기
도로명주소 안내 시스템에 가보면 도로명 주소 소개 pdf 파일을 배포하고 있습니다.
눈여겨보아야 할 부분은 가운데의 동/리 지번
이 도로명 건물번호
에 대응된다는 점입니다. 자세한 도로명 건물번호
규칙은 아래와 같은데요.
이 부분이 중요합니다. 도로명은 붙여 쓰고, 도로명과 건물번호는 띄우기 때문에 이는 기존의 동/리 지번
과 공백을 기준으로 호환이 된다고 볼 수 있습니다.
무슨 말인지 앞서 보았던 예시를 다시 보겠습니다.
- 주소1: 서울특별시 서초구 반포동 20-43 반포자이아파트 101동 101호
- 주소2: 서울특별시 영등포구 국회대로62길 9 (여의도동)
지번주소의 동/리 지번
은 반포동 20-43
, 도로명주소의 도로명 건물번호
는 국회대로62길 9
에 해당하는 것을 알 수 있습니다. 그리고 이 주소들은 모두 가운데에 공백 문자를 1개 포함한 문자열입니다.
이 주소들 이후부터는 상세주소가 나오는 것을 확인할 수 있습니다.
즉, 도로명이냐 지번이냐에 관계 없이 단순히 문자열을 공백을 기준으로 앞에서부터 4번 취하면 상세주소를 제거한 주소를 얻을 수 있습니다.
"서울특별시 서초구 반포동 20-43 반포자이아파트 101동 101호"
.split(" ")
.slice(0, 4)
.join(" ");
// '서울특별시 서초구 반포동 20-43'
"서울특별시 영등포구 국회대로62길 9 (여의도동)"
.split(" ")
.slice(0, 4)
.join(" ");
// '서울특별시 영등포구 국회대로62길 9'
이제 이 문자열이 신주소인지 구주소인지와는 관계 없이 간단한 방법으로 상세주소를 제거할 수 있습니다.