ERD 링크
지난 글에서 작성된 구현 기능 목록을 바탕으로 데이터 모델링을 수행했다.
데이터 모델링에 대한 이야기는 특별히 할게 없지만 이런 저런 삽질하면서 발견한 정보들을 공유한다.
유저들과 중고 물품들을 구분하기 위한 지역 정보가 필요하다.
통계청 데이터 대신 미리 변환해 놓은 것이 있어서 사용했다.
행정동 정보 출처 : https://github.com/vuski/admdongkor
- 통계청 통계지리정보서비스에서 제공하는 행정동 경계 파일을 바탕으로 작성
- 좌표계 EPSG:4326 기준으로 작성된 지역 경계 정보를 geojson로 제공
- 좌표계 EPSG:4326 기준으로 작성된 지역 중심 좌표를 csv로 제공
결론만 먼저 말하면 Postgresql + PostGIS 플러그인을 사용한다.
특정 지역 범위를 계산하는 ST_Buffer와 교차 지역들을 계산하는 ST_Intersects를 MySQL8에서 사용하기가 영 불편하기 때문이다.
그 이유는 다음과 같다.
특정 범위와 교차되는 지역들을 구하는 쿼리를 비교해보면 Postgresql의 쿼리가 더 짧고 범위에 대한 설정 값(미터 단위)이 직관적이다.
// In MySQL8
SELECT
*
FROM
"행정동 테이블"
WHERE
ST_Intersects("행정동 지역 경계값", ST_GeomFromText(ST_AsText(ST_Buffer(ST_GeomFromText(ST_AsText(ST_GeomFromText('POINT(129.075041 35.179768)', 4326))), 0.005)), 4326)); // 0.005 ??
// In Postgresql
SELECT
*
FROM
"행정동 테이블"
WHERE
ST_Intersects("행정동 지역 경계값", ST_Buffer(ST_GeomFromText('POINT(129.075041 35.179768)', 4326)::geography, 500)::geometry); // 500 미터
그동안 typeorm을 써왔는데 mikro-orm이라는 것을 발견했다.
knex.js 쿼리 빌더를 기반으로 작성된 ORM 패키지인데
typeorm보다 인기가 적지만 성능이 좋은것 같아서 써보기로 한다.