Skip to content

wagle-project/wagle-server

Repository files navigation

πŸŽͺ WagleWagle Server (와글와글 λ°±μ—”λ“œ)

Real-time Festival Congestion Monitoring Service
μ•Όμ™Έ μΆ•μ œμž₯ μ‹€μ‹œκ°„ ν˜Όμž‘λ„ 및 μœ„μΉ˜ 확인 μ„œλΉ„μŠ€ '와글와글'의 λ°±μ—”λ“œ λ¦¬ν¬μ§€ν† λ¦¬μž…λ‹ˆλ‹€.

Java Spring Boot Redis MySQL

πŸ“– Project Overview

'와글와글'은 넓은 μ•Όμ™Έ μΆ•μ œμž₯μ—μ„œ λ°œμƒν•˜λŠ” **"인파 혼작"**을 ν•΄κ²°ν•˜κΈ° μœ„ν•œ μœ„μΉ˜ 기반 μ„œλΉ„μŠ€μž…λ‹ˆλ‹€.
기쑴의 쒅이 νŒœν”Œλ ›μ„ λ””μ§€ν„Έν™”ν•˜κ³  μ‹€μ‹œκ°„μœΌλ‘œ μ‚¬μš©μžμ˜ μœ„μΉ˜λ₯Ό μ§‘κ³„ν•˜μ—¬ 직관적인 ν˜Όμž‘λ„(Heatmap/Hexagon) 정보λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

πŸš€ Key Technical Decisions

ν•΄λ‹Ή ν”„λ‘œμ νŠΈμ—μ„œ μ €ν¬λŠ” λŒ€μš©λŸ‰ νŠΈλž˜ν”½ 처리λ₯Ό μœ„ν•΄ λ‹€μŒκ³Ό 같은 기술적 도전을 ν–ˆμŠ΅λ‹ˆλ‹€.

1. Redis Geo 기반 μ‹€μ‹œκ°„ μœ„μΉ˜ 좔적 (Location Tracking)

  • Challenge: 수천 λͺ…μ˜ μ‚¬μš©μžκ°€ 1μ΄ˆλ§ˆλ‹€ μœ„μΉ˜λ₯Ό κ°±μ‹ ν•  경우, RDB의 I/O λΆ€ν•˜κ°€ 감당할 수 없을 만큼 μ¦κ°€ν•©λ‹ˆλ‹€.
  • Solution:
    • μœ„μΉ˜ μ •λ³΄λŠ” 영ꡬ μ €μž₯이 ν•„μš” μ—†λŠ” νœ˜λ°œμ„± λ°μ΄ν„°μž…λ‹ˆλ‹€.
    • Redis Geo 자료ꡬ쑰λ₯Ό μ‚¬μš©ν•˜μ—¬ In-Memoryμ—μ„œ μœ„μΉ˜ κ°±μ‹  및 쑰회 μ„±λŠ₯을 O(1)~O(logN)으둜 μ΅œμ ν™”ν–ˆμŠ΅λ‹ˆλ‹€.
    • Expire κΈ°λŠ₯을 ν™œμš©ν•΄ 1λΆ„ 이상 응닡이 μ—†λŠ”(Heartbeat miss) μ‚¬μš©μžλ₯Ό μžλ™μœΌλ‘œ μ§‘κ³„μ—μ„œ μ œμ™Έν•©λ‹ˆλ‹€.

2. Uber H3 μœ‘κ°ν˜• ν΄λŸ¬μŠ€ν„°λ§ (Spatial Aggregation)

  • Challenge: μ ‘μ†μž μ „μ›μ˜ μ’Œν‘œ(Point)λ₯Ό ν”„λ‘ νŠΈμ—”λ“œλ‘œ 전솑할 경우 λ Œλ”λ§ λΆ€ν•˜λ‘œ 인해 λͺ¨λ°”일 κΈ°κΈ°κ°€ λ©ˆμΆ”λŠ” ν˜„μƒμ΄ λ°œμƒν•©λ‹ˆλ‹€.
  • Solution:
    • Uber H3 Spatial Index μ•Œκ³ λ¦¬μ¦˜μ„ λ„μž…ν•˜μ—¬ 지도λ₯Ό μœ‘κ°ν˜•(Hexagon) κ·Έλ¦¬λ“œλ‘œ λ‚˜λˆ•λ‹ˆλ‹€.
    • μ„œλ²„μ—μ„œ 미리 ꡬ역별 μΈμ›μˆ˜λ₯Ό 집계(Aggregation)ν•œ λ’€ HexID와 밀집도 Level 만 μ „μ†‘ν•˜μ—¬ 데이터 μ „μ†‘λŸ‰μ„ 90% 이상 μ ˆκ°ν–ˆμŠ΅λ‹ˆλ‹€.

πŸ›  Tech Stack

Category Technology Description
Framework Spring Boot 3.4.2 Java 21 기반의 κ²¬κ³ ν•œ μ„œλ²„ ꡬ좕
Database MySQL 8.0 μ‚¬μš©μž, μΆ•μ œ 정보 λ“± μ •ν˜• 데이터 관리
Cache/NoSQL Redis μ‹€μ‹œκ°„ μœ„μΉ˜ μ €μž₯(Geo) 관리
ORM Spring Data JPA 객체 μ§€ν–₯적인 데이터 μ ‘κ·Ό 계측 κ΅¬ν˜„
Auth JWT Statelessν•œ 인증 처리
Library Uber H3 (Java) μœ‘κ°ν˜• 곡간 인덱싱 μ•Œκ³ λ¦¬μ¦˜

πŸ“‚ Architecture Structure

λ„λ©”μΈν˜• 디렉토리 ꡬ쑰λ₯Ό μ±„νƒν•˜μ—¬ λΉ„μ¦ˆλ‹ˆμŠ€ λ³΅μž‘λ„λ₯Ό κ΄€λ¦¬ν•©λ‹ˆλ‹€.

com.waglewagle.server
β”œβ”€β”€ global          # μ „μ—­ μ„€μ • (Config, Error, Util)
β”œβ”€β”€ domain
β”‚   β”œβ”€β”€ festival    # μΆ•μ œ 정보 관리
β”‚   β”œβ”€β”€ member      # μ‚¬μš©μž 인증/인가
β”‚   β”œβ”€β”€ map         # 지도 μ˜€λ²„λ ˆμ΄ 및 νƒ€μž„ν…Œμ΄λΈ”
β”‚   └── location    # [Core] μ‹€μ‹œκ°„ μœ„μΉ˜ 및 H3 집계 둜직
└── WagleServerApplication.java

πŸ”§ Getting Started (Local)

  1. Clone Repository
git clone [https://github.com/wagle-wagle/wagle-server.git](https://github.com/wagle-wagle/wagle-server.git)
  1. Setup Environment
  • application.yml 파일 생성 및 DB μ„€μ • (MySQL, Redis 포트 확인)
  1. Run Application
./gradlew bootRun

πŸ“ Documentation

About

πŸŽͺ [와글와글] λ°±μ—”λ“œ μ„œλ²„ | Redis Geo와 Uber H3둜 λŒ€μš©λŸ‰ νŠΈλž˜ν”½μ„ μ²˜λ¦¬ν•˜λŠ” μ‹€μ‹œκ°„ μΆ•μ œ ν˜Όμž‘λ„ μ„œλΉ„μŠ€

Topics

Resources

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors