개발 블로그
← 블로그 목록

인천공항 주차 잔여 조회 서비스 만들기


해외여행을 앞두고 공항 주차장 예약을 하려고 인천공항 사이트에 들어갔다가, 실시간 잔여 현황을 제공하는 공공 API가 있다는 걸 알게 됐습니다. 어차피 API 써보는 연습도 할 겸 간단히 만들어봤습니다.

인천공항 주차 API

공공데이터포털(data.go.kr)에서 "인천국제공항 주차장 정보" API를 찾을 수 있습니다. 주차장별 총 면수, 현재 사용 면수, 잔여 면수를 실시간으로 제공합니다.

GET https://apis.data.go.kr/B551177/StatusOfParking/getIcrsParkingInfo
  ?serviceKey={서비스키}
  &numOfRows=30
  &pageNo=1
  &type=json

응답 파싱

응답 JSON에서 주차장별 정보를 파싱합니다. 주차장 위치(터미널 1/2), 구역(단기, 장기, P1~P6 등), 전체 면수, 잔여 면수가 포함돼 있습니다.

public List<ParkingInfo> getRemains() {
    ResponseEntity<String> resp = restTemplate.getForEntity(apiUrl, String.class);
    JsonNode root = objectMapper.readTree(resp.getBody());
    JsonNode items = root.path("response").path("body").path("items").path("item");

    List<ParkingInfo> result = new ArrayList<>();
    for (JsonNode item : items) {
        result.add(ParkingInfo.builder()
            .parkingName(item.path("parkingname").asText())
            .capacity(item.path("parking").asInt())
            .remaining(item.path("parkingavailable").asInt())
            .build());
    }
    return result;
}

@Data @Builder
public class ParkingInfo {
    private String parkingName;
    private int capacity;
    private int remaining;

    public int getOccupancyRate() {
        return (int) ((double)(capacity - remaining) / capacity * 100);
    }
}

출력 결과 예시

============ 인천공항 주차 현황 ============
[제1터미널]
  단기주차장: 잔여 1,204 / 전체 4,300 (72% 사용 중)
  장기주차장: 잔여 3,812 / 전체 8,200 (54% 사용 중)

[제2터미널]
  단기주차장: 잔여 532 / 전체 2,700 (80% 사용 중)
  장기주차장 P2: 잔여 4,201 / 전체 7,300 (42% 사용 중)
==========================================

스케줄러로 주기적 확인

여행 전날 저녁부터 출발 당일 아침까지 30분마다 주차 현황을 로그로 남기도록 스케줄러를 잠깐 켜두었습니다. 현황이 빠듯해 보이면 일찍 출발하거나 대중교통을 고려할 수 있었습니다.

// application.properties에서 스케줄링 on/off 제어
app.scheduling.parking.enable=true

@Scheduled(fixedDelay = 30 * 60 * 1000)
@ConditionalOnProperty(value = "app.scheduling.parking.enable", havingValue = "true")
public void checkParking() {
    List<ParkingInfo> info = parkingService.getRemains();
    log.info("주차 현황: {}", info);
}

공공 API 이것저것 써보면서 느낀 점

이 프로젝트처럼 간단하게 공공 API를 붙여보는 게 의외로 재미있습니다. 버스 도착 API, 날씨 API, 미세먼지 API 등 생활에 밀접한 데이터들이 많이 공개돼 있어서 아이디어만 있으면 금방 만들 수 있습니다. 복잡한 비즈니스 로직 없이 API 연동과 데이터 파싱 연습을 하기에도 딱 좋습니다.

팁: 공공데이터포털에서 API를 신청하면 보통 즉시 또는 1~2일 내로 승인됩니다. 일일 트래픽 제한이 있지만 개인 프로젝트 수준에서는 넉넉합니다.