Screengrab (Fastlane) — 이것이 뭐인지, 기능 및 스크린샷 자동화

저자: IT Sectr 게시일: 2026-04-15 읽는 시간: 8 분

Screengrab은 Android 및 iOS용 모바일 앱의 스크린샷 작성을 자동화하는 Fastlane 생태계의 유틸리티입니다. 수십 대의 기기에서 수동으로 화면을 스와이핑하는 대신 개발자가 한 개의 명령어를 실행하면 Screengrab이 필요한 모든 화면을 독립적으로 캡처합니다. Fastlane Docs, 2026에 따르면, 이 도구는 동시에 최대 30개 언어와 구성에서 지정된 모든 화면 해상도를 지원합니다.

주요 포인트

  • Screengrab — Android 및 iOS용 모바일 앱의 자동 스크린샷 작성을 위한 Fastlane 도구입니다.
  • 자동화는 수백 개의 스크린샷을 수동으로 작성하는 것을 단한 터미널 명령어로 대체합니다.
  • 로케일래이션 — 추가 설정 없이 다양한 언어로 동시에 스크린샷을 생성합니다.
  • CI/CD — Jenkins, GitHub Actions, GitLab CI 등 모든 파이프라인과 통합합니다.
  • 유연성 — 한 번의 실행으로 여러 기기, 방향 및 언어를 지원합니다.

Screengrab이란 무엇이며 왜 필요한가

Screengrab은 모바일 앱의 자동 스크린샷 작성을 위해 설계된 Fastlane 생태계의 컴포넌트입니다. 이 도구는 2015년에 문제에 대한 대응으로 등장했습니다: Google Play와 App Store에 출시하려면 언어당 4에서 10개의 스크린샷이 필요합니다. 30개 언어를 지원하는 경우 120에서 300개의 수동 캡처가 필요합니다.

수동 스크린샷 작성의 문제점

개발자가 수동으로 시뮬레이터나 기기에서 앱을 실행하고, 원하는 화면으로 스와이프하며, 스크린샷을 찍고, 컴퓌터로 전송하고, 자르고, 맞는 폴더에 저장합니다. 이 과정은 모든 언어와 모든 방향에 대해 반복됩니다. Google Play Console에 따르면 평균 앱은 2주마다 업데이트되며, 스크린샷은 정기적인 루틴이 됩니다.

자동화의 장점

Screengrab이 문제를 근본적으로 해결합니다: 개발자가 UI 프레임웍크(Android용 Espresso, iOS용 XCTest)를 사용하여 테스트 시나리오를 설명하면, Screengrab이 필요한 모든 기기와 언어에서 자동으로 실행합니다. Fastlane이 과정을 조율합니다: 앱 빌드, 테스트 실행, 스크린샷 수집, 필요한 폴더 구조로 패키징합니다.

그 결과는 기존에 수시간의 수동 작업 대신 10분에서 15분 만에 100개의 스크린샷을 얻는 것입니다. Google은 중요한 UI 변경이 있을 때마다 스크린샷을 업데이트할 것을 권장하며, 자동화 없이는 이러한 권고가 무시되는 경우가 많습니다.

Screengrab 작동 방식: 아키텍처 및 작동 원리

Screengrab의 아키텍처는 두 가지 핵심 컴포넌트를 중심으로 구축됩니다: 기기상의 클라이언트(screengrab-lib)와 테스트 실행 및 결과 수집을 관리하는 런너입니다. Android에서는 계찰된 테스트 프레임웍크를 사용하고, iOS에서는 XCTest를 사용합니다.

한 번의 실행 생명 주기

Fastlane이 screengrab 액션을 호출하면, 그이 Screengrabfile 구성 파일을 읽습니다. 런너는 screengrab-lib 라이브러리가 연결된 테스트 APK를 빌드하고, 연결된 기기나 애뮬레이터에 설치하고, 스크린샷용 어노테이션이 표시된 UI 테스트를 실행합니다.

