스마트홈 앱 Autopia 개발기 — SmartThings부터 플랫폼 한계까지

// RECOMMENDED GEAR
Apple 맥북 네오 — A18 Pro칩입문 개발자를 위한 경제형 맥북. Flutter, React 개발에 충분한 성능.
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
스마트홈 앱 Autopia 개발기 — SmartThings부터 플랫폼 한계까지
AI로 집 안 기기를 제어하는 Flutter 앱, Autopia를 만들면서 겪은 이야기를 기록해둔다.
시작은 단순했다
"AI한테 말하면 집 전등이 켜지면 좋겠다."
이 한 줄이 시작이었다. Flutter로 앱을 만들고, SmartThings API로 기기를 연결하면 될 것 같았다. 실제로 SmartThings는 REST API를 공개하고 있어서 접근성이 좋았다.
SmartThings OAuth — 생각보다 험난했다
SmartThings 연동에서 가장 고생한 부분은 OAuth 인증 플로우였다.
처음엔 flutter_web_auth_2 패키지로 Chrome Custom Tab을 열어 딥링크로 돌아오는 방식을 시도했다. 이게 이론적으로는 맞는데, 실제로는 앱 전환 시 Chrome Custom Tab이 닫히지 않는 문제가 있었다. 화면은 전환됐는데 로그인 완료가 안 되는 상황.
몇 번의 삽질 끝에 방향을 바꿨다.
Firestore 폴링 방식으로 전환
앱이 sessionId 생성
↓
외부 브라우저로 SmartThings 로그인 페이지 오픈
↓
로그인 완료 → Cloud Run 서버가 token을 Firestore에 저장
↓
앱이 2초마다 /poll?session_id=xxx 폴링
↓
200 응답 오면 토큰 저장 → 홈화면
딥링크 없이 서버를 중간에 두는 구조다. 덕분에 Chrome Tab 이슈를 완전히 우회했다.
숨어있던 버그들
v1.0.5 ~ v1.0.8까지 배포하면서 잡은 버그들:
| 버전 | 버그 |
|---|---|
| v1.0.5 | CallbackActivity 누락으로 딥링크 수신 불가 |
| v1.0.6 | Basic Auth 형식 오류, redirect_uri 슬래시 불일치 |
| v1.0.7 | Chrome Custom Tab 방식 포기 → 폴링 방식 전환 |
| v1.0.8 | /poll 경로 감지 버그 (req.path → req.query.session_id로 수정) |
특히 v1.0.8의 버그가 트리키했다. Firebase Functions를 Cloud Run으로 배포하면 req.path가 예상대로 동작하지 않는 경우가 있다. 쿼리 파라미터로 판별하는 게 더 안정적이다.
그리고 firebase.json에 predeploy 훅이 없으면 TypeScript 변경사항이 컴파일되지 않고 구버전 JS가 그대로 배포된다. 이걸 모르고 수정했는데 적용이 안 돼서 한참 헤맸다.
플랫폼 확장을 고민하다
SmartThings 연동이 완성된 후 자연스럽게 다른 플랫폼 연동을 고민했다. "삼성폰 유저만 쓸 수 있는 앱은 의미가 없다"는 생각 때문이었다.
Google Home API 탐색
2026년 4월 기준, Google Home API는 Public Beta 상태다.
- Android Native SDK만 존재 (Flutter SDK 없음)
- Developer Console 미오픈 → 일반 배포 불가
- Flutter에서 쓰려면 Kotlin MethodChannel 브릿지 필수
Flutter (Dart) ←→ MethodChannel ←→ Kotlin ←→ Home APIs SDK
구현 공수가 SmartThings 대비 3~4배다. 게다가 Developer Console이 열리지 않아 100명 이상에게 배포 자체가 불가능하다. 보류.
Tuya/스마트라이프 탐색
스마트라이프 앱이 Tuya 기반이라는 걸 알고 흥미로웠다.
- REST API 공개됨 → Flutter에서 바로 사용 가능
- HMAC-SHA256 서명 방식 (서버 사이드 처리 필요)
- 기존 OAuth 서버 구조 재활용 가능
문제는 요금제. Trial 플랜은 상업적 사용 금지, 기기 10개 제한이다. 일반 배포용으로는 Flagship(유료)이 필요하다. 비용 문제로 보류.
Matter 탐색
Matter는 스마트홈 기기의 공통 표준 프로토콜이다. 삼성, 구글, 애플, 아마존이 모두 지원한다.
- 로컬 Wi-Fi에서 기기 직접 제어 (클라우드 불필요)
- Flutter SDK 없음 → 역시 Native 브릿지 필요
- 기기가 Matter를 지원해야 함
아직 Flutter에서 다루기엔 진입 장벽이 높다. 추후 과제.
흥미로운 발견 — SmartThings는 이미 허브
탐색하다가 재미있는 걸 발견했다.
SmartThings 앱에 Google Home, LG ThinQ 기기가 이미 연동되어 있었다. 삼성이 SmartThings를 멀티 플랫폼 허브로 만들어놓은 덕분이다.
즉, Autopia는 SmartThings API 하나만으로 구글홈, LG 기기까지 커버된다 — 삼성폰 유저 한정으로.
비삼성 유저까지 커버하려면 결국 각 플랫폼 API를 직접 구현해야 한다.
현재 상태와 앞으로
Autopia v1.0.8 — Play Console 내부 테스트 배포 완료.
SmartThings OAuth 로그인이 안정적으로 동작하고, 연결된 기기들을 조회하고 제어하는 기본 흐름은 갖춰졌다.
다른 플랫폼 연동은 현재 시점에서는 각각의 이유로 막혀있다:
- Google Home → GA 대기 (2026년 내 예정)
- Tuya → 유료 플랜 필요
- Matter → Flutter SDK 없음
"스마트홈을 하나의 앱으로"라는 비전은 좋지만, 생태계가 아직 그만큼 열려있지 않다. 좋게 말하면 타이밍이 이르다. 나쁘게 말하면 지금 당장은 한계가 분명하다.
Google Home GA가 나오면 다시 도전해볼 생각이다.
Autopia GitHub: github.com/smy383/autopia
이 글 공유하기
// SPONSORED
[>]댓글
아직 댓글이 없어요. 첫 댓글을 남겨보세요!