앱에서 Barcode Scanning — 코드 유형 및 ML Kit

저자: IT Sectr 게시일: 2026-07-18 읽는 시간: 10 분

Barcode Scanning은 모바일 기기의 카메라를 사용하여 바코드를 읽고 디코딩하는 기술입니다. 특수 장비가 필요한 레이저 스캐너와 달리, 카메라 기반 스캐너는 카메라가 있는 모든 스마트폰에서 작동합니다. 모바일 개발에서 Barcode Scanning은 ML Kit Barcode Scanning(Google), AVFoundation(Apple), ZXing(오픈소스) 또는 Scandit(상용 SDK)을 통해 구현됩니다. Google ML Kit, 2025에 따르면, 이 라이브러리는 하루 20억 회 이상의 스캔을 98.5%의 정확도로 처리합니다.

핵심 요점

  • Barcode Scanning — 카메라로 1D 및 2D 코드 읽기
  • ML Kit Barcode — 가장 정확한 SDK(98.5%), 멀티코드, 모든 형식
  • 형식 — EAN, UPC, QR, Data Matrix, PDF417, Aztec, Code 128
  • 실시간 — CameraX 및 AVFoundation으로 최대 60FPS 스캔
  • 온디바이스 — 모든 처리 로컬 실행, 인터넷 불필요

Barcode Scanning이란: 원리 및 형식

Barcode Scanning은 카메라를 사용하여 바코드를 광학적으로 인식하는 프로세스입니다. 알고리즘이 이미지를 캡처하고, 코드를 찾고(위치 파악), 디코딩하고(데이터 추출), 문자열 값을 반환합니다. 최신 SDK는 모든 방향, 크기 및 조명 조건의 코드를 스캔할 수 있습니다. 사용자는 카메라를 비추기만 하면 됩니다.

바코드 형식은 두 그룹으로 나뉩니다. 1D(선형) — EAN-13, UPC-A, Code 128, Code 39, ITF, Codabar — 최대 20~30자 포함, 제품 및 물류에 사용됩니다. 2D(매트릭스) — QR 코드, Data Matrix, PDF417, Aztec — 최대 3000자 이상 포함, 링크, 티켓, 문서에 사용됩니다. ML Kit는 14가지 형식을 지원합니다 — 일반적인 모든 1D 및 2D 형식입니다.

Data Matrix는 QR과 유사하지만 더 컴팩트한 2D 코드입니다. 산업(부품 마킹), 전자 티켓(IATA BCBP), 의료 샘플에 사용됩니다. Data Matrix는 최대 2335자를 포함할 수 있으며 매우 작은 표면(2x2mm까지)에 인쇄할 수 있습니다. QR과 달리 Data Matrix에는 파인더 패턴(모서리의 사각형)이 없으며 더 정밀한 카메라 캘리브레이션이 필요합니다.

형식유형최대 데이터용도
EAN-131D13자리소매 제품
QR 코드2D4296자링크, 결제, 티켓
Data Matrix2D2335자산업, 의료
PDF4172D2710자문서, 탑승권
Code 1281D80자물류, 운송

QR 코드는 모바일 앱에서 가장 인기 있는 2D 형식입니다. URL, 텍스트, vCard, WiFi 설정, 결제 정보(UPI, SBP)를 포함합니다. QR 코드는 40가지 버전(21x21~177x177 모듈)과 4가지 오류 수정 레벨(L:7%, M:15%, Q:25%, H:30%)이 있습니다. 모바일 앱에서는 버전 2~10(25x25~57x57 모듈)을 사용하세요 — 크기와 데이터의 최적 균형입니다.

ML Kit Barcode Scanning: 통합 및 설정

