소프트웨어 전문지 마이크로소프트웨어 394호는 클라우드(Cloud)와 백엔드(Back-End)를 주제로 담았습니다. 모바일 테스트, 데브옵스, PaaS, 마이크로서비스 아키텍처 등 마소 394호의 주요 기사들을 IT조선 독자에게도 소개합니다. [편집자주]

STF(Smartphone Test Farm)는 다수의 디바이스를 디바이스팜으로 구성해 호스팅할 수 있게 해주는 오픈소스다. 사이버에이전트(CyberAgent)의 시모 키누넨(Simo Kinnunen)과 귄터 브루넌(Günther Brunner)이 사내에서 쓰기 위해 개발을 시작했다. 2016년 7월부터 헤드스핀(HeadSpin)사와 개인 개발자(OpenSTF라는 이름으로 2015년 말부터 시작했음)의 지원을 받고 있다.

깃허브(github.com/openstf/stf)에서 2018년 10월 기준 7900개가 넘는 스타와 1200회가 넘는 포크가 기록돼 있다. 2018년 8월 9일 3.4.0 버전이 릴리즈 됐다.

STF를 활용하면 웹브라우저에서 디바이스팜에 접근해 디바이스를 원격으로 제어할 수 있는 서비스를 구현할 수 있다. 이 외에도 사용자 인증, 디바이스 정보 제공, API 사용을 위한 토큰(Token) 관리, ADB키(ADB Keys) 관리 기능을 제공한다.

STF는 일본에서 팔리는 디바이스 170여 개 정보를 담은 데이터베이스를 가지고 있으며, 이 데이터베이스에 디바이스를 추가 또는 삭제할 수 있다. 연결된 디바이스 정보는 데이터베이스를 기준으로 표시한다. <그림1>과 같이 표시할 디바이스 정보를 선택할 수 있다. 디바이스가 현재 외부에 연결돼 사용 중인지 나타내는 ‘Status’, 사용 중인 사용자 이름(User), 모델명(Model), 제품명(Product), 통신사(Carrier), 출시일(Release), 운영체제(OS), 설치위치(Location) 등 여러 정보를 볼 수 있다.

디바이스 정보 제공. / 마이크로소프트웨어 394호 발췌
디바이스 정보 제공. / 마이크로소프트웨어 394호 발췌
STF 서버는 다른 서비스와 마찬가지로 프론트엔드(Frontend), 백엔드(Backend), 클라이언트(Client) 파트로 나눠진다. 특히 백엔드는 최신 트렌드에 맞게 마이크로서비스로 구성된다.

STF는 서버 구성 초기 단계에서 리씽크DB에 170여 개의 디바이스 정보를 담고 있다. 디바이스의 물리적인 정보 외 사용자 정보, ADB키, 사용자 토큰 정보 등 브라우저(프론트엔드)에서 들어와 발생하는 접속 및 활동 로그도 리씽크DB에 저장한다.

리씽크DB는 실시간 웹에 최적화된 오픈소스 데이터베이스다. JSON 기반의 NoSQL 데이터베이스며, 폴링(Polling)이 아닌 푸시(Push) 기반 DB다. 특정 데이터에 업데이트가 발생하면 프론트엔드 서비스가 이를 받아 실시간으로 웹을 함께 업데이트 한다.

백엔드를 구성하는 각 마이크로서비스간 통신은 제로MQ를 사용한다. 제로MQ는 네트워크 소켓 관리를 위한 경량 라이브러리로, 마이크로서비스(서버, 클라이언트)의 다양한 메시지 발송 패턴을 지원한다. 각 서비스는 마이크로서비스의 다양한 서비스로 한 번에 메시지를 발행해야 하는 특성을 맞추기 위해 발행-구독 패턴(Publish-Subscribe Pattern)을 사용해 서로 통신한다.

원격 디바이스와 백엔드 서비스는 프로토콜 버퍼 기반 소켓 혹은 소켓 통신을 한다. 원격 디바이스와 백엔드 서버 간 모니터링이나 액션 처리 통신은 프로토콜 버퍼를 사용한다. 프로토콜 버퍼는 구글에서 개발해 오픈소스로 공개했다. 다양한 언어를 지원하며 직렬화 데이터 구조(Serialized Data Structure)를 띄고 있다. 직렬화 데이터 구조는 속도가 빠르고 파일 크기도 작아서, 파일 저장이나 네트워크 전송을 위한 바이너리 스트림이 필요할 때 많이 사용된다.

실시간으로 디바이스 화면 데이터를 브라우저로 전송하는 서비스는 노드JS의 소켓IO(웹소켓)로 구현됐다. 노드JS와 소켓IO의 조합은 웹에서 실시간 통신을 구현하기 위한 훌륭한 방안 중 하나다.

황희선 필자의 ‘모바일 앱 테스트 자동화용 디바이스팜 구축’에 대한 자세한 내용은 ‘마이크로소프트웨어 394호(https://www.imaso.co.kr/archives/3939)’에서 확인할 수 있다.


관련기사