진행중인 프로젝트에서 주소기반으로 동일한 지역, 비슷한 지역내의 사용자들의 에너지 데이터들의 통계를 내야하는 경우가 발생했다.
기본적으로는 주소데이터를 컬럼으로 추가하고, 같은 지역으로 GroupBy를 하여 통계를 내는 방식을 사용하지만,
이렇게 주소데이터 컬럼을 사용하게되면,
군, 시, 도로 확장해나갈때, 쉽게 그룹핑을 하기가 애매해진다.
군,시,도에 따른 주소컬럼을 모두 포함하도록 쿼리를 만들어야하지만,
해당 주소 컬럼에 포함되는 지역데이터가 엄청나게 많이 존재하기 때문에 난감해진다.
Mysql에는 R-tree를 이용한 위치기반 인덱스를 사용할수있는 기능이 있지만,
사용하는 PostgreSql에는 디플리케이트가 되었고,
GiST인덱스가 그 자리를 차지하고 있었다.
어차피 개념은 비슷하지!
개념은 2차원 좌표 데이터를 통해, Box, Circle등의 반경 Bounding에 포함되는 좌표를 인덱스를 통해 빠르게 찾는 방법이다.
이게 Box, Circle등 Bounding의 형식에 따라 오차가 날수도있긴하지만,
평균값이나, 통계정도로 사용하는 목적이라면,
데이터를 직접 모두 인덱싱하여 찾아서 계산하는 방법보다, Gist인덱스를 통하여 계산하는 방법이 훨씬 빠르고 간편하다.
이렇게 되면, 군, 시, 도등으로 확장하며 통계를 계산하기에 훨씬 유리할듯 쉽다.
예전에 캠핑앱을 만들적이 있는데,
내 반경 X킬로 안에 위치하는 다른 캠핑장 찾는 기능을 만든적이 있는데,
이때, 아주 힘들게(?) 구현을 했던적이 있는뎅 ㅠ
위치주소를 통해, 경도,위도값을 구하고, 해당 경도,위도를 X^2 + Y^2 루트를 통해 직선 거리를 계산하는 방법으로 직접 만들었었는뎅 ㅠ
Gist기능을 알았고, 이용했으면 쉽게 해당 기능을 구현했었을듯해서, 아쉽긴하다.
해당 기능이 단순 기능이라서가 아니고, 인덱싱 데이터로 데이터베이스에 저장되고, 해당 위치에 대한 범위를 해당 인덱싱 데이터를 이용해서, 데이터를 찾기 때문에, 레인지 인덱싱을 통해 빠르게 계산이 가능하기 때문이다.
참고) sql explain시 인덱싱 빠른 type 순서
system -> const -> eq_ref -> ref -> index -> all
역시.. 계속 배워야해..(멈추면 썩는다..)
요즘 전에 읽었던 Mysql책을 다시 읽고있는데..왜 처음 읽는 느낌일까?
(그래도 의외로 기억이 새록새록 나기도 하고, 동작하는것도 잼있고 하다.)

Real MySql 8.0이라는 2권으로된 책인데, 참 내용이 쉽고 좋다.
(2권은 전에도 안읽어도될듯해서 안읽었는데, 이번에는 2권도 한번 읽어봐야징)
'MY개발생각' 카테고리의 다른 글
| [개발생각] 조건이 많은 기능들을 앱에 노출해야하는경우 (0) | 2026.07.12 |
|---|---|
| [개발생각] 앱에서 한페이지에서 API를 많이 호출할때 튜닝 (0) | 2026.07.04 |
| [개발생각] API와 앱의 출시 마무리 작업 (0) | 2026.06.28 |
| [개발생각] 공포의 주간랭킹 개발하기 (0) | 2026.06.24 |
| [개발생각] 블리자드..이래서 망한건가??? (0) | 2026.06.22 |