ruby
# Fastfile — 스크린샷용 lane 설명
lane :screenshots do
  capture_android_screenshots(
    output_directory: "fastlane/metadata/android/screenshots",
    locales: ["ru-RU", "en-US", "de-DE"],
    devices: ["pixel_6", "pixel_tablet"],
    use_tests_external_storage: true
  )
end

출력 파일 구조

Screengrab은 폴더 계층을 만듭니다: 언어 → 기기 → 스크린샷. 이 구조는 Google Play Console 및 App Store Connect의 요구 사항과 완전히 일치합니다. App Store는 기기 유형별로 엄격하게 정의된 크기가 필요하며, Screengrab은 사양에 맞게 이미지를 생성합니다.

다중 기기 지원

이 도구는 연결된 모든 기기와 애뮬레이터에서 병렬로 테스트를 실행할 수 있습니다. Android 애뮬레이터는 비활성화된 경우 자동으로 시작됩니다. iOS의 경우 Screengrab은 Xcode 시뮬레이터를 사용합니다.

Android용 Screengrab 설치 및 구성

Screengrab 설치는 두 부분으로 구성됩니다: 프로젝트에 라이브러리 추가 및 구성 파일 설정. Android에서는 Espresso UI 프레임웍크와 Fastlane 저장소의 screengrab-lib 라이브러리가 필요합니다.

종속성 추가

앱 모듈의 build.gradle에 screengrab-lib 종속성을 추가합니다. 이 라이브러리는 호출 시점에 스크린샷을 찍는 ScreenCapturer 클래스를 제공합니다.

groovy
// build.gradle (module: app)
androidTestImplementation(
  'tools.fastlane:screengrab-lib:2.1.0'
)

스크린샷이 있는 테스트 작성

UI 테스트는 필요한 위치에 Screengrab.screenshot() 어노테이션으로 표시됩니다. 각 호출은 현재 화면을 캡처하고 지정된 이름으로 저장합니다.

kotlin
import tools.fastlane.screengrab.Screengrab
import tools.fastlane.screengrab.locale.LocaleTestRule

class ScreenshotTest {

    @get:Rule
    val localeTestRule = LocaleTestRule()

    @Test
    fun testTakeScreenshots() {
        Screengrab.screenshot("main_screen")
        // 작업: 로그인 버튼 탭
        Screengrab.screenshot("login_screen")
    }
}

Screengrabfile 구성

Screengrabfile은 기기 목록, 언어, 타임아웃 및 저장 경로와 같은 실행 매개변수를 저장합니다. 이 파일은 보통 Fastfile 옆의 fastlane 폴더에 위치합니다.

스크린샷 로케일래이션 및 여러 언어

로케일래이션은 Screengrab의 핵심 기능이며, 안만큼 자주 선택되는 주요 이유입니다. 이 도구는 각 테스트 실행 전에 자동으로 앱 언어를 전환하고 지정된 모든 언어로 스크린샷을 찍습니다.

언어 구성

언어는 Screengrabfile에서 locales 매개변수를 사용하여 설정됩니다. 각 언어마다 Screengrab이 해당 리소스를 사용하여 앱을 재설치하고 전체 테스트 사이클을 실행합니다. Android의 LocaleTestRule은 자동으로 기기의 로케일을 바꿐줍니다.

ruby
# Screengrabfile
locales [
  "ru-RU",
  "en-US",
  "de-DE",
  "fr-FR",
  "es-ES",
  "ja-JP",
  "ko-KR"
]

로케일래이시된 스크린샷용 폴더 구조

Screengrab은 screenshots/{locale}/{device_name}/{screenshot_name}.png 스키머에 따라 디렉토리를 만듭니다. 이 구조는 Google Play 요건과 직접 일치하여 Fastlane deliver를 통해 단일 명령어로도 스크린샷을 업로드할 수 있습니다.

