@@ -146,6 +146,8 @@ API 스펙은 넘어가고 데이터 모델을 살펴보겠다.
146146
147147쿼드트리를 담는 메모리 양이 많아 보일 수 있지만 ` 말단 노드 데이터 양 ` 과 ` 내부 노드 데이터 양 ` 을 고려하면 총 메모리 요구량이 작은 편이다.
148148
149+ 쿼드트리는 색인 갱신이 까다롭다. 사업장 정보를 갱신하려면 트리를 순회해야 하고 리밸런싱이 필요하다면 더욱 복잡해진다.
150+
149151쿼드 트리의 아쉬운점은 서버에 직접 구현해야 한다는 점이다. 상태를 가지는 서버는 관리하기 어렵다.
150152서버 시작마다 쿼드 트리 생성 소요 시간으로 인해 추가적인 다운 타임이 발생한다.
151153그 발생을 줄이기 위해 블루-그린 배포를 운영하게 되면 여러 대의 쿼드 트리가 데이터베이스에 접근하는 문제가 있을 수 있다.
@@ -222,11 +224,45 @@ w3w 를 사용하면 3m x 3m 단위로 정확하게 전달이 가능하다. 주
222224
223225### 3 단계 : 상세 설계
224226
225- 🛠작성중
227+ 시스템의 형태를 파악했으니 상세한 설계를 고민해보자. 다음은 고민해 볼 포인트다.
228+
229+ - 데이터베이스 확장성
230+ - 캐싱
231+ - 지역 한정
232+
233+ ** 데이터베이스 확장성**
234+
235+ 사업장 테이블은 어떤 방법을 사용해도 된다.
236+ 그러나 지리 정보가 포함된 정보는 관리하기 어렵다.
237+ 샤딩을 수행할 경우 애플리케이션 레이어에서 샤딩 로직을 구현해야 하는데 위에 이야기 나온 알고리즘을 샤딩된 데이터를 가져와 수용할 수 있어야 하는데 복잡해진다.
238+
239+ ** 캐싱**
240+
241+ 면접관과 캐시 도입을 의논할 때는 벤치마킹과 비용 분석에 각별히 주의해야 한다.
242+ 캐시는 처리 부하가 읽기 중심이고 캐시 히트가 높을 수록 유용하다.
243+ 위 조건을 만족하지 못한다면 데이터베이스를 증설해서 읽기 대역폭을 늘리는 것도 방법이다.
244+
245+ 캐싱을 수행한다면 그리드로 인덱싱된 데이터를 기준으로 어떤 사업장이 포함되는지 캐싱하게 된다.
246+
247+ ** 지역 한정**
248+
249+ 사용자와 시스템 사이 물리적 거리를 최소화 해 휴율적으로 부하를 분산할 수 있다.
250+ 또한 지역을 한정하게 되면 지역마다 원하는 데이터가 캐싱될 것이고 더 빠르게 데이터를 받을 수 있게 된다.
251+ DNS 라우팅을 통해 해당 지역 내 서비스가 처리되도록 설정하자.
226252
227253### 4 단계 : 마무리
228254
229- 🛠작성중
255+ 근정성 서비스를 설계하면서 어떤 알고리즘을 사용하느냐에 따라 성능 차이가 발생하는 모습을 확인했다.
256+ 알고리즘마다 고려해야 하는 고민 포인트를 가지고 어떻게 확장성 있게 설계해야할지가 중요하다.
257+ 그 밖에 가용성을 높이기 위해 고민할 필요가 있다.
258+
259+ | | 장점 | 단점 |
260+ | --- | --- | --- |
261+ | 지오 해시 | - 구현 쉬움<br />- 색인 갱신 쉬움 | - 정밀도가 고정됨<br />- 영역 내부 거리 편차 큼 |
262+ | 쿼드 트리 | - 정밀도를 변경 가능 | - 구현 어려움<br />- 색인 갱신 어려움<br />- 지속적인 리밸런싱 필요<br />- 수정시 동시성 제어 필요 |
263+ | s2 | - 정밀한 지오 펜스<br />- 1차원 검색이라 효율적임<br />- 정밀도 조절 가능 | - 잘 모르겠음 |
264+ | h3 | - 인접 영역간 거리 편차 적음<br />- 정밀도 조절 가능 | - 잘 모르겠음 |
265+ | w3w | - 정밀한 검색 가능<br />- 구현 간단함 | - 인접 영역관 연관성 없음<br />- 높낮이 구분 절대 안됨 |
230266
231267### 보면 재밌을 자료
232268
0 commit comments