- 생각한 사항
- 당근마켓의 내 주변 동네 범위 설정 로직은 어떻게 구현되어 있을까? 추측해보자
- 주민 센터의 위치 좌표에 대해 거리의 크기 기준으로 단계별 설정
- BFS 알고리즘을 통한 인접 동 탐색
- 대중 교통의 소요 시간을 기준으로 가까운 순으로 단계별 설정
- 일단, 1단계는 이름이 같은 것 기준(포함 관계) ex) 삼성 1동 → 삼성동
- 결론
- 완벽히 해결하진 못했지만 기사를 통해 2~6km 반경의 동네 범위를 기준으로 탐색한다고 하는 사실을 알게됨
- 우리는 거리 기준으로 검색을 수행하도록 결정함
- 어차피 인접 동네는 잘 변하지 않는 데이터이므로 MySQL에서 거리 기준으로 검색을 통해 인접 동네 리스트를 생성하여 MongoDB에 저장하면 1번의 계산 로직을 수행하여 인접 동네가 변하는 순간까지 계속 조회할 수 있다.
- 사용한 쿼리는 하버 사인 공식을 활용한 SQL문
SELECT
station , (
6371 * acos ( cos ( radians(나의경도) )
* cos( radians( latitude ) )
* cos( radians( longitude) - radians(나의위도) )
+ sin ( radians(나의경도) ) * sin( radians( latitude ) )
)
) AS distance
FROM tb_subway
HAVING distance < 2
ORDER BY distance
LIMIT 0 , 20;
{
"imae" : {
1: {
"ids" : [ 131, 132, 133, 134, 135, ... ],
"names" : [ "서현동", "강남동", "인사동", ... ]
},
2: {
"ids" : [ 131, 132, 133, 134, 135, ... ],
"names" : [ "서현동", "강남동", "인사동", ... ]
},
...
}