DevLog

엔지니어링 블로그를 한 곳에서 탐색하고, 최근 발행 흐름을 빠르게 파악할 수 있는 서비스 입니다.

Quick Links

  • Latest Feed
  • Engineering Directory

Support

  • 소개
  • 개인정보처리방침

Contribute

  • 원하는 블로그 추가 (준비 중)
  • Feedback

© 2026 DevLog Inc. All rights reserved.

본 사이트는 공개 RSS 피드를 통해 콘텐츠를 수집하며, 모든 콘텐츠의 저작권은 원저작자에게 있습니다.

Back to Feed
Read Original

Contents

Continue Reading

  • More from 쏘카
#Mobile

쏘카프레임 - 블루투스 모듈

쏘카프레임 - 블루투스 모듈
01

Summary

차 문 여는 블루투스 로직, 쏘카는 왜 아키텍처부터 새로 짰을까?

iOS와 Android의 파편화된 블루투스 API를 하나로 묶어 비즈니스 유연성을 극대화한 쏘카프레임 설계기

쏘카, 일레클, 따릉이 등 다양한 모빌리티를 하나의 앱으로 제어하기 위해 쏘카가 구축한 커스텀 블루투스 모듈의 핵심 설계를 소개합니다. 로우 레벨 API의 한계를 극복하고 기기의 정체성을 클래스 단위로 응집시킨 '쏘카프레임'의 아키텍처와 그 가치를 다룹니다.

  • 01플랫폼 API의 파편화를 극복하고 기기 중심의 객체지향적 추상화 계층 구축
  • 02가상 스캔 매니저를 통한 iOS와 Android의 블루투스 동작 방식 차이 완벽 해소
  • 03BluetoothSpec과 Handle의 분리로 실시간 비즈니스 로직 교체 유연성 확보
  • 04비즈니스 계층을 하드웨어 복잡성으로부터 분리하여 개발 생산성 획기적 개선
  • 05하드웨어 의존성을 끊어낸 Mocking 전략으로 물리적 기기 없는 테스트 환경 구현

+RECOMMENDATION

다양한 하드웨어 기기와 통신해야 하는 모바일 서비스를 개발하거나, 플랫폼 간 API 동작 차이로 인해 코드 중복에 시달리는 엔지니어에게 이 아키텍처를 추천합니다. 특히 확장성 있는 블루투스 라이브러리를 직접 설계하려는 팀에게 매우 유용한 가이드가 될 것입니다.

The Problem

iOS의 CoreBluetooth와 Android의 bluetooth API는 하드웨어 추상화 계층에 대응하는 Low-Level 인터페이스로 제공되어 기기의 정체성이나 하위 비즈니스 맥락을 응집력 있게 담아내지 못하는 한계가 있었습니다. 또한, 두 플랫폼 간의 스캔 정책 및 콜백 구조의 차이로 인해 코드 파편화가 발생하고, 새로운 기기 도입 시마다 중복된 통신 로직을 작성해야 하는 유지보수의 어려움이 존재했습니다.

The Solution

플랫폼 API 위에 '쏘카프레임 블루투스 모듈'이라는 새로운 추상화 계층을 구축하여 기기의 정적인 정체성(Spec)과 동적인 행동(Handle)을 분리하고, 이를 관리하는 BluetoothHost와 BluetoothRemote 개념을 도입했습니다. 특히 iOS의 단일 스캔 제한과 같은 플랫폼별 동작 차이를 해결하기 위해 여러 스캔 요청을 논리적으로 병합하는 '가상 스캔 매니저'를 구현하여 아키텍처를 통일했습니다.

The Result

하드웨어 제어와 비즈니스 로직의 완전한 분리를 통해 개발자가 스캔, 연결, 세션 유지 등의 복잡한 절차 대신 비즈니스 의도 구현에만 집중할 수 있는 환경을 조성했습니다. 새로운 기기 도입 시 기존 코드를 수정하지 않고 확장할 수 있는 구조를 확보했으며, 하드웨어 의존성을 제거한 Mock 객체 활용이 가능해져 물리적 기기 없이도 테스트 코드로 시스템 안정성을 검증할 수 있게 되었습니다.

Trade-off

본문에 명시적인 한계점은 기술되지 않았으나, 플랫폼 고유 API 위에 추가적인 추상화 레이어를 도입함에 따라 개발자의 초기 학습 곡선이 발생하고 모듈 자체의 유지보수 비용이 추가될 수 있습니다. 또한, 극도로 정밀한 하드웨어 직접 제어가 필요한 특수 케이스에서는 추상화 계층이 제공하는 인터페이스 외에 추가적인 우회 경로 설계가 필요할 가능성이 일반적으로 예상됩니다.

03

Key Concepts

Concept · 01

BluetoothHost & BluetoothRemote

블루투스 연결 관리자와 기기 대상을 추상화한 개념으로, 기기의 생명주기와 통신 콜백을 관리하는 핵심 인터페이스입니다.

  • BluetoothHost는 기기 목록을 관리하고 가상 스캐너를 통해 적절한 리모트를 탐색함
  • BluetoothRemote는 기기별로 다른 통신 루틴을 캡슐화하여 앱 단의 복잡도를 제거함
Concept · 02

BluetoothSpec & BluetoothHandle

기기의 고유 식별 정보와 실제 통신 과정에서 수행할 비즈니스 행동 지침을 분리하여 정의한 명세입니다.

  • Spec을 통해 CarID나 UUID 같은 정적인 정보를 관리하여 기기 탐색 정확도를 높임
  • Handle을 통해 보안 커맨드 재발급이나 상태 리포팅 등 가변적인 비즈니스 로직을 실시간으로 교체함
Concept · 03

가상 스캔 매니저 (Virtual Scan Manager)

OS의 스캔 정책 제약을 모듈 레벨에서 해결하기 위해 여러 스캔 요청을 논리적으로 병합하는 매니저입니다.

  • 새로운 스캔을 중복 허용하지 않는 iOS CoreBluetooth의 제약을 우회하여 최적의 요청만 OS에 전달함
  • 플랫폼 간의 동작 파편화를 해소하여 서비스 시나리오 설계의 안정성을 확보함
Continue reading · same source

쏘카More from 쏘카

View all posts from 쏘카
  • S3 + CloudFront 기반 SPA 배포에서 캐시와 fallback 전략 설계하기

    CloudFrontS3SPA
    2주 전
  • 쏘카 디자인 시스템 2.0 개발기 2편: 기술로 굴리기(웹)

    Design SystemReactComponent Architecture
    4개월 전
  • 쏘카 디자인 시스템 2.0 개발기 1편: 시스템으로 굴리기(웹)

    Design SystemFigmaFigma Plugin
    4개월 전
  • Node.js 컨테이너, 왜 깔끔하게 안 죽을까? (feat. Graceful shutdown)

    Node.jsKubernetesDocker
    5개월 전
  • 쏘카프레임 - 앱 프레임워크와 개발자 경험

    Socar Frame개발자 경험Android
    6개월 전

Source

쏘카
쏘카
Engineering Blog

Published · January 8, 2026

Topics

BluetoothBLEMobile ArchitectureSocarFrameiOSAndroidAbstraction Layer