아이들 노는 걸 보다 보면, 가끔 심장이 철렁 내려앉는 순간이 있다.
이 이야기는 바로 거기서 시작한다.
조카들과 조카 손주(?)들이 집에 놀러 오면 어김없이 시작되는 이벤트가 있다. 장난감 자동차 레이싱이다. 상상 속 엔진 소리는 요란하고, 속도감은 거의 F1급이다. 문제는 브레이크다. 아직 그 개념이 손에 잘 안 붙어 있다. 경쾌하게 웃다가도, 어느 순간 ‘이거 진짜 위험한데…’라는 생각이 스친다.
그러다 문득 이런 질문이 떠올랐다.
“카메라로 이걸 감지할 수 있지 않을까?”
장난감 차든, 실제 자동차든, 진입 속도가 빠르면 미리 알 수 있다면 어떨까. 그렇게 생각이 꼬리를 물었고, 결국 하나의 프로젝트가 됐다.
이번 이야기는 평소 하던 system design 분석과는 좀 다르다. 훨씬 생활 밀착형이고, 개인적이고, 약간은 장난스럽다. 하지만 분명히 technical 하다. 오늘은 Ring camera를 작은 속도 감지기처럼 사용하는 실험에 대한 이야기다.

그냥 카메라였던 게, 갑자기 플랫폼이 되다
Ring에서 새 카메라를 하나 보내줬다. 처음엔 평범했다. 깔끔한 외형, 넓은 시야각, 야외 설치용 하드웨어. 딱 그 정도 느낌.
그런데 진짜 흥미로운 건 하드웨어가 아니었다.
바로 Ring App Store.
이게 왜 중요하냐면, 이 App Store를 통해 개발자용 기능이 열렸다. Partner API를 사용하면 camera event를 구독할 수 있다. motion detection, vehicle detection, package detection 같은 이벤트가 발생하면, Ring의 cloud service가 backend로 HTTP request를 보내준다.
이 순간, 카메라의 성격이 완전히 달라진다.
단순히 ‘보는 장치’가 아니라, event를 발생시키는 programmable sensor가 되는 거다.
솔직히 말하면, 이 지점에서 호기심이 폭발했다.
이 프로젝트를 한 줄로 요약하면
아주 쉽게 말하면 이렇다.
카메라가 차를 보면, 서버에 알려주고, 서버가 영상 보고 속도를 계산한다.
끝이다.
레이더도 없고, 특수 장비도 없다. event, video clip, 그리고 약간의 ML과 계산뿐이다.
이제 하나씩 천천히 풀어보자.
Step 1. 카메라 설치 – 시야가 전부다
우선 카메라는 driveway가 잘 보이는 위치에 설치했다. 나뭇가지가 가리지도 않고, 각도도 너무 비뚤어지지 않게.
차가 driveway zone에 들어오면 바로 감지되도록 말이다.
디바이스를 계정에 연동하고 onboarding을 끝내면, 새로운 integration feature를 활성화할 수 있다. 여기서부터 개발자 포털이 열린다.
Step 2. Event는 Webhook으로 온다
포털에서 가장 먼저 하는 일은 webhook URL 등록이다.
카메라에게 이렇게 말하는 셈이다.
“뭔가 일어나면, 여기로 알려줘.”
그리고 어떤 일이 중요한지도 고른다. 이번 실험에서는 vehicle detection (driveway zone) 만 선택했다.
이제 차가 driveway에 들어오는 순간, event가 발생한다.
payload에는 이런 정보들이 담긴다.
- event type
- camera ID
- timestamp
- event ID (이게 나중에 핵심이다)
요청은 /webhook handler로 들어온다. 여기서 signature를 검증하고, JSON을 파싱한 뒤, 바로 ACK를 돌려준다.
중요한 포인트는 이거다. 무거운 작업은 절대 여기서 안 한다. background job으로 넘긴다. webhook은 빠르게 끝내는 게 정답이다.
Step 3. 전체 아키텍처는 일부러 단순하게
흐름은 정말 직관적이다.
- 카메라가 차량을 감지
- webhook 호출
- backend가 video clip 다운로드
- ML model로 차량 위치 추적
- 이동 거리 기반 속도 계산
- dashboard에 결과 표시
카메라는 보고, 서버는 계산하고, 대시는 보여준다.
괜히 복잡하게 만들 이유가 없다.
Step 4. Video Clip – 몇 초면 충분하다
event ID를 사용하면 API에서 MP4 video clip에 대한 temporary link를 준다.
보통 감지 시점을 전후한 몇 초짜리 영상이다. 그런데 이 정도면 충분하다. 속도 계산에 필요한 정보는 다 들어 있다.
처음 영상을 재생했을 때 기억이 난다. 타이어가 바닥을 스치는 소리, 그림자가 프레임을 가로지르는 느낌. 그냥 driveway 영상인데 묘하게 생생했다.
Step 5. YOLO – 복잡할 필요는 없다
vehicle detection에는 YOLO family model을 사용했다.
YOLO는 “You Only Look Once”의 약자다. 각 frame을 보고 object 위치를 바로 알려주는 real-time object detection model이다.
여기서는 고급 tracking은 전혀 안 한다.
- frame별 vehicle bounding box
- 위치 변화
이 정도면 충분하다. 우리가 필요한 건 ‘얼마나 이동했는지’뿐이니까.
Step 6. Pixel을 Speed로 바꾸는 순간
차량이 영상 속에서 이동한 pixel 거리.
이걸 그대로 쓰면 의미가 없다. 그래서 calibration value를 하나 둔다. 이 카메라 위치에서 pixel과 실제 meter를 매핑해주는 값이다.
거리 / 시간.
그게 speed다.
복잡한 공식도 없고, 마법도 없다. 다만 가정은 신중해야 한다.
처음 speed 숫자가 dashboard에 떴을 때, 솔직히 좀 웃음이 났다. ‘어? 이게 되네?’라는 느낌.
Step 7. Dashboard – 모든 게 여기서 만난다
dashboard에서는 backend 데이터를 그대로 보여준다.
- 감지된 차량 목록
- 추정 speed
- 해당 video clip
항목을 클릭하면 영상이 재생된다.
카메라가 본 것, model이 인식한 것, 그리고 계산된 speed가 한 화면에 모인다.
작은 퍼즐이 맞춰지는 느낌이다.
이게 왜 의미가 있을까?
처음엔 그냥 재미로 시작한 프로젝트다. 아이들 장난감 차에서 출발한 호기심.
하지만 생각해보면, 이건 proactive safety로 이어진다.
- driveway에 너무 빠르게 들어오는 차량 알림
- 아이들이 놀고 있을 때 위험 감지
- 사고가 나기 전에 징후를 포착
그리고 이건 집 밖으로도 확장된다.
- 매장 foot traffic 분석
- shoplifting detection
- 작업장 safety alert
- warehouse에서 forklift 과속 감지
event를 webhook으로 열어주는 순간, 카메라는 더 이상 수동적인 장치가 아니다.
문제를 먼저 감지하는 시스템이 된다.
기억해둘 만한 한 문장
카메라가 software와 대화하기 시작하면, 기록 장치가 아니라 사고 예방 장치가 된다.
이 문장이 계속 머리에 남았다.
자주 나오는 질문들
Q1. ML을 깊이 알아야 하나요? (2025년 기준)
아니다. YOLO 같은 pre-trained model만으로도 충분히 시작할 수 있다.
Q2. 속도는 정확한가요?
정확한 계측이라기보다는 합리적인 추정이다.
Q3. polling 대신 webhook을 쓰는 이유는?
latency, 확장성, 구조 면에서 webhook이 훨씬 낫다.
Q4. video clip 길이는 얼마나 되나요?
보통 몇 초 정도다. motion 분석에는 충분하다.
Q5. 사람 감지도 가능한가요?
event 종류와 calibration을 바꾸면 가능하다.
Q6. Ring 전용인가요?
이 구현은 Ring 기반이지만, 개념 자체는 범용적이다.
Q7. 가장 까다로운 부분은?
calibration. 현실 세계와 pixel을 맞추는 작업이 생각보다 어렵다.
Q8. 여러 카메라로 확장할 수 있나요?
아키텍처상 문제 없다.
Q9. 이건 demo인가요, production인가요?
지금은 demo. 다듬으면 충분히 production도 가능하다.
Q10. 어디서 early access를 신청하나요?
developer.amazon.com/ring에서 Ring App Store 빌드를 위한 early access를 신청할 수 있다.
좋은 프로젝트는 꼭 거창한 계획에서 시작하지 않는다.
어느 날 driveway에서 들린 플라스틱 바퀴 소리 하나.
잠깐의 멈춤.
그리고 이런 생각.
“이걸로 뭔가 만들 수 있지 않을까?”
답은 의외로 간단했다.
가능하다.
'일상 > IT' 카테고리의 다른 글
| 같은 강의인데 가격이 다르다? IP 주소에 따라 달라지는 온라인 강좌 가격의 비밀 (0) | 2026.01.23 |
|---|---|
| DB 없이 수억 건 검색? 메모리 다이어트의 마법, 블룸 필터 파헤치기! (0) | 2026.01.20 |
| 구글 Antigravity 에디터, 하루 만에 털린 이유: AI 에이전트 프롬프트 인젝션 정리 (0) | 2026.01.11 |
| Norton Neo 브라우저 후기: AI 요약·Ad Block까지 되는 차세대 브라우저 써보니 (0) | 2026.01.10 |
| HTTP 402 Payment Required 제대로 쓰는 법: X42로 API micropayment 구현하는 완벽 가이드 (0) | 2026.01.05 |