토스의 디바이스 팜 만들기

1 week ago 20

안녕하세요, 사내 디바이스 팜 '네뷸라(Nebula)'를 만들고 운영하는 토스 Node.js 개발자 차영훈입니다.먼저 디바이스 팜(Device Farm)이 뭔지부터 간단히 짚을게요. 테스트용 실제 스마트폰 여러 대를 서버에 연결해두고, 원격에서 제어하며 자동화 테스트를 돌리는 설비입니다. 개발자가 자리에 앉은 채로, 기기를 직접 만지지 않고도 실제 폰 위에서 앱을 테스트할 수 있게 해주죠.네뷸라는 실기기를 24시간 연결해두고, 전사가 API 호출 한 번으로 함께 쓰는 디바이스 팜입니다. 그리고 지금도 수백 대 규모를 향해 계속 증설하고 있고요.수백 대를 향해 증설 중인 네뷸라 디바이스 팜 — 선반마다 실기기가 케이블로 연결돼 24시간 가동돼요.그런데 처음부터 이랬던 건 아닙니다. 작은 팜 몇 개에서 시작해 여기까지 온 이야기를 지금부터 들려드릴게요.팀마다 각자 폰을 꽂던 시절먼저 네뷸라가 없던 시절의 풍경을 조금 더 들여다볼게요.당시 각 팀의 테스트 자동화 환경은 대략 이런 모습이었습니다.한마디로, 모두가 조금씩 손해 보는 구조였어요. 각 팀은 테스트 코드를 짜고 품질을 높이는 본업 대신 '기기 운영'이라는 부업에 시간을 쓰고 있었습니다. 이 부업을 한 곳으로 모아서 전문적으로 운영하면, 여러 팀이 자기 일에 집중할 수 있겠다는게 네뷸라의 출발점이었어요.다만 처음부터 거창했던 건 아니에요. 맥미니 5대에 기기 15대, 개발자는 저 한 명이었습니다. 그렇게 6개월 가까이 혼자 고군분투했고, 이후 팀원이 합류하면서 지금은 1년째 운영하고 있어요. 그사이 기기는 100대를 넘어, 수백 대를 향해 꾸준히 늘고 있습니다.그래서 만들었어요: API 호출 한 번으로네뷸라의 목표는 처음부터 단 한 문장이었습니다.누구든, 어디서든, API 호출 한 번으로 실기기를 제어할 수 있게 하자.이 기기들을 쓰는 쪽은, 기기가 어느 맥미니에 물려 있는지도, ADB(안드로이드 기기를 명령으로 제어하는 도구)나 Xcode를 어떻게 세팅하는지도 알 필요가 없어요. 기기를 하나 점유하고, 액션을 호출하면 끝이죠.POST /device/occupy { platform: "android", tags: ["smoke"] } → 200 assigned: (기기 ID) POST /actions/click { x: 540, y: 1200 } → 200 ok"안드로이드 기기 하나 잡아줘 → 거기 (540, 1200)을 눌러줘." 딱 이 두 줄로, 서버실 어...

Read Entire Article