Design Map Service

μš”κ΅¬μ‚¬ν•­

  • μœ„μΉ˜ κ°±μ‹  / 경둜 μ•ˆλ‚΄ / ETA(μ˜ˆμƒ 도착 μ‹œκ°„) / 지도 ν‘œμ‹œ κΈ°λŠ₯ 제곡

  • 수 TB μˆ˜μ€€μ˜ κ°€κ³΅λ˜μ§€ μ•Šμ€ λ„λ‘œ 데이터

  • λ‹€μ–‘ν•œ 이동 방법 지원 μ•ˆλ‚΄(도보 / λŒ€μ€‘κ΅ν†΅ / μ°¨λŸ‰)

  • ν˜„μž¬ ꡐ톡 상황 κ³ λ € ν•„μš”

κΈ°λŠ₯ λͺ©λ‘

μœ„μ˜ μš”κ΅¬μ‚¬ν•­μ„ μΆ©μ‘± μ‹œν‚€κΈ° μœ„ν•œ κΈ°λŠ₯ λͺ©λ‘μ€ λ‹€μŒκ³Ό κ°™λ‹€.

  • μ‚¬μš©μž μœ„μΉ˜ κ°±μ‹ 

  • 경둜 μ•ˆλ‚΄ μ„œλΉ„μŠ€(ETA 포함)

  • 지도 ν‘œμ‹œ

개랡적 규λͺ¨ μΆ”μ •

DAU 10μ–΅ λͺ…, 경둜 μ•ˆλ‚΄ κΈ°λŠ₯ μ£Όλ‹Ή 35λΆ„ μ‚¬μš©μ΄λΌκ³  κ°€μ •ν–ˆμ„ λ•Œ, μ²˜λ¦¬ν•΄μ•Όν•  νŠΈλž˜ν”½μ€ λ‹€μŒκ³Ό κ°™λ‹€.

  • ν•˜λ£¨ μ‚¬μš©λŸ‰: 10μ–΅ * 35λΆ„ / 7일 = 50μ–΅ λΆ„

  • ν΄λΌμ΄μ–ΈνŠΈ GPS κ°±μ‹  μ£ΌκΈ°: 15초(맀초 GPSλ₯Ό κ°±μ‹ ν•  ν•„μš” 없이, λ³€κ²½ 내역을 λͺ¨μ•„λ‘μ—ˆλ‹€κ°€ 15μ΄ˆλ§ˆλ‹€ μ „μ†‘ν•œλ‹€κ³  κ°€μ •)

  • QPS: 50μ–΅ * 60초 / 15초 / 86,400초(ν•˜λ£¨) = μ•½ 230,000QPS

  • μ΅œλŒ€ QPS: 230,000 * 5 = 1,150,000QPS(5배둜 κ°€μ •)

경둜 μ•ˆλ‚΄ μ•Œκ³ λ¦¬μ¦˜μ„ μœ„ν•œ λ„λ‘œ 데이터 처리

λŒ€λΆ€λΆ„μ˜ 경둜 탐색 μ•Œκ³ λ¦¬μ¦˜μ€ λ‹€μŒκ³Ό 같은 νŠΉμ§•μ„ κ°€μ§„λ‹€.

  • 데이크슀트라 μ•Œκ³ λ¦¬μ¦˜μ΄λ‚˜ A* μ•Œκ³ λ¦¬μ¦˜μ˜ λ³€μ’…

  • 두 μ•Œκ³ λ¦¬μ¦˜μ„ ν¬ν•¨ν•œ λͺ¨λ“  경둜 탐색 μ•Œκ³ λ¦¬μ¦˜μ€ λ…Έλ“œμ™€ μ—£μ§€λ‘œ 이루어진 κ·Έλž˜ν”„ 자료 ꡬ쑰 μ‚¬μš©

