VillageSQL is a drop-in replacement for MySQL with extensions.
All examples on this page work on VillageSQL. Install Now →
vsql_http 확장을 사용하면 그 데이터를 쿼리에서 직접 가져오거나 UPDATE 한 번으로 열에 저장할 수 있습니다.
설정
패턴 1: 보강 결과를 열에 저장
가장 흔한 용도: 외부 API에서 가져온 데이터로 열을 채우는 것입니다. 행마다 API를 호출하는 UPDATE를 실행하고, 결과를 저장한 뒤, 저장된 열을 쿼리합니다. 이 예제는 각 주문의 배송 상태를 가져옵니다:shipping_status IS NULL인 행이 남지 않을 때까지 애플리케이션에서 이것을 반복 실행하세요. API 속도 제한 안에 머물도록 배치로 처리하세요.
채우고 나면 쿼리는 저장된 열을 읽습니다 — 쿼리마다 API 호출이 없습니다:
패턴 2: 쿼리 안에서 실시간 조회
캐시하기에는 너무 빨리 바뀌는 데이터 — 환율, 실시간 가격 — 에는 SELECT 안에서 API를 인라인으로 호출할 수 있습니다. 결과의 모든 행이 요청을 일으키므로 결과 집합을 작게 유지하세요.http_get()을 호출하지 마세요.
패턴 3: 조건부 보강
API를 호출하기 전에 WHERE로 필터링하여 실제로 필요한 행에 대해서만 가져오세요:url_encode()에 주목하세요 — 사용자 데이터를 URL에 넣기 전에 항상 인코딩하세요.
API 오류 처리
모든vsql_http 함수는 연결 실패 시 curl의 오류 메시지를 담은 경고와 함께 NULL을 반환합니다. 내용을 사용하기 전에 상태 코드를 확인하세요:
성능 고려 사항
각 HTTP 호출은 동기식이며 쿼리를 막습니다. 각각 200ms API를 호출하는 50행 배치는 최소 10초가 걸립니다.max_execution_time은 SELECT 문만 제한합니다 — 여기에는 효과가 없습니다. 이 UPDATE의 실행 시간에 상한을 두려면, 미리 SELECT CONNECTION_ID()로 연결 ID를 얻어 두고, 너무 오래 실행되면 다른 세션에서 KILL QUERY <id>를 실행하세요:
문제 해결
다음 단계
- SQL에서 HTTP 요청 보내기 — 전체 함수 참조와 응답 파싱
- 트리거에서 웹훅 보내기 — 데이터를 가져오는 대신 변경을 밖으로 밀어내기
함께 보기
- SQL에서 HTTP 요청 보내기 — API 호출에 사용하는 HTTP 함수
- MySQL의 JSON — API가 반환하는 JSON 응답 파싱하기
- 테이블을 REST API로 제공하기 — 자신의 테이블을 HTTP로 공개하기