도로명 주소 관련 처리내용
1. 데이터 load
- 대표지번 우편번호 포함된 자료를 다운 받는다.
- 스키마 및 인덱스를 적당히 먹인다.
- oracle의 경우 sqlloder로 쭉 올린다. (약 600만건)
2. 주소 쿼리
SELECT zipcode,
sido_nm
|| ' '
|| sigun_nm
|| ' '
|| court_dong_nm
|| DECODE (court_lee_nm, '', '', ' ' || court_lee_nm)
|| ' '
|| gee_boun
|| DECODE (gee_boo, '0', '', '-' || gee_boo)
|| DECODE (building_nm, '', '', ' ' || building_nm) AS dong_addr,
sido_nm
|| ' '
|| sigun_nm
|| ' '
|| load_nm
|| DECODE (grave_yn, '1', ' 지하', '2', ' 상공')
|| ' '
|| building_boun
|| DECODE (building_boo, '0', '', '-' || building_boo)
|| DECODE (court_lee_nm,
'', ' ('
|| court_dong_nm
|| DECODE (deli_nm,
'', DECODE (building_nm,
'', '',
', ' || building_nm
),
', ' || deli_nm
)
|| ')'
) AS load_addr
FROM road_addr
WHERE sido_nm = 'ㅇㅇ시'
AND sigun_nm = 'ㅇㅇ구'
AND (court_dong_nm LIKE 'ㅇㅇ동%' OR adm_dong_nm LIKE 'ㅇㅇ동%')
3. 입력값 분석
- detail1은 동/도로명 등
- detail2 는 번지 앞자리/건물번호 앞자리
- detail3는 - 이후의 번지 뒷자리/건물번호 뒷자리
String searchValue = zipCodeForm.getSearchValue().replaceAll(" ", "");
String detail1 = searchValue.replaceAll("[0-9]*(-?)[0-9]+(-?)$", "");
String detailTmp = searchValue.replaceAll(detail1, "");
String detail2 = detailTmp.replaceAll("([0-9]*)(-?)([0-9]*)$", "$1");
String detail3 = detailTmp.replaceAll("([0-9]*)(-?)([0-9]*)$", "$3");