iOS의 경우 App Store Connect는 언어별로 평면 구조의 스크린샷을 기대합니다. Fastlane은 출시 시 Screengrab 계층을 필요한 형식으로 자동 변환합니다.

CI/CD 파이프라인에 Screengrab 통합

CI/CD 통합은 Screengrab의 주요 장점 중 하나입니다. 이 도구는 명령 라인에서 실행되며 그래픽 인터페이스가 필요 없으므로 서버 빌드에 이상적입니다.

GitHub Actions

CI 환경에서는 Android 애뮬레이터나 iOS 시뮬레이터를 시작한 후 스크린샷이 있는 lane을 호출해야 합니다. GitHub Actions는 AVD 캐시를 지원하여 반복 실행을 가속화합니다.

CI용 매개변수

CI 구성에서는 메모리와 시간 제한을 고려하는 것이 중요합니다. Android 애뮬레이터는 기기당 최소 2GB의 RAM이 필요하고, 7개 언어와 2개 기기에서 전체 실행에 20분에서 40분까지 걸립니다.

ruby
# Fastfile — 타임아웃이 있는 CI용 lane
lane :ci_screenshots do
  capture_android_screenshots(
    locales: ["en-US", "ru-RU"],
    devices: ["pixel_6"],
    clear_previous_screenshots: true,
    tests_timeout: "600",
    output_directory: "screenshots/ci"
  )
end

Jenkins Pipeline

Jenkins의 경우 bundle exec fastlane을 호출하는 sh 단계를 사용합니다. 개발 사이클을 늘추지 않도록 야간에 또는 메인 브랜치에 병합한 후 트리거로 스크린샷을 실행할 것을 권장합니다.

Screengrab vs 대체 방안: 도구 비교

Screengrab이 스크린샷 자동화를 위한 유일한 도구는 아닙니다. 다양한 접근 방식의 대체 안이 있습니다: 빌트인 OS 도구, 상용 플랫폼, 그리고 코드 내 스크린샷 라이브러리가 그것입니다.

도구플랫폼로케일래이션CI/CD
ScreengrabAndroid, iOS자동네이티브
ADB ShellAndroid수동스크립트로
XCTestiOS수동xcodebuild로
Firebase Test LabAndroid설치 필요
Appium크로스 플랫폼수동WebDriver로

ADB Shell은 완전한 제어를 제공하지만 시나리오마다 스크립트 작성이 필요합니다. XCTest는 Xcode에 통합되어 있지만 로케일래이션을 자동으로 관리하지 않습니다. Firebase Test Lab은 클라우드에서 실제 기기로 테스트를 실행하여 최대 커버리지를 제공하지만 분당 요금이 부과됩니다.

Screengrab은 결합으로 승리합니다: Fastlane이 컴파일부터 게시까지 빌드 전체 수명 주기를 관리합니다. Google Play는 Fastlane deliver를 통해 Screengrab 폴더 구조를 직접 수락합니다.

일반적인 문제 및 해결 방법

Screengrab을 사용할 때 개발자들은 보통 몇 가지 반복되는 문제를 겪습니다. 일반적인 오류를 알면 첫 번째 실행에서 디버깅 시간이 단축됩니다.

스크린샷이 빈 것이나 검은 것으로 나오는 경우

문제는 Screengrab이 화면 렌더링이 완료되기 전에 스크린샷을 찍을 때 발생합니다. 해결 방법은 screenshot()을 호출하기 전에 Thread.sleep() 지연을 추가하거나 비동기 작업을 기다리기 위해 Espresso의 IdlingResource를 사용하는 것입니다.

버전 호환성 오류

screengrab-lib의 버전이 Fastlane의 버전과 일치해야 합니다. Fastlane은 갤 마다 업데이트되며, 구동 라이브러리가 새로운 구성 매개변수를 지원하지 않을 수 있습니다. 해결 방법은 Gemfile과 gradle.properties를 통해 버전을 동기화하는 것입니다.

