3단계: 상세 설계
데이터 모델
- 주요 데이터
- 경로 안내 타일 데이터
- 사용자 위치 데이터
- 지오코딩 데이터
- 지도 타일 데이터
경로 안내 타일 데이터
-
외부 사업자나 기관이 제공한 데이터를 활용한다.
- 매우 큰 데이터이고,
- 끊임없이 개선되고 변경된다.
- 그래프 구조로 가공되지 않은 외부 데이터이므로 별도의 가공이 필요하다.
-
따라서 '경로 안내 타일 처리 서비스'와 같은 별도의 파이프라인을 구성하는 것이 좋다.
-
그래프로 가공된 데이터는 일반적으로 메모리에 인접 리스트(Adjacency List)로 저장한다.
- 하지만 이 경우에는 메모리에 저장하기 어려울정도로 큰 데이터이므로, 다른 저장매체를 사용해야 한다.
-
이를 위해 S3와 같은 객체 저장소를 사용할 수 있다.
- 인접 리스트를 직렬화하여 binary로 저장하고, 필요할 때마다 읽어들이는 방식이다.
- 저장시에는 지오해시와 확대 수준을 키로 사용한다.
사용자 위치 데이터
- 사용자 위치는 수시로 업데이트 되므로, 쓰기연산 성능과 확장성을 고려해야 한다.
- 카산드라 등이 적합하다.
지오코딩 데이터
- 지오코딩 데이터는 주소를 위경도로 변환하는데 사용된다.
- 레디스와 같은 빠른 읽기 연산을 제공하는 키-값 저장소가 적합하다.
지도 타일 데이터
- 사용자가 특정 지역의 지도를 요청하면, 도로 정보와 지도를 조합한 이미지를 만들어야한다.
- 이미지는 자주 호출되고, 변경사항이 적으므로 캐싱을 적극적으로 사용해야 한다.
서비스
- 서비스는 크게 다음과 같이 구성된다.
- 위치 서비스
- 지도 표시 서비스
- 경로 안내 서비스
위치 서비스
- 사용자의 위치정보가 이용되는 방식에 초점을 두어야 한다.
- 초당 백만 건의 업데이트가 발생하므로, 쓰기연산이 빠른 데이터베이스를 사용해야 한다.
- 키-값 저장소나 열 중심 데이터베이스(Column-Oriented Database)가 적합하다.
- 또한, 시간에 따라 계속 변화하며, 이전 데이터는 가치가 떨어진다.
- 따라서 일관성 보다는 가용성을 우선시하는 것이 좋다.
- 이러한 이유로, 카산드라가 적합하다.
❗ CAP 정리
- 일관성(Consistency): 모든 노드가 동일한 데이터를 가지는 것
- 가용성(Availability): 모든 요청에 대해 응답을 보장하는 것
- 분할 내성(Partition Tolerance): 네트워크 분할이 발생해도 시스템이 정상적으로 동작하는 것
CAP 정리는 세가지 중 두가지만 선택할 수 있음을 증명한 이론이다.
- 데이터의 키로는 사용자 아이디와 시간을 사용한다.(user_id, timestamp)
- 사용자 아이디: 파티션 키(Partition Key), 시간: 클러스터링 키(Clustering Key)
❗ 파티션 키와 클러스터링 키
- 파티션 키: 데이터를 분산 저장하기 위한 키
- 클러스터링 키: 파티션 내에서 데이터를 정렬하기 위한 키
지도 표시 서비스
- 지도 표시 최적화를 위해 벡터 이미지를 사용하는 방안도 고려해볼 수 있다.