쏘카, 블루투스 통신을 위한 쏘카프레임 아키텍처 공개

by DD
4개월 전
조회수 38

쏘카는 차량 제어, 일레클, 따릉이 제어를 위해 블루투스 통신과 서버 통신을 혼용하며, 블루투스 통신은 서버 통신보다 높은 신뢰성을 가짐

쏘카프레임은 iOS와 Android 플랫폼의 블루투스 API 파편화 문제를 해결하고, 기기별 로직을 추상화하여 코드 재사용성을 높임

쏘카프레임은 BluetoothHost, BluetoothRemote, BluetoothSpec, BluetoothHandle 등의 추상화 계층을 통해 기기 확장성비즈니스 로직 분리를 달성

쏘카프레임 도입으로 앱 개발자는 블루투스 하드웨어 복잡성에서 벗어나 비즈니스 로직에 집중 가능하며, 테스트 용이성 확보

쏘카는 쏘카프레임의 BluetoothCore 계층을 오픈소스로 공개하여 기술 커뮤니티에 기여할 가능성을 열어둠

플랫폼 API 파편화 문제 해결

쏘카프레임은 iOS의 CoreBluetooth와 Android의 Bluetooth API의 차이로 인한 개발 어려움을 해결하기 위해 설계되었다. 각 플랫폼의 API는 하드웨어 추상화 계층에 대응하지만, 기기의 맥락을 담지 못하는 Low-Level 인터페이스에 불과하다는 문제점을 지적한다.

쏘카프레임은 플랫폼 API 위에 추상화 계층을 구축하여 기기의 정체성을 캡슐화

앱 개발자는 기기 클래스가 제공하는 고유 인터페이스를 활용하여 비즈니스 로직 구현에 집중 가능

가상 스캔 매니저(Virtual Scan Manager)를 도입하여 iOS의 스캔 제약 해결

BluetoothHost와 BluetoothRemote의 역할

쏘카프레임은 BluetoothHostBluetoothRemote를 통해 블루투스 연결을 관리한다. BluetoothHost는 블루투스 매니저 역할과 함께 리모트 목록을 관리하고, 리모트의 생명주기 이벤트 콜백을 호출한다.

BluetoothHost: 가상 스캔 매니저를 통해 스캔 요청을 관리하고, 리모트의 생명주기 콜백 호출

BluetoothRemote: STS, 일레클, 따릉이 등 각 기기를 추상화하여 기기별 로직을 캡슐화

ConnectfulRemote와 같은 레이어 확장을 통해 연결 상태 관리가 필요한 기기 지원

BluetoothSpec과 BluetoothHandle의 분리

쏘카프레임은 기기 정보를 BluetoothSpecBluetoothHandle로 분리하여 관리한다. BluetoothSpec은 기기의 정적인 정체성을, BluetoothHandle은 동적인 행동 지침을 정의한다.

BluetoothSpec: CarID, BikeID, UUID 등 기기의 정적인 정체성 정보 포함

BluetoothHandle: aliveMessage 전송, 커맨드 재발급 등 동적인 비즈니스 로직 관리

이 분리를 통해 쏘카 앱은 차량과의 물리적 연결을 끊지 않고도 비즈니스 로직 실시간 교체 가능

쏘카프레임 도입의 기술적 가치

쏘카프레임 도입을 통해 쏘카는 수평/수직 확장성 확보, 인프라와 비즈니스 영역 분리, 비즈니스 유연성 확보, 테스트 용이성, 오픈 소스 가능성이라는 5가지 실효적 가치를 얻었다.

수평/수직 확장성: 새로운 블루투스 기기 도입 시 기존 코드 수정 없이 새로운 구현체 추가 가능

인프라와 비즈니스 영역 분리: 앱 개발자는 하드웨어 복잡성에서 벗어나 비즈니스 의도에 집중

테스트 용이성: 하드웨어 의존성을 끊어내고 Mock 객체 구현 용이

오픈 소스 가능성 및 기술 생태계 기여

쏘카프레임은 BluetoothCoreBluetoothCommon 두 계층으로 분리되어 있어, 향후 BluetoothCore를 오픈소스로 공개할 가능성을 열어두었다. 이는 쏘카의 기술을 외부 개발자들과 공유하고, 기술 커뮤니티에 기여하는 것을 의미한다.

BluetoothCore: BluetoothHost, BluetoothRemote, BluetoothHandle, BluetoothSpec 등 핵심 로직 포함

BluetoothCommon: 쏘카 전용 비즈니스 로직 포함

오픈 소스화를 통해 기술 생태계에 기여하고, 기술 경쟁력 강화 기대

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