
핵심요약
쏘카는 앱으로 차량, 일레클, 따릉이 등의 잠금 해제 및 제어를 지원합니다. 이를 위해 쏘카프레임은 파편화된 플랫폼 블루투스 API를 추상화하고, 기기의 맥락을 응집하며, iOS와 Android 간의 동작 차이를 해소하는 블루투스 모듈을 개발했습니다. 이 모듈은 확장성, 비즈니스 유연성, 테스트 용이성, 오픈소스 가능성 등의 가치를 제공합니다.
쏘카프레임 - 블루투스 모듈
쏘카의 이동수단 제어 방식
- 쏘카, 일레클, 따릉이 등 이동수단 제어는 내부에 장착된 단말기와 서버 또는 블루투스를 통해 데이터를 송수신하여 이루어집니다.
- 블루투스 통신은 서버 통신보다 신뢰성이 높아 가능한 경우 우선적으로 사용됩니다.
- 쏘카프레임은 이러한 기능 구현을 위한 블루투스 모듈을 제공합니다.
블루투스 모듈 개발 배경
- 플랫폼별 블루투스 API의 파편화 및 서비스 요구사항 대응의 어려움을 해결하고자 합니다.
- 하드웨어 맥락 응집: 플랫폼 API(iOS: CBPeripheral, Android: BluetoothDevice)는 Low-Level 인터페이스로, 기기 맥락을 담지 못해 개발자에게 어려움을 줍니다.
- 플랫폼 코드 차이: iOS CoreBluetooth와 Android bluetooth 간 스캔 동작 등의 차이로 인한 파편화를 해결합니다.
쏘카프레임 블루투스 모듈 구조
- 추상화 계층: 표준 블루투스 규격 코드 위에
BluetoothHost(관리자)와BluetoothRemote(연결 대상) 추상화 계층을 도입했습니다. - 기기 확장성:
BluetoothRemote인터페이스를 따르는 새로운 기기 구현체 추가 시 기존 로직 수정 없이 유연하게 확장 가능합니다. - 관심사 분리: 기기의 고유 정보(
BluetoothSpec)와 동적 행동 지침(BluetoothHandle)을 분리하여 관리합니다. - 코드 예시: 쏘카프레임 사용 시
openDoorCommand와 같이 명확한 의도 선언으로 복잡한 절차 나열 대신 비즈니스 로직에 집중할 수 있습니다.
블루투스 모듈의 가치
- 확장성: 수평적(새로운 기기 추가) 및 수직적(연결 관리, 보안 기능 고도화) 확장을 용이하게 합니다.
- 인프라-비즈니스 분리: 하드웨어 복잡성을 은닉하여 앱 개발자가 비즈니스 로직에만 집중할 수 있도록 합니다.
- 비즈니스 유연성: iOS와 Android 간 아키텍처 통일로 의사 결정 속도 향상 및 신규 기능 개발 유연성 확보합니다.
- 테스트 용이성: 하드웨어 의존성을 끊어내 Mock 객체 구현 및 예외 상황 검증 용이성을 높입니다.
- 오픈소스 가능성:
BluetoothCore계층은 기술 커뮤니티 기여 가능성을 열어둡니다.