μ „ 세계 λ„λ‘œλ§μ„ ν•˜λ‚˜μ˜ κ·Έλž˜ν”„λ‘œ ν‘œν˜„ν•˜κ²Œ 되면, λ©”λͺ¨λ¦¬ λ¬Έμ œλ„ λ°œμƒν•˜κ³ , 탐색 μ„±λŠ₯도 λ–¨μ–΄μ§€κΈ° λ•Œλ¬Έμ— κ·Έλž˜ν”„λ₯Ό 관리 κ°€λŠ₯ λ‹¨μœ„λ‘œ λΆ„ν• ν•  ν•„μš”κ°€ μžˆλ‹€. 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ μ§€μ˜€ν•΄μ‹±κ³Ό λΉ„μŠ·ν•œ λΆ„ν•  κΈ°μˆ μ„ μ μš©ν•΄ μž‘μ€ 격자둜 λ‚˜λˆ„κ³ , λ‚˜λ‰˜μ–΄μ§„ 각 κ²©μžλŠ” λ‹€λ₯Έ 타일에 λŒ€ν•œ μ°Έμ‘°λ₯Ό μœ μ§€ν•˜μ—¬ ν•„μš”ν•œ νƒ€μΌλ§Œ λ‘œλ“œν•˜λŠ” 방식을 μ‚¬μš©ν•œλ‹€.

개랡적 μ„€κ³„μ•ˆ

지도 μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•˜κΈ° μœ„ν•΄ 크게 μ•„λž˜ μ„Έ κ°€μ§€ κΈ°λŠ₯으둜 ꡬ뢄할 수 μžˆλ‹€.

  1. μœ„μΉ˜ μ„œλΉ„μŠ€

    • μ‚¬μš©μž μœ„μΉ˜λ₯Ό κΈ°λ‘ν•˜λŠ” μ—­ν• 

    • κΈ°λ‘ν•œ λ°μ΄ν„°λ‘œ 데이터 μŠ€νŠΈλ¦Όμ„ ν™œμš©ν•˜μ—¬ μ‹œμŠ€ν…œ κ°œμ„  및 μ •ν™•ν•œ ETA μ‚°μΆœ κ°€λŠ₯

    • λ³€κ²½ 내역을 λͺ¨μ•„λ‘μ—ˆλ‹€κ°€ 일정 μ‹œκ°„λ§ˆλ‹€ μ „μ†‘ν•˜λŠ” 방식 μ‚¬μš©(μ„œλ²„ λΆ€ν•˜ κ°μ†Œ)

  2. 경둜 μ•ˆλ‚΄ μ„œλΉ„μŠ€

    • μ‚¬μš©μžμ˜ μΆœλ°œμ§€μ™€ 도착지λ₯Ό μž…λ ₯λ°›μ•„ 졜적 경둜λ₯Ό 제곡

    • κΌ­ μ΅œλ‹¨ μ‹œκ°„ 경둜일 ν•„μš”λŠ” μ—†μ§€λ§Œ μ •ν™•λ„λŠ” 보μž₯λ˜μ–΄μ•Ό 함

  3. 지도 ν‘œμ‹œ

    • λͺ¨λ“  지도 데이터λ₯Ό ν•œ λ²ˆμ— λ‘œλ“œν•˜λŠ” 것은 λΆˆκ°€λŠ₯ν•˜λ―€λ‘œ, ν•„μš”ν•œ λΆ€λΆ„λ§Œ λ‘œλ“œν•˜λŠ” 방식 μ‚¬μš©

    • ν΄λΌμ΄μ–ΈνŠΈμ˜ μœ„μΉ˜ 및 ν˜„μž¬ ν™•λŒ€ μˆ˜μ€€μ— λ§žλŠ” 지도 λ°μ΄ν„°λ§Œ λ‘œλ“œ

    • ν™•λŒ€ μˆ˜μ€€λ³„λ‘œ 미리 λ§Œλ“€μ–΄ λ‘” 지도 타일을 ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 전솑

상세 섀계

데이터 λͺ¨λΈ