ML Kit Barcode Scanning은 Android 애플리케이션의 기본 SDK입니다. ML Kit는 이미지에서 모든 코드를 자동으로 찾습니다(코드가 중앙에 있어야 하는 ZXing과 다름). API는 rawValue(텍스트 내용), format(코드 유형), boundingBox 및 cornerPoints(코드의 4개 모서리 포인트)가 포함된 Barcode 객체를 반환합니다. ML Kit는 단일 스캔(1프레임) 및 연속 스캔(비디오 스트림)을 지원합니다.

멀티바코드 모드 — ML Kit는 단일 이미지에서 여러 코드를 감지할 수 있습니다. BarcodeScannerOptions.Builder()를 통해 활성화합니다. 멀티 모드에서는 Barcode 목록이 반환됩니다. 재고 관리(제품 배치 스캔), 테이블 위의 여러 QR 코드 인식에 사용합니다. 멀티바코드는 기본적으로 비활성화되어 있습니다 — 필요한 경우에만 활성화하세요. 스캔 속도가 20~30% 저하되기 때문입니다.

kotlin
// ML Kit Barcode Scanning multi-code mode
val options = BarcodeScannerOptions.Builder()
    .setBarcodeFormats(
        Barcode.FORMAT_QR_CODE,
        Barcode.FORMAT_EAN_13,
        Barcode.FORMAT_DATA_MATRIX
    )
    .enableAllPotentialBarcodes()
    .build()
val scanner = BarcodeScanning.getClient(options)

scanner.process(inputImage)
    .addOnSuccessListener { barcodes ->
        barcodes.forEach { barcode ->
            val type = barcode.valueType // URL, TEXT, PHONE...
            val rawValue = barcode.rawValue
            val displayValue = barcode.displayValue
        }
    }

형식 필터링 — 필수 최적화입니다. setBarcodeFormats()는 ML Kit가 검색할 형식을 제한합니다. 앱이 QR 코드만 스캔하는 경우 FORMAT_QR_CODE를 지정하세요. 다른 형식의 디코딩 알고리즘을 제외하여 스캔 속도가 2~3배 향상됩니다. 소매 스캐너의 경우 — FORMAT_EAN_13 | FORMAT_UPC_A. 물류의 경우 — FORMAT_CODE_128 | FORMAT_CODE_39 | FORMAT_PDF417.

ZXing vs ML Kit: 라이브러리 비교

ZXing(Zebra Crossing)은 Java(Android)의 오픈소스 라이브러리로 Swift, React Native, Flutter용 포트가 있습니다. ZXing은 ML Kit 등장 전 사실상의 스캔 표준이었습니다. 모든 인기 형식을 지원하고 모든 기기(Google Play 없는 Huawei 포함)에서 작동하며 Google Play Services가 필요 없습니다. 단점: ML Kit보다 2~3배 느리고, 프레임 가장자리에서 코드를 찾지 못하며, 멀티바코드가 없습니다.

ML Kit vs ZXing — ML Kit가 속도, 정확도 및 UX에서 우수합니다. ML Kit는 코드가 프레임의 10%만 차지하고 모서리에 있어도 감지합니다. ZXing은 코드가 프레임의 50~80%를 차지하고 중앙에 있어야 합니다. ML Kit는 신경망(MobileNetV2-SSD)을 사용하여 코드를 위치 파악하고, ZXing은 고전적인 이진화 및 파인더 패턴 검색을 사용합니다. Google(2025)에 따르면, ML Kit는 98.5%의 정확도를 달성하며 ZXing의 92%를 능가합니다.

특성ML KitZXing
정확도98.5%92%
속도15~30ms50~150ms
멀티코드지원미지원
Google Play필요불필요
모서리 코드감지미감지

ZXing을 선택해야 하는 경우: 앱이 Huawei 기기(Google Play Services 없음), Android Go(제한된 메모리)에서 실행되어야 하거나 Play Services 없이 완전한 오프라인 작동이 필요한 경우. 다른 모든 경우에는 ML Kit가 더 빠르고 정확하며 통합이 쉽고 멀티코드 및 가장자리 감지로 더 나은 UX를 제공합니다.

