[08일차] | 대규모 시스템 설계 기초2 | 책너두

Heechan Kang·2025년 1월 7일
0
post-thumbnail

3단계: 상세 설계

데이터 모델

  • 주요 데이터
    • 경로 안내 타일 데이터
    • 사용자 위치 데이터
    • 지오코딩 데이터
    • 지도 타일 데이터

경로 안내 타일 데이터

  • 외부 사업자나 기관이 제공한 데이터를 활용한다.

    • 매우 큰 데이터이고,
    • 끊임없이 개선되고 변경된다.
    • 그래프 구조로 가공되지 않은 외부 데이터이므로 별도의 가공이 필요하다.
  • 따라서 '경로 안내 타일 처리 서비스'와 같은 별도의 파이프라인을 구성하는 것이 좋다.

  • 그래프로 가공된 데이터는 일반적으로 메모리에 인접 리스트(Adjacency List)로 저장한다.

    • 하지만 이 경우에는 메모리에 저장하기 어려울정도로 큰 데이터이므로, 다른 저장매체를 사용해야 한다.
  • 이를 위해 S3와 같은 객체 저장소를 사용할 수 있다.

    • 인접 리스트를 직렬화하여 binary로 저장하고, 필요할 때마다 읽어들이는 방식이다.
    • 저장시에는 지오해시와 확대 수준을 키로 사용한다.

사용자 위치 데이터

  • 사용자 위치는 수시로 업데이트 되므로, 쓰기연산 성능과 확장성을 고려해야 한다.
  • 카산드라 등이 적합하다.

지오코딩 데이터

  • 지오코딩 데이터는 주소를 위경도로 변환하는데 사용된다.
  • 레디스와 같은 빠른 읽기 연산을 제공하는 키-값 저장소가 적합하다.
    • 쓰기/수정 연산이 거의 발생하지 않는다.

지도 타일 데이터

  • 사용자가 특정 지역의 지도를 요청하면, 도로 정보와 지도를 조합한 이미지를 만들어야한다.
  • 이미지는 자주 호출되고, 변경사항이 적으므로 캐싱을 적극적으로 사용해야 한다.

서비스

  • 서비스는 크게 다음과 같이 구성된다.
    • 위치 서비스
    • 지도 표시 서비스
    • 경로 안내 서비스

위치 서비스

  • 사용자의 위치정보가 이용되는 방식에 초점을 두어야 한다.
  • 초당 백만 건의 업데이트가 발생하므로, 쓰기연산이 빠른 데이터베이스를 사용해야 한다.
    • 키-값 저장소나 열 중심 데이터베이스(Column-Oriented Database)가 적합하다.
  • 또한, 시간에 따라 계속 변화하며, 이전 데이터는 가치가 떨어진다.
    • 따라서 일관성 보다는 가용성을 우선시하는 것이 좋다.
  • 이러한 이유로, 카산드라가 적합하다.

❗ CAP 정리

  • 일관성(Consistency): 모든 노드가 동일한 데이터를 가지는 것
  • 가용성(Availability): 모든 요청에 대해 응답을 보장하는 것
  • 분할 내성(Partition Tolerance): 네트워크 분할이 발생해도 시스템이 정상적으로 동작하는 것

CAP 정리는 세가지 중 두가지만 선택할 수 있음을 증명한 이론이다.

  • 데이터의 키로는 사용자 아이디와 시간을 사용한다.(user_id, timestamp)
    • 사용자 아이디: 파티션 키(Partition Key), 시간: 클러스터링 키(Clustering Key)

❗ 파티션 키와 클러스터링 키

  • 파티션 키: 데이터를 분산 저장하기 위한 키
  • 클러스터링 키: 파티션 내에서 데이터를 정렬하기 위한 키

지도 표시 서비스

  • 지도 표시 최적화를 위해 벡터 이미지를 사용하는 방안도 고려해볼 수 있다.
profile
안녕하세요!

0개의 댓글