PHP 공공데이터 API 수집 중 HTTP 500 오류 발생? Incorrect integer value 원인과 해결 방법

· 조회수 18

공공데이터포털의 전국주차장정보표준데이터 API를 수집하는 과정에서 예상치 못한 HTTP 500 오류를 겪었습니다.

처음에는 API 호출 문제나 cURL 설정 문제라고 생각했지만 실제 원인은 데이터베이스 컬럼 타입과 공공데이터의 빈 값 처리 방식에 있었습니다.

이번 글에서는 카페24 PHP 환경에서 발생한 실제 사례를 기준으로 원인과 해결 방법을 정리해 보겠습니다.

문제 증상

수집 스크립트를 실행하면 브라우저에는 단순히 다음과 같은 메시지만 표시되었습니다.

페이지가 작동하지 않습니다.
HTTP ERROR 500

처음에는 API 서버 오류 또는 PHP 설정 문제라고 생각했지만 PHP 에러 출력을 활성화한 뒤 실제 원인을 확인할 수 있었습니다.

Fatal error: Uncaught mysqli_sql_exception:
Incorrect integer value: ''
for column 'addUnitTime'

실제 원인

전국주차장정보표준데이터 API를 확인해 보니 일부 데이터는 값이 비어 있는 상태로 전달되고 있었습니다.

<addUnitTime/>

또는 다음과 같은 형태도 존재했습니다.

<addUnitTime></addUnitTime>

PHP에서는 이를 문자열로 변환하면 빈 문자열이 됩니다.

$addUnitTime = (string)$item->addUnitTime;

문제는 데이터베이스 컬럼이 다음과 같이 INT 타입으로 생성되어 있었다는 점입니다.

addUnitTime INT

결국 MySQL은 빈 문자열을 정수형 컬럼에 저장할 수 없었고 예외가 발생하면서 HTTP 500 오류로 이어졌습니다.

해결 방법

조회용 공공데이터는 계산보다 원본 데이터 보존이 중요한 경우가 많습니다.

특히 기관마다 데이터 품질이 다르기 때문에 숫자처럼 보이는 값이라도 빈 문자열이나 특수값이 포함될 수 있습니다.

이번 경우에는 관련 컬럼을 VARCHAR 타입으로 변경하여 문제를 해결했습니다.

ALTER TABLE parking_lots MODIFY addUnitTime VARCHAR(20) NULL;
ALTER TABLE parking_lots MODIFY addUnitCharge VARCHAR(20) NULL;
ALTER TABLE parking_lots MODIFY basicTime VARCHAR(20) NULL;
ALTER TABLE parking_lots MODIFY basicCharge VARCHAR(20) NULL;
ALTER TABLE parking_lots MODIFY dayCmmtkt VARCHAR(20) NULL;
ALTER TABLE parking_lots MODIFY monthCmmtkt VARCHAR(20) NULL;

수정 후에는 동일한 데이터를 다시 수집해도 오류 없이 정상 저장되었습니다.

공공데이터 API 수집 시 주의사항

  • 문서와 실제 응답 데이터가 다른 경우가 존재한다.
  • 빈 값 또는 누락 값이 포함될 수 있다.
  • 기관별 데이터 입력 방식이 다를 수 있다.
  • 수집 전 실제 XML 또는 JSON 응답을 반드시 확인하는 것이 좋다.
  • 조회 목적 데이터는 VARCHAR 저장이 오히려 안정적인 경우가 많다.

마무리

이번 사례에서 HTTP 500 오류의 원인은 API 서버가 아니라 데이터베이스 컬럼 타입이었습니다.

공공데이터 API 수집 과정에서 HTTP 500 오류가 발생한다면 API 호출만 의심하지 말고 실제 에러 메시지와 데이터 타입을 함께 확인해 보시기 바랍니다.

"자신이 지닌 재주는 무엇이든 십분 발휘하라. 가장 아름답게 노래 부르는 새들을 제외하고 다른 새들이 노래하지 않는 숲이 있다 치자. 그 얼마나 적막할 것인가! - 헨리 반 다이크"

- 가진 재주를 발휘하라 -

북마크목록