지도 μ„œλΉ„μŠ€μ—μ„œλŠ” μ•„λž˜ λ„€ κ°€μ§€ 데이터λ₯Ό μ·¨κΈ‰ν•˜κ²Œ λœλ‹€.

  1. 경둜 μ•ˆλ‚΄ 타일

    • μ™ΈλΆ€ μ‚¬μ—…μžλ‚˜ 기관이 μ œκ³΅ν•œ λ„λ‘œ 데이터 μ‚¬μš©(raw data)

    • 경둜 μ•ˆλ‚΄ μ•Œκ³ λ¦¬μ¦˜μ— ν™œμš©ν•  수 μžˆλ„λ‘ κ°€κ³΅ν•˜μ—¬ μ‚¬μš©

    • 데이터 크기가 맀우 ν¬λ―€λ‘œ S3 같은 객체 μ €μž₯μ†Œμ— μ €μž₯ν•˜κ³ , 캐싱 μ‚¬μš©

  2. μ‚¬μš©μž μœ„μΉ˜

    • λ„λ‘œ 데이터 및 경둜 μ•ˆλ‚΄ 타일 갱신에 이용

    • μ‹€μ‹œκ°„ ꡐ톡 μƒν™©μ΄λ‚˜ ꡐ톡 상황 이λ ₯ 데이터 ꡬ좕에도 ν™œμš©

  3. μ§€μ˜€μ½”λ”© 데이터

    • μ£Όμ†Œλ₯Ό μœ„λ„/경도 쌍으둜 λ³€ν™˜ν•˜λŠ” 정보 보관

    • ν‚€-값을 λΉ λ₯΄κ²Œ 읽을 수 μžˆλ„λ‘ Redis μ‚¬μš©

  4. 계산해 λ‘” 지도 타일 데이터

    • νŠΉμ • μ˜μ—­μ˜ 정보λ₯Ό μ·¨ν•©ν•˜μ—¬ λ„λ‘œ 및 상세 정보가 ν¬ν•¨λœ 이미지 데이터

    • μžμ›μ„ 많이 μ‚¬μš©ν•˜κ³  쀑볡 μš”μ²­ν•˜λŠ” κ²½μš°κ°€ λ§ŽμœΌλ―€λ‘œ 캐싱 μ‚¬μš©

μœ„μΉ˜ μ„œλΉ„μŠ€

μ‚¬μš©μž μœ„μΉ˜ 데이터 μ €μž₯μ—λŠ” ν‚€-κ°’ μ €μž₯μ†Œλ₯Ό ν™œμš©ν•˜λŠ” NoSQL λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 쒋은데, κ·Έ μ΄μœ λŠ” λ‹€μŒκ³Ό κ°™λ‹€.

  • μœ„μΉ˜ 정보 μ—…λ°μ΄νŠΈκ°€ λΉˆλ²ˆν•˜κ²Œ λ°œμƒν•˜λ―€λ‘œ, λΉ λ₯Έ 읽기/μ“°κΈ° 속도가 ν•„μš”

  • μœ„μΉ˜ 정보가 일단 λ³€κ²½λ˜λ©΄ 이전 λ°μ΄ν„°λŠ” μ€‘μš”ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ, μΌκ΄€μ„±λ³΄λ‹€λŠ” κ°€μš©μ„±μ΄ μ€‘μš”

μœ„ 쑰건을 κ³ λ €ν–ˆμ„ λ•Œ Cassandra λ°μ΄ν„°λ² μ΄μŠ€κ°€ μ ν•©ν•˜λ‹€κ³  λ³Ό 수 있고, ν•΄λ‹Ή ν…Œμ΄λΈ”μ„ λ‹€μŒκ³Ό 같이 ꡬ성할 수 μžˆλ‹€.

key(user_id)
timestamp
latitude
longitude
use_mode
navigation_mode

51

132053000

37.1234

127.1234

active

driving

  • λ°μ΄ν„°λ² μ΄μŠ€ ν‚€: user_id + timestamp

  • νŒŒν‹°μ…˜ ν‚€: user_id

  • ν΄λŸ¬μŠ€ν„°λ§ ν‚€: timestamp

지도 ν‘œμ‹œ

