본문 바로가기

이 포트폴리오의 원본은 https://ai.iruyo.com (심재빈) 입니다 · 출처 식별자 jbx-7f3a2e9b

← 개인 프로젝트

iOS App 단독

ShortKit — 물리 이벤트 Trigger Plane (iBeacon → Webhook)

비콘의 진입·이탈을 감지해 지정한 URL을 자동 호출하는 iOS 앱입니다. 감지와 실행을 분리해, 호출을 받을 수 있는 모든 곳과 연결할 수 있습니다.

기간
2025.11 – 2026.02 · 4개월
본인 역할
iBeacon 영역에 진입하거나 이탈하는 순간을 감지해, 등록된 webhook URL을 호출하는 iOS 앱을 개발했습니다.
정량 임팩트
GitHub 공개 OSS(github.com/je-empty/ShortKit)로 2025.11.20부터 운영 중입니다. 감지 앱 ShortKit과 실행 앱 IntentCP를 함께 구성해 '비콘 감지 → 주소 호출 → 스마트홈 제어' 흐름을 구현했습니다.
버전·릴리즈
GitHub 공개 OSS (2025.11.20 시작·운영 중)

링크

기술

  • iBeacon
  • Webhook
  • Core Location

물리 이벤트(iBeacon 근접)를 감지하면 미리 정의한 URL이나 Webhook을 자동 호출하는 트리거 앱을 설계해 공개했습니다. 감지(Trigger Plane)와 실행을 분리해, 실행 대상을 특정 서버에 묶지 않도록 구성했습니다.

ShortKit — iBeacon 근접 감지로 자취 자동화감지 앱(ShortKit) + 실행 앱(IntentCP)을 나눠 한 벌 구성 · webhook URL로 범용 연동 · 1인 OSSShortKit — iBeacon 근접 감지로 자취 자동화감지 앱(ShortKit) + 실행 앱(IntentCP)을 나눠 한 벌 구성 · webhook URL로 범용 연동 · 1인 OSSShortKit — 감지 앱 (Swift)CoreLocation region monitoring스마트홈 제어대안 경로iBeacon 영역UUID + Major/Minor현관·복도 좁은 근접① Enter / Exit 감지들어올 때·나갈 때 URL 분리② 백그라운드 감지앱 종료 상태에서도 동작감지·호출 결과는 알림webhook URL 호출서버에 묶이지 않는 범용IntentCP — 실행 앱호출 받아 명령 변환스마트홈 기기 제어조명·플러그 등 자동화대안 수신처 (URL만 있으면)Home Assistant · IFTTT개인 서버 등에 그대로 연동2025.11~ 운영 · GitHub 공개 OSS(Swift) · 감지(ShortKit)+실행(IntentCP) 2앱 1벌 · 자취남 영상 자동화 시연 사용

배경·과제

사람이 직접 명령하지 않아도 물리 이벤트가 동작을 일으키게 하고 싶었습니다. 현관문 자동화처럼 ‘문 앞에서만’ 작동해야 하는 경우에는 GPS보다 범위가 좁은 iBeacon이 적합했습니다. 근접 감지를 트리거로 삼되, 감지와 실행 구조를 섞지 않는 것을 목표로 삼았습니다.

수행·기여

  • 물리 이벤트 Trigger Plane을 설계하고 구현했습니다. iBeacon 영역의 진입(Enter)·이탈(Exit)을 감지해, 미리 등록한 URL을 호출하는 iOS 앱을 Swift로 개발했습니다. 앱이 꺼진 상태에서도 백그라운드에서 동작하며, 감지와 호출 결과를 로컬 알림으로 확인합니다.

  • 감지와 실행을 명확히 분리했습니다. ShortKit은 이벤트 감지와 URL 호출까지만 담당하며, 실제 동작은 다른 시스템이 수행합니다. 컴패니언 앱 IntentCP가 그 호출을 받아 기기 제어를 처리하는 구조가 한 예입니다.

  • 실행 대상을 특정 서버에 종속시키지 않도록 설계했습니다. URL이나 Webhook을 받을 수 있는 엔드포인트라면 어떤 것이든 연결됩니다. IntentCP(Python·FastAPI)는 한 예시에 불과하며, Home Assistant, IFTTT, 개인 서버, Notion, Sheets, DB 등도 같은 방식으로 연동됩니다.

  • 앱이 종료되어도 감지를 유지하도록 했고, 호출은 webhook 한 줄로 단순화했습니다. 호출 신뢰성과 진입 즉시 실행되지 않도록 하는 조건 검증은 개선 과제로 남겨두었습니다.

성과