강릉시 여행지 주변 공영 주차장 정보를 제공하는 기능을 구현했습니다. 실시간 주차 가능 대수 정보를 외부 API에서 가져와서 사용자에게 제공합니다.
- 지역별 공영주차장 조회: 특정 지역의 모든 공영주차장 목록 조회
- 주변 공영주차장 조회: 특정 좌표 기준으로 가까운 주차장들을 거리순으로 조회
- 실시간 주차정보 업데이트: 외부 API를 통한 실시간 주차 가능 대수 업데이트
- 여행지-주차장 연동: 여행지 상세 정보와 함께 주변 주차장 정보 제공
PublicParking.java - 공영주차장 정보를 저장하는 JPA 엔티티
prkId: 주차장 고유 ID (unique)prkName: 주차장 이름totalLots: 전체 주차 구역 수availLots: 현재 이용 가능한 주차 구역 수latitude,longitude: 주차장 위치 좌표regionCode: 지역 코드 (강릉시: 32230)
PublicParkingRepository.java - 주차장 데이터 액세스 계층
findByPrkId(): 주차장 ID로 조회findByRegionCode(): 지역 코드별 주차장 조회findNearbyParkingLots(): 거리 기반 가까운 주차장 조회 (Haversine 공식 사용)
PublicParkingService.java - 주차장 관련 비즈니스 로직
findNearbyParking(): 주변 주차장 조회 + 거리 계산updateParkingAvailability(): 실시간 주차 정보 업데이트calculateDistance(): Haversine 공식을 이용한 거리 계산findByRegion(): 지역별 주차장 목록 조회findNearestParking(): 가장 가까운 주차장 1개 조회
ParkingController.java - 주차장 관련 REST API 엔드포인트
GET /api/parking/region/{regionCode}: 지역별 주차장 목록GET /api/parking/nearby: 주변 주차장 조회POST /api/parking/update: 실시간 주차 정보 업데이트
PublicParkingResponseDto.java - 클라이언트로 전송할 주차장 정보
- 거리 정보 포함/미포함 두 가지 변환 메서드 제공
**PlaceService.java**에서 주차장 정보를 함께 제공:
getPlaceDetailWithParking(): 여행지 상세 + 주변 주차장 5개getPlaceDetailWithNearestParking(): 여행지 상세 + 가장 가까운 주차장 1개- 현재 강릉시(지역코드: 32) 여행지만 주차장 정보 제공
PlaceDetailWithParkingDto.java - 여행지 정보 + 주차장 목록을 함께 반환
**DataInitializer.java**에서 개발/테스트용 주차장 데이터 생성:
- 강릉시 주요 주차장 5개소 초기 데이터
- 성내동광장주차장, 강문제2공영주차장, 주문진해안주차타워 등
parking:
api:
key: ${PARKING_API_KEY:}
url: https://www.parking.go.kr/api/getParkRltmParkingConfig.java - 외부 주차장 API 호출을 위한 WebClient 빈 설정
- 거리 계산: Haversine 공식을 사용한 정확한 거리 계산
- 실시간 업데이트: 외부 API 연동으로 실시간 주차 가능 대수 갱신
- 지역 필터링: 강릉시(32230) 지역만 주차장 정보 제공
- 장애 대응: 외부 API 호출 실패 시 캐시된 데이터 사용
- 트랜잭션 관리: 읽기 전용 트랜잭션과 업데이트 트랜잭션 분리
GET /api/parking/nearby?latitude=37.8056&longitude=128.9084®ionCode=32230&limit=5GET /api/parking/region/32230POST /api/parking/updateCREATE TABLE public_parking (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
prk_id VARCHAR(255) NOT NULL UNIQUE,
prk_name VARCHAR(255) NOT NULL,
total_lots INTEGER,
avail_lots INTEGER,
latitude DECIMAL(10,7),
longitude DECIMAL(10,7),
region_code VARCHAR(255),
created_at TIMESTAMP,
updated_at TIMESTAMP
);- 지역 확대: 강릉시 외 다른 지역 주차장 정보 추가
- 실시간 알림: 주차 가능 대수 변화 시 알림 기능
- 예약 기능: 주차장 사전 예약 시스템 연동
- 결제 연동: 주차 요금 결제 시스템 통합
- 주차장 리뷰: 사용자 리뷰 및 평점 시스템