μ‚¬μš©μžκ°€ λ³΄λŠ” 지도 ν¬κΈ°λ‚˜ ν™•λŒ€ μˆ˜μ€€μ— λ§žλŠ” 세뢀사항을 보여주기 μœ„ν•΄μ„  ν™•λŒ€ μˆ˜μ€€λ³„ 지도 타일을 미리 λ§Œλ“€μ–΄ 두어야 ν•œλ‹€. ꡬ글 맡의 경우 총 21λ‹¨κ³„λ‘œ 지도λ₯Ό ν™•λŒ€ν•˜κ²Œ λ˜λŠ”λ°, μˆ˜μ€€μ„ ν•œ 단계 올릴 λ•Œλ§ˆλ‹€ ν•΄λ‹Ή μˆ˜μ€€μ„ μœ„ν•œ 타일 μˆ˜λŠ” 4배둜 μ¦κ°€ν•˜κ²Œ λœλ‹€. λ•Œλ¬Έμ— λ§Žμ€ μ–‘μ˜ 데이터λ₯Ό μ €μž₯ν•΄μ•Ό ν•˜λŠ”λ°, 이λ₯Ό 이미지 λŒ€μ‹  λ²‘ν„°λ‘œ κ΄€λ¦¬ν•˜κ²Œ 되면 μ €μž₯ 곡간을 μ ˆμ•½ν•  수 μžˆλ‹€.

  • 이미지에 λΉ„ν•΄ 높은 μ••μΆ•λ₯ λ‘œ λ„€νŠΈμ›Œν¬ λŒ€μ—­ν­ μ ˆμ•½

  • κ·Έ 외에 λ§€λ„λŸ¬μš΄ ν™•λŒ€/μΆ•μ†Œ, λ Œλ”λ§ ν’ˆμ§ˆ ν–₯상 λ“±μ˜ μž₯점

경둜 μ•ˆλ‚΄ μ„œλΉ„μŠ€

경둜 μ•ˆλ‚΄ μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ μ»΄ν¬λ„ŒνŠΈλ“€μ€ λ‹€μŒκ³Ό κ°™λ‹€.

  • μ§€μ˜€μ½”λ”© μ„œλΉ„μŠ€: μ£Όμ†Œλ₯Ό μœ„λ„/경도 쌍으둜 λ°”κΏ”μ£ΌλŠ” μ„œλΉ„μŠ€

  • 경둜 κ³„νš μ„œλΉ„μŠ€: ν˜„μž¬ ꡐ톡 상황과 λ„λ‘œ μƒνƒœμ— μž…κ°ν•˜μ—¬ μ΅œμ ν™”λœ 경둜 μ œμ•ˆ

  • μ΅œλ‹¨ 경둜 μ„œλΉ„μŠ€: μΆœλ°œμ§€μ™€ λͺ©μ μ§€ μœ„λ„/경도λ₯Ό μž…λ ₯ λ°›μ•„ μ΅œλ‹¨ 경둜 λ°˜ν™˜

    • κ΅ν†΅μ΄λ‚˜ λ„λ‘œ 상황 κ³ λ € x

    • λ„λ‘œ κ·Έλž˜ν”„λŠ” 거의 μ •μ μ΄λ―€λ‘œ 데이터λ₯Ό μΊμ‹±ν•˜μ—¬ μ‚¬μš©

  • μ˜ˆμƒ 도착 μ‹œκ°„ μ„œλΉ„μŠ€: 경둜 κ³„νš μ„œλΉ„μŠ€μ—μ„œ μ΅œλ‹¨ 경둜 λͺ©λ‘λ₯Ό μˆ˜μ‹ ν•˜λ©΄ μ˜ˆμƒ 도착 μ„œλΉ„μŠ€λ₯Ό ν˜ΈμΆœν•˜μ—¬ μ†Œμš” μ‹œκ°„ μΆ”μ •μΉ˜ 계산

  • μˆœμœ„ κ²°μ • μ„œλΉ„μŠ€: 경둜 κ³„νš μ„œλΉ„μŠ€μ—μ„œ μΆ”μ •μΉ˜λ₯Ό κ΅¬ν•˜κ³  λ‚˜λ©΄ ν•΄λ‹Ή 데이터듀과 μ‚¬μš©μžκ°€ μ •μ˜ν•œ 필터링 쑰건(κ³ μ†λ„λ‘œ μ œμ™Έ λ“±)을 μ μš©ν•΄ 졜적 경둜 μΆ”μ²œ

