[FEAT] 공덕 지역 웨이블 마커 데이터 추가#149
Conversation
Walkthrough그래프 초기화에서 로드하는 JSON 리소스 경로를 "/seocho_pedestrian.json"에서 "/seocho_gongdeok_pedestrian.json"으로 변경했다. wayble_markers.json에 공덕 지역 중심의 대량 마커가 추가되고 일부 기존 마커 타입이 재분류되었다. 테스트 코드에는 공백 라인 제거만 반영되었다. Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~8 minutes Assessment against linked issues
Assessment against linked issues: Out-of-scope changes
Possibly related PRs
Suggested reviewers
Poem
Tip 🔌 Remote MCP (Model Context Protocol) integration is now available!Pro plan users can now connect to remote MCP servers from the Integrations page. Connect with popular remote MCPs such as Notion and Linear to add more context to your reviews and chats. ✨ Finishing Touches
🧪 Generate unit tests
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. CodeRabbit Commands (Invoked using PR/Issue comments)Type Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Actionable comments posted: 0
🔭 Outside diff range comments (1)
src/main/java/com/wayble/server/direction/init/GraphInit.java (1)
89-105: 원거리(Out-of-region) 마커가 임의 노드에 매핑되는 부작용 가능성
findWaybleMarkers()가 “가까운 노드”를 거리 임계값 없이 항상 선택합니다. 그래프 범위 밖(혹은 매우 먼 거리)의 마커도 가장 가까운 노드에 강제로 붙으면서, 해당 노드 인접 간선에 할인(MARKER_DISCOUNT)이 적용될 수 있습니다. 공덕 외 지역(서초 등) 대량 마커가 파일에 공존하므로 그래프에 포함되지 않은 범위의 마커가 광범위하게 잘못 반영될 위험이 있습니다.
- 해결책 1: “최소 거리 ≤ 임계값”일 때만 매핑하도록 거리 임계값(예: 100~200m)을 두세요.
- 해결책 2: 그래프 리소스가 다지역 통합이라면 괜찮지만, 그럼에도 여전히 임계값을 두는 것이 안전합니다.
- 부가 개선:
rampMarkers를 실제로 채워RAMP_PENALTY가 반영되도록 하세요.임계값 적용 및
rampMarkers채움 예시는 아래와 같습니다.@@ private Map<Long, Type> findWaybleMarkers() { Map<Long, Type> waybleMarkers = new HashMap<>(); - for (WaybleMarker marker : markers) { - long nearNode = nodes.stream() - .min(Comparator.comparingDouble( - n -> HaversineUtil.haversine(marker.lat(), marker.lon(), n.lat(), n.lon()) - )) - .map(Node::id) - .orElse(marker.id()); - - if (nearNode != marker.id()) { - waybleMarkers.put(nearNode, marker.type()); - } - } + // 거리 임계값 기반 매핑 + // NOTE: HaversineUtil.haversine 반환 단위(미터/킬로미터)를 확인 후 임계값을 조정하세요. + // 예시: meters 기준 150m + if (markers != null && !markers.isEmpty()) { + // rampMarkers가 가변 Set인 전제 (클래스 필드 변경 필요) + rampMarkers.clear(); + } + for (WaybleMarker marker : markers) { + Node nearest = nodes.stream() + .min(Comparator.comparingDouble( + n -> HaversineUtil.haversine(marker.lat(), marker.lon(), n.lat(), n.lon()) + )) + .orElse(null); + if (nearest == null) continue; + + double distance = HaversineUtil.haversine(marker.lat(), marker.lon(), nearest.lat(), nearest.lon()); + if (distance <= MARKER_ATTACH_THRESHOLD_METERS) { + waybleMarkers.put(nearest.id(), marker.type()); + if (marker.type() == Type.RAMP) { + rampMarkers.add(nearest.id()); + } + } + } return waybleMarkers; }아래 변경은 선택한 범위 밖이지만, 위 변경을 위해 반드시 함께 적용되어야 합니다(참고용 코드 스니펫):
// 클래스 필드 쪽 개선 (라인 32 부근) private static final double MARKER_ATTACH_THRESHOLD_METERS = 150.0; // Haversine 단위에 맞춰 조정 private final Set<Long> rampMarkers = new HashSet<>(); // Collections.emptySet() -> 가변 Set추가로, HaversineUtil.haversine의 리턴 단위(미터/킬로미터) 확인이 필요합니다. 단위가 km라면 임계값을 0.15 등으로 조정하세요.
🧹 Nitpick comments (2)
src/main/java/com/wayble/server/direction/init/GraphInit.java (1)
32-36: 하드코딩된 상수와 가변 컬렉션 초기화 제안
rampMarkers가Collections.emptySet()으로 초기화되어 있어 실제로 값을 채울 수 없습니다. 가변 Set로 바꾸는 편이 안전합니다.- 거리 임계값 및 그래프 리소스 경로 상수를 도입하면 가독성과 관리성이 좋아집니다.
@@ - private Set<Long> rampMarkers = Collections.emptySet(); + private static final String GRAPH_JSON = "/seocho_gongdeok_pedestrian.json"; + private static final double RAMP_PENALTY = 5.0; + private static final double MARKER_DISCOUNT = 0.5; + private static final double MARKER_ATTACH_THRESHOLD_METERS = 150.0; // 단위 확인 후 조정 + private final Set<Long> rampMarkers = new HashSet<>();그리고 사용부는 아래처럼 상수를 활용하세요.
- try (InputStream graphStream = getClass().getResourceAsStream("/seocho_gongdeok_pedestrian.json")) { + try (InputStream graphStream = getClass().getResourceAsStream(GRAPH_JSON)) {src/main/resources/wayble_markers.json (1)
2-20: 리소스 분리/모듈화 제안(선택)운영/배포 편의와 초기화 성능을 위해 지역별 마커 JSON을 분리하고, 환경설정(예: Spring profile)별로 필요한 리소스만 로딩하는 방식을 고려해 주세요. 현재 단일 파일이 매우 커서 불필요 데이터까지 메모리에 적재될 가능성이 있습니다.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled by default for public repositories
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (3)
src/main/java/com/wayble/server/direction/init/GraphInit.java(1 hunks)src/main/resources/wayble_markers.json(4 hunks)src/test/java/com/wayble/server/direction/service/WalkingServiceTest.java(0 hunks)
💤 Files with no reviewable changes (1)
- src/test/java/com/wayble/server/direction/service/WalkingServiceTest.java
🧰 Additional context used
🧬 Code Graph Analysis (1)
src/main/resources/wayble_markers.json (1)
src/main/java/com/wayble/server/direction/entity/WaybleMarker.java (1)
WaybleMarker(5-11)
🔇 Additional comments (4)
src/main/java/com/wayble/server/direction/init/GraphInit.java (1)
43-52: 그래프 리소스 존재 확인 완료 — 추가 조치 불필요리포지토리에서 다음 리소스 파일을 확인했습니다:
- src/main/resources/seocho_gongdeok_pedestrian.json
- src/main/resources/wayble_markers.json
따라서 현재 변경으로 인해 런타임에서 GRAPH_FILE_NOT_FOUND 예외가 발생할 가능성은 낮습니다. (빌드 시 해당 리소스들이 classpath에 포함되는지 유지해주세요.)
src/main/resources/wayble_markers.json (3)
2-67: 공덕 지역 신규 마커 추가 — 포맷/타입 일관성 확인id/lat/lon/type 포맷과 타입 값(WHEELCHAIR_CHARGER/RAMP/WHEELCHAIR_LIFT/NONE)이 일관적입니다. 데이터 추가 방향성 문제없어 보입니다.
1995-1999: 기존 마커 타입 재분류 확인다음 재분류가 의도대로 반영된 것 확인했습니다.
- 1740825183: RAMP → WHEELCHAIR_LIFT
- 1012654209: RAMP → WHEELCHAIR_CHARGER
- 6875654572: RAMP → NONE
- 2747865798: RAMP → NONE
Also applies to: 2001-2005, 2031-2035, 2151-2155
1-40: 검증 결과: 마커 ID 중복 없음 · 거리 문제 없음 — 추가 조치 불필요요약:
- 검사 대상: src/main/resources/wayble_markers.json (마커 1,312개) vs src/main/resources/seocho_gongdeok_pedestrian.json
- 중복 ID: 0
- 사용한 임계값: 150.0m
- 150m 초과 비율: 0/1,312 (0.00%)
- 최장 거리(상위 1): 62.7m (id: 9169674314)
결론:
- 현재 데이터 기준으로 원 리뷰에서 지적한 중복 ID와 그래프 외부 마커에 대한 우려는 확인되지 않았습니다. 당장 필터링/분할 또는 GraphInit 변경은 필요하지 않습니다.
- 권장: 데이터가 다른 지역(다지역 통합)으로 확장될 경우 동일 검증을 자동화하거나 지역별 분리·거리 임계값 적용을 재검토하세요.
검사한 파일:
- src/main/resources/wayble_markers.json
- src/main/resources/seocho_gongdeok_pedestrian.json
✔️ 연관 이슈
📝 작업 내용
스크린샷 (선택)
Summary by CodeRabbit