μμΉ κΈ°λ° μ€μκ° μμ
νλ«νΌ LocoMapμ λ°±μλ μλ²μ
λλ€.
μ§μ€ν΄μ(Geohash)λ₯Ό ν΅μ¬ μΈνλΌλ‘ νμ©νμ¬ μ¬μ©μ μμΉ κΈ°λ° μ±ν
, νΌλ, λνΌμ μ 보λ₯Ό μ 곡ν©λλ€.
| λΆλ₯ |
κΈ°μ |
| Language |
Java 21 |
| Framework |
Spring Boot 4.0.2 |
| Build |
Gradle |
| Database |
MySQL |
| Cache |
Redis |
| ORM |
Spring Data JPA (Hibernate) |
| WebSocket |
STOMP + SockJS |
| Monitoring |
Prometheus + Micrometer + Grafana |
| Load Test |
k6 |
src/main/java/com/locomap/backend/
βββ domain/
β βββ user/ # μ¬μ©μ κ΄λ¦¬ (νμκ°μ
, λ‘κ·ΈμΈ, μμΉ)
β βββ feed/ # νΌλ (ν¬μ€νΈ CRUD)
β βββ chat/ # μμΉ κΈ°λ° μ€μκ° μ±ν
β βββ shelter/ # 곡곡 λνΌμ μ 보
βββ global/
βββ config/ # WebSocket, Redis, CORS, λ©νΈλ¦ μ€μ
βββ exception/ # κΈλ‘λ² μμΈ μ²λ¦¬
βββ util/ # GeohashUtil (μ§μ€ν΄μ μΈμ½λ©/λμ½λ©/거리 κ³μ°)
- νμκ°μ
/ λ‘κ·ΈμΈ
- μ¬μ©μ νλ‘ν μ‘°ν
- μ¨λ³΄λ© μλ£ μ²λ¦¬ (μμΉ λμ λ° μ΄κΈ° μμΉ μ μ₯)
- ν¬μ€νΈ CRUD
- κ°μ (emotion) νκ·Έ λ° μμΉ μ 보 ν¬ν¨
- μ 체 νΌλ μ΅μ μ μ‘°ν
- μ§μ€ν΄μ κΈ°λ° μ±ν
λ°© μλ μμ± λ° μ‘°ν
- STOMP / SockJS WebSocket μ€μκ° λ©μμ§ μ‘μμ
- μ£Όλ³ μ±ν
λ°© μ‘°ν (Geohash prefix νν°λ§ β Haversine 거리 κ³μ° 2λ¨κ³ λ°©μ)
- 곡곡 API(safetydata.go.kr) μ°λ λνΌμ μ 보 μ‘°ν
- Redis Geo μΊμ±μΌλ‘ μμΉ κΈ°λ° μ£Όλ³ μν° λΉ λ₯Έ κ²μ (TTL 24h)
| Method |
Endpoint |
μ€λͺ
|
| POST |
/api/users |
νμκ°μ
|
| POST |
/api/users/login |
λ‘κ·ΈμΈ |
| GET |
/api/users/{userId} |
νλ‘ν μ‘°ν |
| POST |
/api/users/{userId}/onboarding |
μ¨λ³΄λ© μλ£ |
| Method |
Endpoint |
μ€λͺ
|
| GET |
/api/posts |
μ 체 νΌλ μ΅μ μ μ‘°ν |
| POST |
/api/posts |
ν¬μ€νΈ μμ± |
| GET |
/api/posts/{postId} |
ν¬μ€νΈ μμΈ μ‘°ν |
| PUT |
/api/posts/{postId} |
ν¬μ€νΈ μμ |
| DELETE |
/api/posts/{postId} |
ν¬μ€νΈ μμ |
| Method |
Endpoint |
μ€λͺ
|
| GET |
/api/chat/room/{geohash} |
μ±ν
λ°© μ‘°ν / μμΌλ©΄ μμ± |
| GET |
/api/chat/room/{geohash}/messages |
λ©μμ§ λͺ©λ‘ μ‘°ν |
| GET |
/api/chat/rooms/nearby?lat=&lng=&radius= |
μ£Όλ³ μ±ν
λ°© μ‘°ν (κΈ°λ³Έ λ°κ²½ 5km) |
| WS |
/ws (STOMP) |
μ€μκ° λ©μμ§ μ μ‘ |
WebSocket λ©μμ§ κ²½λ‘: /app/chat/{geohash} β /topic/chat/{geohash}
| Method |
Endpoint |
μ€λͺ
|
| GET |
/api/shelters?page=&pageNo= |
λνΌμ λͺ©λ‘ μ‘°ν (νμ΄μ§) |
| GET |
/api/shelters/nearby?lat=&lng=&limit= |
μ£Όλ³ λνΌμ μ‘°ν |