kotlin
// ZXing Core: simple scanner
val reader = MultiFormatReader()
val bitmap = BitmapFactory.decodeResource(resources, R.drawable.test)
val source = RGBLuminanceSource(bitmap)
val binarizer = HybridBinarizer(source)
val binaryBitmap = BinaryBitmap(binarizer)

try {
    val result = reader.decode(binaryBitmap)
    Log.d("ZXing", result.text)
} catch (e: NotFoundException) {
    // Code not found
}

대안으로서의 Scandit — 99.5% 정확도와 10~20ms 속도의 상용 SDK입니다. 자체 신경망을 사용하며 Google Play Services가 필요 없습니다. 가격 — 월 400달러부터(2019년). Scandit은 소매 및 물류(Walmart, FedEx)에서 지배적입니다. 대부분의 모바일 앱에는 ML Kit로 충분합니다. Scandit은 대용량 스캔이 필요한 엔터프라이즈 작업에만 정당화됩니다.

Apple AVFoundation: iOS 기본 스캐너

Apple AVFoundation은 AVCaptureMetadataOutput을 통해 기본 Barcode Scanning을 제공합니다. iOS 7부터 AVFoundation은 QR 코드 스캔을 지원하고 iOS 8부터 EAN, UPC, Code 128, PDF417의 모든 형식을 지원합니다. AVFoundation은 추가 SDK가 필요 없습니다 — Foundation의 일부입니다. 스캔은 A12+의 Apple Neural Engine을 통해 실행되며 속도는 10~20ms로 최소 전력 소비입니다.

AVFoundation의 장점: 제로 의존성, 자동 카메라 방향 처리, 라이트/다크 모드 내장 지원, 백그라운드 작동(background modes). AVFoundation은 스캔을 위해 자동 초점과 노출을 자동으로 조정합니다 — 개발자는 captureOutput 델리게이트만 구독하면 됩니다. 단점: ML Kit보다 설정이 적음 — 멀티바코드 또는 형식 필터링을 활성화할 수 없습니다.

swift
import AVFoundation

class BarcodeScannerController: UIViewController, AVCaptureMetadataOutputObjectsDelegate {
    private var captureSession: AVCaptureSession!

    override func viewDidLoad() {
        let metadataOutput = AVCaptureMetadataOutput()
        captureSession.addOutput(metadataOutput)
        metadataOutput.setMetadataObjectsDelegate(self, queue: .main)
        metadataOutput.metadataObjectTypes = [.qr, .ean13, .code128]
    }

    func metadataOutput(_ output: AVCaptureMetadataOutput,
                         didOutput objects: [AVMetadataObject],
                         from connection: AVCaptureConnection) {
        guard let code = objects.first as? AVMetadataMachineReadableCodeObject else { return }
        print(code.stringValue ?? "")
    }
}

iOS에서 ML Kit vs AVFoundation: ML Kit가 더 많은 제어를 제공합니다 — 형식 구성, 멀티바코드 활성화, 신뢰도에 따른 코드 필터링이 가능합니다. AVFoundation은 구형 기기에서 더 빠르지만(오버헤드 적음) iOS 15 미만에서 Data Matrix, Aztec, PDF417을 지원하지 않습니다. iOS 15+에서는 ML Kit가 선호됩니다. iOS 12~14에서는 AVFoundation + 지원되지 않는 형식에 대한 ML Kit 폴백을 사용하세요.

Scandit: 엔터프라이즈용 상용 솔루션

Scandit은 소매, 물류 및 의료에 특화된 Barcode Scanning용 상용 SDK입니다. Scandit은 눈부심, 손상, 저조도, 최대 45도 기울기, 반사 등 다양한 조건에서 1000만 개 이상의 바코드 이미지로 학습된 자체 신경망을 사용합니다. Scandit은 최대 15미터 거리(창고 내 PDF417의 경우)와 곡면(캔, 병)의 코드를 스캔할 수 있습니다.

