커넥티드 카 원격 제어 서비스
스마트폰이 차 키를 대신하는 디지털 키를 만들었습니다. 폰과 차는 저전력 블루투스로 직접 신호를 주고받는데, 아이폰이 백그라운드에서 이 연결을 계속 유지해 주지 않는 제약은 GPS 위치 정보를 이용한 우회 설계로 풀었습니다. 문이 열리지 않으면 사람이 길에 서 있게 되므로, 연결이 끊기거나 실패하는 경우를 실제 차량과 센서로 현장에서 재현하며 다듬었습니다. 아이폰 · 안드로이드 앱은 발급된 키와 공유 현황을 관리하는 웹 대시보드로 연결합니다.
다가가면 열리고, 멀어지면 잠기는 키
폰과 차가 저전력 블루투스로 직접 연결됩니다. 앱을 열지 않아도 폰이 백그라운드에서 차의 신호를 찾고, 신호 세기로 거리를 가늠해 다가가면 문을 열고 멀어지면 잠급니다. 아이폰은 앱이 백그라운드에 있을 때 블루투스 연결을 계속 유지해 주지 않아, 그대로 두면 연결이 끊깁니다. 이 제약은 애플 정책을 지키면서 GPS 위치 정보를 이용해 연결을 이어 가는 우회 설계로 풀었습니다. 반응 거리는 가까이 · 중간 · 멀리 중에서 고르며, 거리와 주변 환경에 따라 달라지는 동작은 실제 차량과 센서로 현장에서 확인하고 고쳤습니다. 블루투스 통신 부분은 앱 본체와 분리된 모듈로 묶어, 통신 쪽을 고쳐도 앱 전체가 흔들리지 않게 했습니다. 홈 화면 위젯에서는 앱을 열지 않고 시동 · 잠금 · 비상등을 바로 누를 수 있고, 차종 사양에 맞는 버튼만 보입니다.

폰과 차가 서로를 확인한 뒤에야 키가 됩니다
처음 등록할 때 폰은 블루투스로 차의 키 단말에 연결하고, 출고 여부를 확인한 뒤 차의 고유 인증서, 소유자 인증서, 일회용 인증서를 차례로 검증하고 나서야 키로 등록됩니다. 등록이 끝난 뒤에도 키 인증 정보는 몇 분마다 새로 받아, 오래된 키로는 차를 열 수 없게 했습니다. 차를 판 뒤에는 소유자를 바꾸는 흐름이 따로 있습니다. 단계마다 기록을 남겨, 현장에서 등록이 멈춰도 어느 단계에서 왜 실패했는지 웹 대시보드에서 바로 찾을 수 있게 했습니다.

키를 나눠 줄 때는 사람마다 권한을 따로
이름과 휴대폰 번호로 키를 보내면, 받는 사람이 수락해야 키가 생깁니다. 차량당 최대 두 명까지 나눠 줄 수 있고, 사람마다 카드키, 블루투스, 안심 모드, 자동 잠금 허용을 따로 정하며 언제든 거둘 수 있습니다. 발급된 키와 공유 상태, 등록 실패는 웹 대시보드 한 화면에서 봅니다.

한 달의 운전과 차 상태를 리포트 한 장으로
매달 운행 기록과 차 상태를 리포트 한 장으로 묶었습니다. 주행 거리, 주행 시간, 연비, 공회전 시간을 전월과 비교해 보여 주고, 날짜를 누르면 그날 오전 · 오후의 운행이 한 번씩 펼쳐집니다. 고장 진단은 파워트레인 · 섀시 · 차량 통신 시스템으로 나눠 정상과 점검 필요를 표시하고, 소모품은 교환 시기가 다가온 것부터 알립니다. 정비소에서 교환한 내역은 날짜와 주행 거리로 직접 남길 수 있습니다.

이 작업의 포인트
저전력 블루투스 디지털 키, 다가가면 열리고 멀어지면 잠김
인증서를 단계별로 검증해 등록, 차량당 두 명까지 사람별 권한으로 공유
아이폰 · 안드로이드 앱, 디지털 키 관리 웹 대시보드, 홈 화면 제어 위젯
인사이트
GA4 client_storage: 'none'은 정말 쿠키를 막을까?
두 달 전 이 블로그에 「GA4 쿠키 없이 쓰기」라는 글을 썼습니다. clientstorage: 'none' 으로 쿠키 저장을 끄고, 자체 분석이 쓰던 익명 ID 를 clientid 로 넘기면 쿠키 0개로 GA4 를 쓸 수 있다는 내…
GA4 Measurement Protocol: gtag.js 없이 서버에서 이벤트 보내기
랜딩 페이지의 전송량을 파일 단위로 쪼개 보다가, 가장 큰 파일이 우리 코드가 아니라는 것을 알았습니다. Google Analytics 의 gtag.js 였고, 방문 한 번에 176KB 를 받고 있었습니다. 페이지 전체가 1,094K…
중소 제조업 AI 도입 순서: DX를 먼저 끝내야 할까?
공장을 가진 중소·중견 제조기업 16만여 곳 가운데 스마트공장을 도입한 곳은 19.5%입니다. 회사가 작을수록 이 비율은 더 떨어집니다. 중소벤처기업부가 2025년 4월에 낸 제1차 스마트제조혁신 실태조사 결과입니다. 그림: 기업 규…
Next.js loading.tsx와 404: 버튼이 화면보다 먼저 살아나게 하기
관리 화면 왼쪽 위에 사이드바를 접고 펴는 ☰ 버튼이 있습니다. 폭 하나 바꾸는 버튼인데, 대시보드에서 누르면 2초 넘게 아무 반응이 없었습니다. 레이아웃만 바꾸는 일이 왜 이렇게 오래 걸리는지부터 들여다봤습니다. Next.js 16…