μ‚¬μš©μžκ°€ μΆœλ°œμ§€μ™€ λͺ©μ μ§€λ₯Ό μž…λ ₯ν•˜λ©΄, 경둜 κ³„νš μ„œλΉ„μŠ€λŠ” λ‹€μŒκ³Ό 같은 과정을 κ±°μΉœλ‹€.

  1. μΆœλ°œμ§€μ™€ λͺ©μ μ§€λ₯Ό μœ„/κ²½λ„λ‘œ λ³€ν™˜

  2. μœ„/κ²½λ„λ‘œ 경둜 κ³„νš μ„œλΉ„μŠ€ 호좜

  3. 경둜 κ³„νš μ„œλΉ„μŠ€λŠ” μ΅œλ‹¨ 경둜 μ„œλΉ„μŠ€ 호좜

  4. μ΅œλ‹¨ 경둜 μ„œλΉ„μŠ€λŠ” μΊμ‹±λœ λ„λ‘œ λ°μ΄ν„°λ‘œ μ΅œλ‹¨ 경둜 계산 ν›„ λ°˜ν™˜

  5. λ°˜ν™˜ 받은 μ΅œλ‹¨ 경둜λ₯Ό μ΄μš©ν•΄ μ˜ˆμƒ 도착 μ‹œκ°„ μ„œλΉ„μŠ€ 호좜

  6. μ˜ˆμƒ 도착 μ‹œκ°„ μ„œλΉ„μŠ€λŠ” λ„λ‘œ μƒνƒœμ™€ ꡐ톡 상황을 κ³ λ €ν•΄ μ˜ˆμƒ μ†Œμš” μ‹œκ°„ 계산 ν›„ λ°˜ν™˜

  7. λ°˜ν™˜ 받은 μ˜ˆμƒ 도착 μ‹œκ°„μ„ μ΄μš©ν•΄ μˆœμœ„ κ²°μ • μ„œλΉ„μŠ€ 호좜

  8. μˆœμœ„ κ²°μ • μ„œλΉ„μŠ€λŠ” μ‚¬μš©μžκ°€ μ •μ˜ν•œ 필터링 쑰건을 μ μš©ν•΄ 졜적 경둜 μΆ”μ²œ

  9. 졜적 경둜λ₯Ό μ‚¬μš©μžμ—κ²Œ λ°˜ν™˜

전솑 ν”„λ‘œν† μ½œ

경둜 μ•ˆλ‚΄ 쀑 결둜의 상황이 변경될 수 μžˆμœΌλ―€λ‘œ, 데이터λ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ— 전솑할 μ•ˆμ •μ μΈ 방법이 ν•„μš”ν•˜λ‹€. μ„œλ²„μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈμ— 이터λ₯Ό λ³΄λ‚΄λŠ” ν”„λ‘œν† μ½œλ‘œλŠ” λ‹€μŒκ³Ό 같은 것듀이 μžˆλ‹€.

  • λͺ¨λ°”일 ν‘Έμ‹œ μ•Œλ¦Ό: 보낼 수 μžˆλŠ” λ©”μ‹œμ§€ 크기가 μ œν•œμ μ΄κΈ° λ•Œλ¬Έμ— 경둜 μ•ˆλ‚΄ 데이터λ₯Ό λ³΄λ‚΄κΈ°μ—λŠ” μ ν•©ν•˜μ§€ μ•ŠμŒ

  • μ„œλ²„ 전솑 이벀트(SSE): μ„œλ²„μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈλ‘œ 이벀트λ₯Ό λ³΄λ‚΄λŠ” 기술

  • μ›Ήμ†ŒμΌ“: 데이터 전솑에 적합, μ–‘λ°©ν–₯ 톡신이 ν•„μš”ν•œ κ²½μš°κ°€ 많기 λ•Œλ¬Έμ— 적합

참고자료

Last updated

Was this helpful?