Scandit 기능: SparkScan(빠른 순차 스캔을 위한 단일 스캔), MatrixScan(멀티바코드 + 스캔 항목 AR 강조), PickList(확인 포함 바코드로 제품 검색). Scandit은 GS1 DataBar 및 Composite Codes를 포함한 50개 이상의 형식을 지원합니다. 속도 — 코드당 10~15ms. 정확도 — 표준 조명에서 99.5%, 저조도에서 97%.

kotlin
// Scandit MatrixScan (SDK license required)
val barcodeTracking = BarcodeTracking
    .forDataCaptureContext(context)
    .addListener(this)
    .build()
barcodeTracking.addSessionListener { session, _ ->
    session.trackedBarcodes.forEach { (trackingId, barcode) ->
        val data = barcode.data
        val symbolCount = barcode.symbolCount
    }
}

Scandit vs ML Kit: Scandit은 유료(월 400달러 이상)이지만 엔터프라이즈 기능을 제공합니다: SparkScan(기업 기기의 하드웨어 버튼), MatrixScan(강조용 AR 오버레이), PickList(음성 확인). ML Kit는 무료이며 90%의 모바일 앱(매장 스캐너, QR 리더, 티켓 앱)에 충분합니다. Scandit은 Zebra/Honeywell 기기를 사용하는 물류 터미널에만 정당화됩니다.

스캔 최적화: 속도 및 정확도

Barcode Scanning 최적화에는 카메라, 해상도 및 SDK 설정이 포함됩니다. 기본 규칙: 픽셀이 적을수록 스캔이 빠릅니다. ML Kit의 최적 해상도는 비디오의 경우 480p(640x480), 사진의 경우 720p(1280x720)입니다. 1080p로 높이면 정확도 향상 없이 처리 속도가 2~3배 저하됩니다. 자동 해상도 관리를 위해 ImageAnalysis와 함께 CameraX를 사용하세요.

초점과 노출은 스캔 품질에 중요합니다. ML Kit는 카메라를 자동으로 구성하지 않습니다 — 개발자는 Camera2 또는 CameraX를 통해 연속 자동 초점과 연속 자동 노출을 활성화해야 합니다. 자동 초점이 없으면 흐릿한 코드가 정확도를 60~70%로 낮춥니다. 근거리 스캔(5~15cm)의 경우 사용 가능한 경우 카메라 매크로 모드를 사용하세요.

자동 줌 및 파인더 오버레이 — 사용자 UX 개선. 자동 줌은 코드 감지 시 확대합니다(Google Lens 카메라처럼). 코드의 boundingBox를 분석하고 미리보기를 스케일링하여 구현합니다. 파인더 오버레이는 카메라를 어디에 비춰야 하는지 보여주는 그래픽 프레임입니다. 더 나은 UX를 위해 찾은 코드의 boundingBox를 표시하고 성공적인 디코딩 시 녹색으로 강조하세요.

kotlin
// CameraX + ML Kit: optimized scanner
class BarcodeAnalyzer(private val scanner: BarcodeScanner) :
    ImageAnalysis.Analyzer {

    override fun analyze(image: ImageProxy) {
        if (image.image == null) { image.close(); return }
        val mediaImage = InputImage.fromMediaImage(image.image, image.imageInfo.rotationDegrees)
        scanner.process(mediaImage)
            .addOnSuccessListener { barcodes ->
                barcodes.firstOrNull()?.let {
                    // Haptic + sound + code highlight
                }
            }
            .addOnCompleteListener { image.close() }
    }
}

사용자 피드백: 진동(HapticFeedback), 소리(MediaActionSound), 시각적 강조(Canvas/Overlay). 성공적인 스캔 후 다음 스캔 전에 1000~1500ms 지연(스로틀링)을 추가하세요 — 동일한 코드에서 중복 트리거를 방지합니다. 순차 스캔(배치 스캔)의 경우 SparkScan 방식을 사용하세요. 각 스캔이 기록 및 알림되며 300~500ms 지연이 있습니다.

