실시간 주차 센서 데이터를 기반으로 주차 코칭 데이터를 생성하고, 클라이언트에 WebSocket(STOMP)으로 전달하는 마이크로서비스 레포입니다.
parkit._.mov
- Jenkins와 Docker를 활용하여 CI 자동화
- 실시간 스트림 데이터 수집을 위한 Kafka Consumer 구현
- 실시간 주차 코칭 알고리즘 설계 및 구현
- Kafka를 활용해 마이크로서비스 간의 데이터 파이프라인 구축
- WebSocket 기반 실시간 코칭 데이터 스트리밍 구현
analysis-service/: Kafka 센서 이벤트 소비 → 주차 코칭 계산 → Kafka 이벤트 발행socket-service/: Kafka 코칭 이벤트 소비 → WebSocket(STOMP)으로 브로드캐스트report-service/: 주행 세션(start/stop) → 센서 로그 저장/조회 (MongoDB)
report-service 주요 API
POST /api/driving-sessions/startPOST /api/driving-sessions/{sessionId}/stop(body:frontendScore)GET /api/driving-sessions/{sessionId}/report(세션 + 센서로그)
-
sensor-topic(센서 이벤트) → analysis-service consume -
analysis-service 계산
- 코칭:
coaching-event
- 코칭:
-
socket-service가
coaching-eventconsume 후/topic/coaching브로드캐스트 -
(선택) report-service가
sensor-topic을 consume하여 RUNNING 세션에 센서 로그를 자동 저장- Kafka record key가
sessionId이면 해당 세션으로 저장 - key가 없으면 가장 최근 RUNNING 세션으로 저장
- 비활성화:
parkit.kafka.enabled=false
- Kafka record key가
- Real endpoint:
http://localhost:8082/ws/parkit - Real topic:
/topic/coaching - Mock endpoint:
http://localhost:8082/ws/parkit-mock - Mock topic:
/topic/coaching-mock - 테스트 클라이언트:
socket-test.html
코칭 메시지 스키마(요약)
targetAngle/targetDistance: step별 고정값 (angle=deg, distance=cm)currentAngle/currentDistance: 실시간값 (angle=deg, distance=cm)distances: 장애물 거리(cm)
- analysis-service:
http://localhost:8081/swagger-ui.html - socket-service:
http://localhost:8082/swagger-ui.html - report-service:
http://localhost:8083/swagger-ui.html
이 레포는 루트 Gradle 빌드가 없습니다. 서비스 디렉토리에서 실행하세요.
# analysis-service
cd analysis-service
bash ./gradlew clean test
bash ./gradlew bootRun
# socket-service
cd ../socket-service
bash ./gradlew clean test
bash ./gradlew bootRun
# report-service
cd ../report-service
bash ./gradlew clean test
bash ./gradlew bootRun로컬 Kafka가 필요합니다(기본 localhost:9092, env: SPRING_KAFKA_BOOTSTRAP_SERVERS).
report-service는 MongoDB가 필요합니다(env: SPRING_MONGODB_URI, 기본: mongodb://mongodb:27017/parkit).
- 로컬에서 report-service를 호스트에서 직접 실행하면
mongodb://localhost:27017/parkit로 설정하세요.
Known limitations
- analysis-service는 현재 Kafka 메시지에 sessionId가 연결되지 않아(임시로
unknown-session) 멀티 세션 시나리오에서는 step/상태가 섞일 수 있습니다.
docker compose up -ddocker-compose.yml은 MongoDB/Redis를 포함합니다. Kafka는 별도로 준비해야 합니다.