CI에서 긴 실행 시간

5개 기기에서 30개 언어로 실행하는 경우 1시간 이상 걸릴 수 있습니다. 해결 방법은 실행을 분할하는 것입니다: 하나는 모든 언어로 스토어용, 다른 하나는 내부 용도로 두 개의 언어로만. GitHub Actions는 병렬 실행을 위한 매트릭스 전략을 사용할 수 있습니다.

CI에서 애뮬레이터 문제

Android 애뮬레이터는 하드웨어 가상화가 필요하며, 이는 CI 서버에서 항상 사용 가능한 것은 아닙니다. KVM이 활성화되어야 하며, 그렇지 않으면 애뮬레이터가 시작되지 않습니다. 해결 방법은 GPU 가속 없이 x86 이미지를 사용하거나 Firebase Test Lab을 사용하는 것입니다.

자주 묻는 질문

Screengrab은 ADB를 통한 일반 스크린샷과 어떻게 다릅니까?

ADB는 현재 화면에 표시되는 것을 캡처합니다. Screengrab은 UI 테스트와 통합되어 언어와 기기를 자동으로 전환하고, 사람의 개업 없이 시나리오에 따라 일련의 스크린샷을 가져갑니다.

Fastlane 없이 Screengrab을 사용할 수 있습니까?

아니요, Screengrab은 Fastlane 생태계의 컴포넌트이며 빌드, 설치 및 조율을 위해 그 인프라를 사용합니다. screengrab-lib 라이브러리는 별도로 실행할 수 없습니다 — 오케스트레이터로 Fastlane이 필요합니다.

10개 언어로 스크린샷을 생성하는 데 얼마나 걸리나요?

단일 기기에서 10개 언어로 실행하는 경우 15분에서 25분까지 걸립니다. 각 언어는 앱 재설치와 UI 테스트 전체 사이클이 필요합니다. 여러 기기에서 병렬 실행으로 시간을 비례적으로 줄일 수 있습니다.

Screengrab은 iOS 앱을 지원합니까?

, Screengrab은 XCTest와 Xcode 시뮬레이터를 통해 iOS를 지원합니다. 구성은 Android과 유사합니다: 언어와 기기가 추가되고 Swift의 UI 테스트는 XCTest를 사용하여 XCUIScreenshot으로 캡처합니다.

새로운 언어에 대해서만 스크린샷을 업데이트하려면 어떻게 하나요?

Screengrab은 증분 모드를 지원하지 않습니다 — 각 실행은 스크린샷의 완전한 세트를 생성합니다. 주 실행에서 기존 캡처가 겁쳐쓰이지 않도록 제한된 언어 목록으로 CI용 별도의 lane을 설정할 것을 권장합니다.

요약

  • Screengrab — Android 및 iOS에서 모바일 앱의 스크린샷을 자동화하는 Fastlane 컴포넌트입니다.
  • 자동화는 수백 개의 스크린샷 수동 작성을 단한 터미널 명령어로 대체합니다.
  • 로케일래이션 — 각 테스트 실행 전에 자동으로 앱 언어를 전환합니다.
  • CI/CD — 그래픽 인터페이스 없이 Jenkins, GitHub Actions, GitLab CI 및 다른 파이프라인과 통합합니다.
  • 구조는 출력 파일이 직접 업로드를 위해 Google Play 및 App Store 요건과 일치합니다.
  • 유연성 — 여러 기기, 화면 방향 및 사용자 정의 테스트 시나리오를 지원합니다.
  • 절약 — 업데이트마다 수시간 수동 작업 대신 15분만에 100개의 스크린샷을 얻을 수 있습니다.

턴키 방식의 모바일 애플리케이션을 개발해 드립니다

IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.

프로젝트 논의

더 읽어보기