자주 묻는 질문

Android에서 바코드 스캔에 가장 좋은 SDK는?

ML Kit Barcode Scanning이 Android에 가장 적합한 선택입니다: 무료, 98.5% 정확도, 멀티코드, 프레임 어디서나 감지. 앱이 Google Play 없는 Huawei 기기에서 실행되어야 하는 경우 ZXing(오픈소스, 낮은 정확도)을 사용하세요. 엔터프라이즈 물류의 경우 Scandit(유료, 99.5% 정확도, SparkScan)을 사용하세요. 간단한 QR 스캐너에는 ZXing 또는 ML Kit로 충분합니다.

ML Kit는 어떤 바코드 형식을 지원하나요?

ML Kit Barcode Scanning은 14가지 형식을 지원합니다: 1D — EAN-8, EAN-13, UPC-A, UPC-E, Code 39, Code 93, Code 128, ITF, Codabar; 2D — QR 코드, Data Matrix, PDF417, Aztec. GS1 DataBar(RSS-14, RSS-Expanded)도 지원됩니다. 전체 목록은 Barcode.FORMAT_* 문서에 있습니다. 형식을 제한하려면 setBarcodeFormats()를 사용하세요 — 스캔 속도가 2~3배 향상됩니다.

바코드 스캔을 빠르게 하려면?

카메라 해상도를 480p(640x480)로 낮추고, 연속 자동 초점을 활성화하고, 필요한 형식만 제한하고(setBarcodeFormats), FAST 성능 모드를 사용하세요. ML Kit의 경우 필요한 형식만 지정하세요 — 추가 형식을 제외하면 스캔 속도가 2~3배 향상됩니다. ZXing의 경우 GlobalHistogramBinarizer 대신 HybridBinarizer를 사용하세요(20% 더 빠름). AVFoundation의 경우 metadataObjectTypes를 지정하세요.

바코드 스캔이 인터넷 없이 작동하나요?

예, 모든 로컬 Barcode Scanning SDK(ML Kit, ZXing, AVFoundation, Scandit)가 완전히 오프라인에서 작동합니다. ML Kit는 모델 최초 다운로드 시에만 인터넷이 필요합니다(다운로드 모드). 이후 모델은 기기에 캐시됩니다. AVFoundation은 iOS에 내장되어 인터넷이 필요 없습니다. ZXing은 Play Services 없이 완전히 오프라인입니다. 클라우드 스캔(Google Cloud Vision)은 모바일 앱에서 사용되지 않습니다.

손상되거나 흐릿한 바코드를 스캔할 수 있나요?

ML Kit와 Scandit에는 신경망 알고리즘 덕분에 손상된 코드에 대한 내장 보정 기능이 있습니다. ML Kit는 손상된 코드(긁힘, 찢어짐)의 최대 30%를 복원합니다. Scandit은 결함 코드 학습 덕분에 최대 50%를 복원합니다. ZXing은 손상된 코드를 사실상 복원하지 않습니다 — 선명한 이미지가 필요합니다. 결함 코드 스캔에는 ACCURATE 성능 모드의 Scandit 또는 ML Kit를 사용하세요.

요약

  • Barcode Scanning — 스마트폰 카메라로 1D/2D 코드 감지 및 디코딩
  • ML Kit — 98.5% 정확도, 멀티코드, 프레임 어디서나 감지, 무료
  • ZXing — 오픈소스, 모든 기기 호환, 92% 정확도
  • AVFoundation — 기본 iOS 스캐너, 시스템 내장(iOS 7+)
  • Scandit — 엔터프라이즈 SDK(99.5%), SparkScan, MatrixScan, 월 400달러부터
  • 최적화 — 480p 해상도, 자동 초점, 형식 제한, 햅틱 피드백
  • 모든 형식 — EAN, UPC, QR, Data Matrix, PDF417, Aztec, Code 128

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

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

프로젝트 논의

더 읽어보기