스칸딧 SDK와 IronBarcode: C# 바코드 라이브러리 비교
Scandit으로 바코드 판독을 시작하려면 DataCaptureContext를 구성하고, BarcodeCaptureSettings를 생성하고, 심볼을 명시적으로 활성화하고, 카메라를 가져와 프레임 소스로 설정하고, 카메라를 켜짐 상태로 전환한 다음 캡처를 활성화하면 됩니다. 웹사이트에 아직 가격이 나와 있지 않습니다.
필수적인 카메라 파이프라인과 불투명한 Enterprise 가격 책정이라는 두 가지 요소가 결합되면 Scandit이 .NET 프로젝트에 적합하지 않은 도구가 되는 시점이 정확히 드러납니다. 서버 측 문서 처리 워크플로, 업로드된 파일에서 바코드를 읽는 ASP.NET CoreAPI 또는 배송 PDF를 처리하는 Azure Function을 구축하는 경우 Scandit의 아키텍처는 모든 단계에서 불리하게 작용합니다. 이 비교에서는 해당 아키텍처의 기원,IronBarcode대체할 수 있는 부분, 그리고 어느 쪽을 선택하든 발생하는 비용을 살펴봅니다.
스칸딧 SDK 이해하기
Scandit SDK는 모바일 및 엣지 컴퓨팅 환경을 위해 구축된 상용 Enterprise 바코드 스캐닝 플랫폼입니다. 이 라이브러리는 iOS, Android 및 MAUI 기기에서 실시간 카메라 스캔을 지원하도록 설계되었으며, 증강 현실 오버레이, 다중 바코드 동시 감지 및 신분증 스캔을 지원하는 특수 제품 라인을 제공합니다. Scandit의 주요 배포 환경은 물리적 카메라, 실제 사용자, 100ms 미만의 응답 시간이 모두 동시에 존재하는 모바일 현장 작업자, 창고 운영 및 소매점 고객 접점 시나리오입니다.
라이브러리의 아키텍처는 카메라 세션, 프레임 분석 설정, 바코드 캡처 구성을 통합된 상태 저장 시스템으로 조정하는 DataCaptureContext 파이프라인을 중심으로 구성됩니다. Scandit 플랫폼의 각 제품 라인(SparkScan, MatrixScan, ID Scanning, AR Overlays, Parser)은 개별 라이선스 및 가격 책정 방식을 통해 운영되므로, Scandit 통합의 총비용은 영업 담당자와의 상담 후에야 확정할 수 있습니다.
Scandit SDK의 주요 아키텍처 특징은 다음과 같습니다.
- 카메라 우선 설계: SDK는 물리적 카메라와 실행 중인 프레임 소스를 가정합니다. 모든 바코드 판독은 정적 파일이나 스트림이 아닌 실시간 비디오 프레임에서 수행됩니다.
- 필수 데이터 캡처 컨텍스트 초기화: 모든 통합은 바코드 작업을 수행하기 전에
DataCaptureContext를 구성하고 카메라 인스턴스에 연결하는 것으로 시작됩니다. - 명시적 기호 선언: 캡처 세션이 시작되기 전에
EnableSymbologies를 사용하여 바코드 형식을 개별적으로 활성화해야 합니다. 자동 감지 기능이 제공되지 않습니다. - 이벤트 기반 결과 전달: 바코드 결과는 메서드 호출에서 동기적으로 반환되지 않고 이벤트 콜백(
BarcodeScanned)을 통해 비동기적으로 전달됩니다. - 모듈형 제품 아키텍처: SparkScan, MatrixScan, ID 스캐닝, AR 오버레이 및 파서는 각각 별도의 가격으로 제공되는 기능으로, 개별 계약 항목이 필요합니다.
- 영업 담당자 문의 - 가격 정보: 가격 정보는 공개되어 있지 않습니다. 모든 통합 작업에는 라이선스 비용을 알기 전에 영업 담당자에게 문의해야 합니다.
- 모바일 우선 플랫폼 타겟팅: 주요 지원 플랫폼은 iOS 및 Android입니다. 서버 측 배포, Docker 배포 및 서버리스 배포는 SDK의 설계 범위에 포함되지 않습니다.
DataCaptureContext 파이프라인
모든 Scandit 연동은 바코드를 읽기 전에 이 카메라 초기화 시퀀스로 시작됩니다.
// Scandit SDK: full camera pipeline setup
// NuGet: Scandit.BarcodePicker
var dataCaptureContext = DataCaptureContext.ForLicenseKey("YOUR-SCANDIT-LICENSE");
var settings = BarcodeCaptureSettings.Create();
settings.EnableSymbologies(new HashSet<Symbology>
{
Symbology.Ean13Upca,
Symbology.Ean8,
Symbology.Code128,
Symbology.QrCode
});
var barcodeCapture = BarcodeCapture.Create(dataCaptureContext, settings);
var camera = Camera.GetDefaultCamera();
await dataCaptureContext.SetFrameSourceAsync(camera);
await camera.SwitchToDesiredStateAsync(FrameSourceState.On);
barcodeCapture.IsEnabled = true;
// Scandit SDK: full camera pipeline setup
// NuGet: Scandit.BarcodePicker
var dataCaptureContext = DataCaptureContext.ForLicenseKey("YOUR-SCANDIT-LICENSE");
var settings = BarcodeCaptureSettings.Create();
settings.EnableSymbologies(new HashSet<Symbology>
{
Symbology.Ean13Upca,
Symbology.Ean8,
Symbology.Code128,
Symbology.QrCode
});
var barcodeCapture = BarcodeCapture.Create(dataCaptureContext, settings);
var camera = Camera.GetDefaultCamera();
await dataCaptureContext.SetFrameSourceAsync(camera);
await camera.SwitchToDesiredStateAsync(FrameSourceState.On);
barcodeCapture.IsEnabled = true;
Imports Scandit.DataCapture.Core
Imports Scandit.DataCapture.Barcode
Imports Scandit.DataCapture.Barcode.Capture
Imports Scandit.DataCapture.Core.Source
Imports System.Collections.Generic
' Scandit SDK: full camera pipeline setup
' NuGet: Scandit.BarcodePicker
Dim dataCaptureContext = DataCaptureContext.ForLicenseKey("YOUR-SCANDIT-LICENSE")
Dim settings = BarcodeCaptureSettings.Create()
settings.EnableSymbologies(New HashSet(Of Symbology) From {
Symbology.Ean13Upca,
Symbology.Ean8,
Symbology.Code128,
Symbology.QrCode
})
Dim barcodeCapture = BarcodeCapture.Create(dataCaptureContext, settings)
Dim camera = Camera.GetDefaultCamera()
Await dataCaptureContext.SetFrameSourceAsync(camera)
Await camera.SwitchToDesiredStateAsync(FrameSourceState.On)
barcodeCapture.IsEnabled = True
이 블록의 모든 선은 카메라 인프라입니다. 파일 경로 인수는 없습니다. PDF 파일이 없습니다. 흐르는 물이 없습니다. 이 라이브러리는 바코드 작업을 시작하기 전에 카메라가 작동 중이어야 한다는 것을 전제로 합니다.
IronBarcode이해하기
IronBarcode 는 바코드 읽기 및 생성을 위한 상용 .NET 라이브러리입니다. 이 라이브러리는 바코드 데이터가 파일, 스트림, 바이트 배열 또는 PDF 문서 내의 임베디드 콘텐츠 형태로 제공되는 서버 측, 데스크톱 및 클라우드 환경을 위해 설계되었습니다. 해당 API는 상태를 저장하지 않습니다. 세션 객체도 없고, 초기화해야 할 카메라 파이프라인도 없으며, 읽기 작업 간에 관리해야 할 영구적인 컨텍스트도 없습니다. BarcodeReader.Read에 대한 단일 정적 호출은 파일 경로, 스트림, 바이트 배열 또는 PDF를 허용하고 결과 모음을 반환합니다.
IronBarcode 30개 이상의 1D 및 2D 바코드 형식에 대한 읽기 및 생성 기능을 모두 포함하는 단일 NuGet 패키지로 제공됩니다. 이 라이브러리는 자동 형식 감지 기능을 지원하므로 호출자는 어떤 심볼 형식을 찾을지 지정할 필요가 없습니다. 제품 페이지에 가격이 게시되어 있으므로 별도의 판매 상담이 필요하지 않습니다.
IronBarcode 의 주요 특징은 다음과 같습니다.
- 상태 비저장 파일 기반 API: 읽기는 파일 경로, 스트림, 바이트 배열 또는 PDF 문서를 인수로 받는 단일 메서드 호출로 시작됩니다.
- 자동 형식 감지: 지원되는 모든 바코드 형식이 자동으로 감지됩니다. 명시적인 심볼 설정은 선택적인 성능 최적화 기능이며 필수 조건은 아닙니다.
- PDF 기본 지원: 여러 페이지로 구성된 PDF 문서를 직접 읽고 페이지 번호별로 결과를 표시합니다. 별도의 PDF 렌더링 라이브러리는 필요하지 않습니다.
- 서버 및 클라우드 지원: 아키텍처 변경 없이 ASP.NET Core, Azure Functions, Linux 기반 Docker 및 컨테이너화된 배포를 지원합니다.
- 동시 처리: 상태 비저장 API는 본질적으로 스레드에 안전하므로 처리량이 많은 배치 시나리오에
Parallel.ForEach및 비동기 패턴을 사용할 수 있습니다. - 바코드 생성: 지원되는 모든 심볼 체계를 사용하여 이미지 및 PDF 형식의 바코드를 생성합니다. 생성과 읽기 기능이 동일한 패키지에 포함되어 있습니다.
- 영구 라이선스 공개: 가격은 일회성 영구 구매 방식으로 공개적으로 표시되며, 스캔 횟수 또는 기기별 요금이 부과되지 않습니다.
기능 비교
다음 표는 Scandit SDK와IronBarcode의 근본적인 차이점을 보여줍니다.
| 기능 | 스칸딧 SDK | IronBarcode |
|---|---|---|
| 주요 사용 사례 | 모바일에서 실시간 카메라 스캔 | 서버에서 파일, 스트림 및 PDF 바코드 읽기 |
| 카메라 필수 | 예 | 아니요 |
| PDF 바코드 추출 | 지원되지 않음 | 네이티브 지원 |
| 가격 모델 | 제품별 영업 담당자에게 문의하세요. | 영구 등급 공개 |
| 서버 측 처리 | 다음과 같은 용도로 설계되지 않았습니다. | 주요 배포 대상 |
| 기호 구성 | 스캔하기 전에 필수 사항입니다. | 선택 과목; 자동 감지는 기본값입니다 |
| 바코드 생성 | 지원되지 않음 | 단일 패키지에 포함됨 |
상세 기능 비교
| 기능 | 스칸딧 SDK | IronBarcode |
|---|---|---|
| 독서 | ||
| 이미지 파일 읽기 | 다음과 같은 용도로 설계되지 않았습니다. | 주요 초점 |
| PDF 바코드 추출 | 지원되지 않음 | 네이티브 멀티페이지 |
| 스트림/바이트 배열 입력 | 지원되지 않음 | 예 |
| 자동 형식 감지 | 아니요 (반드시 명시해야 함) | 예 |
| 1D 형식(Code 128, EAN, UPC 등) | 30세 이상 | 30세 이상 |
| 2D 형식(QR, DataMatrix, Aztec, PDF417) | 예 | 예 |
| 문서당 여러 개의 바코드 감지 | MatrixScan (별도 제품) | 예 (단일 패키지) |
| 손상된 바코드 복구 | 제한적 | 예 (머신러닝 기반) |
| 세대 | ||
| 바코드 생성 | 지원되지 않음 | 예 |
| 이미지 파일로 출력 | 지원되지 않음 | 예 |
| PDF로 출력 | 지원되지 않음 | 예 |
| 아키텍처 | ||
| 초기화 모델 | 상태 저장 카메라 파이프라인 | 상태 비저장 메서드 호출 |
| 결과 전달 | 이벤트 콜백(비동기) | 동기식 반환 값 |
| 카메라 의존성 | 필요함 | 적용 안 됨 |
| 기호 체계 사전 선언 | 필요함 | 선택적 |
| 플랫폼 | ||
| iOS/안드로이드(MAUI) | 주요 목표 | 프로그래밍 방식 사용 |
| ASP.NET Core | 다음과 같은 용도로 설계되지 않았습니다. | 전체 지원 |
| Azure Functions/ 서버리스 | 실용적이지 않음 | 전체 지원 |
| Docker / Linux 서버 | 지원되지 않음 | 전체 지원 |
| 콘솔/백그라운드 서비스 | 다음과 같은 용도로 설계되지 않았습니다. | 전체 지원 |
| 라이선스 | ||
| 가격 투명성 | 영업 담당자에게 연락해야 합니다. | 웹사이트에 게시됨 |
| 라이선스 유형 | 연간 (제품당) | 영구적인 일회성 |
| 스캔당 요금 또는 기기당 요금 | 예 | 아니요 |
| 모든 기능을 하나의 패키지로 이용 가능 | 아니요 (모듈형 제품) | 예 |
바코드 판독 아키텍처
이 두 라이브러리 간의 가장 중요한 구조적 차이점은 입력과 출력 간의 관계를 모델링하는 방식입니다.
스칸딧 SDK 접근 방식
스칸딧은 카메라 프레임을 실시간으로 처리합니다. DataCaptureContext은 활성 카메라 세션을 유지하고, BarcodeCapture은 들어오는 각 프레임에서 바코드를 수신 대기합니다. 바코드 결과는 BarcodeScanned 이벤트를 통해 비동기적으로 전달됩니다. Scandit을 사용하여 정적 이미지 파일을 읽으려면 카메라 파이프라인을 수정하여 파일을 프레임 소스로 처리해야 합니다. 이는 기본적으로 지원되지 않는 워크플로이며, 이를 근사화하려면 엔지니어링 노력이 필요합니다.
// Scandit SDK: event-callback result delivery
barcodeCapture.BarcodeScanned += (sender, args) =>
{
foreach (var barcode in args.Session.NewlyRecognizedBarcodes)
{
string value = barcode.Data;
string symbology = barcode.Symbology.ToString();
ProcessBarcode(value, symbology);
}
};
// Scandit SDK: event-callback result delivery
barcodeCapture.BarcodeScanned += (sender, args) =>
{
foreach (var barcode in args.Session.NewlyRecognizedBarcodes)
{
string value = barcode.Data;
string symbology = barcode.Symbology.ToString();
ProcessBarcode(value, symbology);
}
};
Imports System
' Scandit SDK: event-callback result delivery
AddHandler barcodeCapture.BarcodeScanned, Sub(sender, args)
For Each barcode In args.Session.NewlyRecognizedBarcodes
Dim value As String = barcode.Data
Dim symbology As String = barcode.Symbology.ToString()
ProcessBarcode(value, symbology)
Next
End Sub
이벤트 기반 모델은 바코드가 비디오 스트림에 예측할 수 없이 나타나는 연속적인 실시간 스캔에 적합합니다. 파일 기반 처리의 경우, 이 모델은 불필요한 복잡성을 초래합니다. 입력에는 알려진 완료 경계가 있고, 카메라 세션은 자연스럽게 종료되지 않으며, 비동기 콜백 패턴은 요청-응답 서버 아키텍처와 잘 결합되지 않습니다.
IronBarcode접근법
IronBarcode 모든 입력을 결정론적 결과를 도출하는 개별 문서로 처리합니다. BarcodeReader.Read 메서드는 파일 경로, 스트림 또는 바이트 배열을 받아들이고 모든 탐지를 동기적으로 수행한 후 결과 모음을 반환합니다. 열어야 할 세션도 없고, 구성해야 할 프레임 소스도 없고, 구독해야 할 이벤트도 없습니다.
// IronBarcode: direct file reading
// NuGet: dotnet add package IronBarcode
IronBarCode.License.LicenseKey = "YOUR-KEY";
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
Console.WriteLine($"{result.Value} ({result.Format})");
// IronBarcode: direct file reading
// NuGet: dotnet add package IronBarcode
IronBarCode.License.LicenseKey = "YOUR-KEY";
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
Console.WriteLine($"{result.Value} ({result.Format})");
' IronBarcode: direct file reading
' NuGet: dotnet add package IronBarcode
IronBarCode.License.LicenseKey = "YOUR-KEY"
Dim results = BarcodeReader.Read("barcode.png")
For Each result In results
Console.WriteLine($"{result.Value} ({result.Format})")
Next
이미지에서 바코드를 읽는 데 사용되는 스테이트리스 API는 라이선스 키 외에 별도의 초기화가 필요하지 않습니다. 형식 감지는 자동으로 이루어집니다. 위의 전체 프로그램은 지원되는 모든 바코드 형식을 이미지 파일에서 단 세 줄의 실행 코드로 읽어냅니다.
플랫폼 및 배포 지원
바코드 라이브러리의 배포 컨텍스트는 기능적 역량과 관계없이 대상 환경에서 실행될 수 있는지 여부를 결정합니다.
스칸딧 SDK 접근 방식
Scandit의 아키텍처는 카메라 하드웨어와 네이티브 카메라 API를 통해 이를 노출할 수 있는 모바일 플랫폼을 필요로 합니다. iOS와 Android가 주요 지원 대상입니다. 윈도우 데스크톱은 보조 목표입니다. ASP.NET Core, Azure Functions, Docker 컨테이너 및 Linux 서버는 이 라이브러리의 설계 범위에서 제외됩니다. 코드-51941--@@는 서버리스 컴퓨팅 환경, 컨테이너화된 배포 또는 백그라운드 처리 서비스에는 해당되는 것이 없는 실행 중인 카메라 세션을 가정합니다.
| 플랫폼 | 스칸딧 SDK |
|---|---|
| iOS/안드로이드(MAUI) | 주요 목표 |
| 윈도우 데스크톱 | 보조 지원 |
| ASP.NET Core | 다음과 같은 용도로 설계되지 않았습니다. |
| Azure Functions | 실용적이지 않음 |
| Docker / Linux 서버 | 지원되지 않음 |
| 콘솔/백그라운드 서비스 | 다음과 같은 용도로 설계되지 않았습니다. |
IronBarcode접근법
IronBarcode 서버, 클라우드 및 컨테이너 환경에 맞게 설계되었습니다. 상태 비저장 API는 하드웨어 종속성이 없으며 플랫폼별 초기화 요구 사항도 없습니다. 바코드 처리를 위해 Azure Functions 에 배포하는 것은 공식적으로 지원되는 방법이며, 관련 문서도 준비되어 있습니다. Linux에서 Docker를 사용하는 것은 표준적인 배포 대상입니다. 업로드된 파일에서 바코드를 읽는 ASP.NET Core엔드포인트는 아키텍처적인 해결 방법이 필요 없는 핵심 지원 시나리오입니다.
| 플랫폼 | IronBarcode |
|---|---|
| iOS/안드로이드(MAUI) | 프로그램 방식 파일 처리 |
| ASP.NET Core | 전체 지원 |
| Azure 함수 / 람다 | 전체 지원 |
| Docker / Linux 서버 | 전체 지원 |
| 콘솔/백그라운드 서비스 | 전체 지원 |
| Blazor 서버 | 전체 지원 |
동시 배치 처리
대량의 바코드 문서를 처리하는 것은 두 라이브러리가 근본적으로 다른 관점에서 접근하는 일반적인 서버 측 요구 사항입니다.
스칸딧 SDK 접근 방식
스칸딧의 카메라 파이프라인은 단일 사용자 또는 디바이스에 서비스를 제공하는 단일 카메라 세션을 위해 설계되었습니다. 코드-51942--@@ 모델은 처리량으로 처리되는 문서 대기열이 아닌 지속적이고 지속적인 카메라 세션을 가정합니다. 라이브러리를 파일 배치 처리에 적용하려면 문서별로 카메라 세션을 시뮬레이션하거나 공유 파이프라인을 통해 문서 처리를 직렬화해야 하는데, 이 두 가지 모두 지원되는 방식이 아니며 효율적인 패턴도 아닙니다.
IronBarcode접근법
IronBarcode의 BarcodeReader.Read 메서드는 상태 비저장 방식이므로 여러 스레드에서 동시에 호출해도 본질적으로 안전합니다. 동시 일괄 처리에는 BarcodeReaderOptions를 정의하는 것 외에 특별한 구성이 필요하지 않습니다:
// IronBarcode: concurrent batch processing
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
MaxParallelThreads = 4
};
var files = Directory.GetFiles("./incoming/", "*.pdf");
var allResults = new ConcurrentBag<BarcodeResult>();
Parallel.ForEach(files, file =>
{
var results = BarcodeReader.Read(file, options);
foreach (var r in results)
allResults.Add(r);
});
// IronBarcode: concurrent batch processing
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
MaxParallelThreads = 4
};
var files = Directory.GetFiles("./incoming/", "*.pdf");
var allResults = new ConcurrentBag<BarcodeResult>();
Parallel.ForEach(files, file =>
{
var results = BarcodeReader.Read(file, options);
foreach (var r in results)
allResults.Add(r);
});
Imports System.IO
Imports System.Collections.Concurrent
Imports System.Threading.Tasks
' IronBarcode: concurrent batch processing
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True,
.MaxParallelThreads = 4
}
Dim files = Directory.GetFiles("./incoming/", "*.pdf")
Dim allResults As New ConcurrentBag(Of BarcodeResult)()
Parallel.ForEach(files, Sub(file)
Dim results = BarcodeReader.Read(file, options)
For Each r In results
allResults.Add(r)
Next
End Sub)
비동기 및 멀티스레드 바코드 판독 에 대한 자세한 패턴은IronBarcode문서에서 스레드 안전 패턴 및 처리량 튜닝 옵션을 참조하십시오.
PDF 문서 처리
PDF 바코드 추출은 이미지 기반 읽기와는 별개의 기능이며, 두 라이브러리 간의 중요한 차이점을 나타냅니다.
스칸딧 SDK 접근 방식
Scandit에는 기본 PDF 지원이 없습니다. Scandit을 사용하여 PDF에서 바코드를 추출하려면 각 PDF 페이지를 별도의 PDF 렌더링 라이브러리를 사용하여 래스터 이미지로 렌더링한 다음, 해당 이미지를 카메라 시뮬레이션 파이프라인에 입력해야 합니다. 이 접근 방식은 문서 처리 워크플로에서 일상적인 작업에 추가적인 종속성, 라이선스 비용 및 상당한 엔지니어링 노력을 요구합니다. 여러 페이지로 구성된 문서는 페이지를 반복적으로 처리하고, 렌더링된 이미지에 필요한 메모리를 관리하고, 페이지 간 결과를 수동으로 조정해야 합니다.
IronBarcode접근법
IronBarcode PDF 문서에서 바코드를 기본적으로 읽어들입니다. PDF의 파일 경로는 BarcodeReader.Read의 유효한 인수이며, 결과에는 각 바코드가 문서의 어느 페이지에서 발견되었는지를 나타내는 PageNumber 속성이 포함됩니다:
// IronBarcode: extract barcodes from every page of a PDF
var results = BarcodeReader.Read("shipping-manifest.pdf");
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Value} ({barcode.Format})");
}
// IronBarcode: extract barcodes from every page of a PDF
var results = BarcodeReader.Read("shipping-manifest.pdf");
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Value} ({barcode.Format})");
}
Imports IronBarcode
' IronBarcode: extract barcodes from every page of a PDF
Dim results = BarcodeReader.Read("shipping-manifest.pdf")
For Each barcode In results
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Value} ({barcode.Format})")
Next
PDF에서 바코드를 읽는 방법 에 대한 자세한 안내는 페이지 범위 선택 및 다중 바코드 추출 옵션을 포함하여IronBarcode설명서에서 확인할 수 있으며, 모든 PDF 처리 시나리오를 다룹니다.
가격 및 라이선스
라이선스 구조는 라이브러리 비용뿐만 아니라 평가 및 도입에 필요한 기간에도 영향을 미칩니다.
스칸디나비아식 접근법
스칸딧은 가격 정보를 공개하지 않습니다. 제품 페이지에는 SparkScan, MatrixScan, ID Scanning, AR Overlays, Parser와 같은 기능 및 제품 이름이 나열되어 있으며 모든 문의는 영업 담당자와의 상담을 통해 처리됩니다. 견적 과정에는 사용 사례 설명, 스캔량 추정, 장치 사양 명시, 지원 등급 논의, 계약 기간 협상 등이 포함되며, 이 모든 과정을 거친 후에 최종 비용이 제시됩니다. G2나 DiscoverSDK 같은 플랫폼의 리뷰들을 보면 중소기업의 경우 예측하기 어려운 비용과 예산 예측의 어려움에 대한 지적이 일관되게 나타납니다. 스칸디트(Scandit)의 각 제품 라인은 가격 책정 및 계약 방식이 별도이므로, 확장된 기능을 이용하려면 추가적인 판매 과정이 필요합니다.
IronBarcode접근법
IronBarcode 별도의 양식 제출이나 판매 문의 없이 제품 페이지에 라이선스 등급을 공개합니다.
| 라이선스 | 가격 | 개발자 | 프로젝트 |
|---|---|---|---|
| Lite | $749 (한 번) | 1 | 1 |
| Professional | 1,499달러 일회성 | 10 | 10 |
| 무제한 | 2,999달러 일회성 | 무제한 | 무제한 |
라이선스는 영구적입니다. 스캔당 요금도 없고, 기기당 요금도 없으며, 요금제 변경을 유발하는 사용량 기준치도 없습니다. 연간 갱신은 선택 사항이며, 갱신 비용은 최초 구매 가격의 절반입니다. 갱신하지 않아도 구매한 라이선스는 계속 유효합니다.IronBarcode패키지 하나에 포함된 모든 기능(바코드 읽기, 생성, PDF 지원, 다중 바코드 감지)은 모든 등급에 포함되어 있습니다.
API 매핑 참조
다음 표는 마이그레이션의 변환 비용을 평가하는 팀을 위해 스칸딧 SDK 개념을IronBarcode의 해당 개념과 연결한 것입니다.
| 스칸딧 SDK | IronBarcode | 노트 |
|---|---|---|
| @@--코드-51947--@@ | @@--코드-51948--@@ | 과제 하나; 컨텍스트 개체 필요 없음 |
| @@--코드-51949--@@ | @@--코드-51950--@@ | IronBarcode에서 선택 사항입니다. |
| @@--코드-51951--@@ | (not needed) | 자동 감지가 기본 설정입니다. |
| @@--코드-51952--@@ | (not applicable) | 파일 처리에는 카메라 개념이 없습니다. |
| @@--코드-51953--@@ | (not applicable) | IronBarcode에 프레임 소스가 없습니다. |
| @@--코드-51954--@@ | (not applicable) | 카메라 없음 상태 머신 |
| @@--코드-51955--@@ | @@--코드-51956--@@ | 단일 호출로 읽기가 시작됩니다. |
BarcodeScanned += 이벤트 핸들러 |
코드-51958--@@ 반환 값에 대한 반복 작업 | 동기식 수집; 이벤트 시스템 없음 |
| @@--코드-51959--@@ | 반환 값 BarcodeReader.Read() |
직접 수집 접근 |
| @@--코드-51961--@@ | @@--코드-51962--@@ | 동일한 의미 내용 |
| @@--코드-51963--@@ | @@--코드-51964--@@ | 동등 형식 열거 |
| SparkScan, MatrixScan, ID 스캐닝(별도 제품) | 단일 IronBarcode 패키지 |
별도의 추가 기능은 없습니다. |
팀에서 Scandit SDK에서IronBarcode로 전환을 고려할 때
서버 측 처리 요구 사항
ASP.NET Core API, 백그라운드 처리 서비스 또는 Azure Functions를 구축하는 팀은 통합 첫 단계부터 Scandit의 아키텍처가 근본적으로 맞지 않는다는 것을 알게 됩니다. 코드-51966--@@ 및 카메라 파이프라인은 서버 환경에 존재하지 않는 하드웨어를 가정합니다. 프로젝트의 바코드 요구 사항이 업로드된 파일에서 읽고, 문서 대기열을 처리하고, 수신되는 PDF에서 바코드 데이터를 추출하는 등 전적으로 서버 측에서 처리되는 경우, 카메라 파이프라인은 초기화 복잡성, 비동기 상태 머신 오버헤드 및 플랫폼 제약 조건을 추가하여 실제 비즈니스 요구 사항에 아무런 도움이 되지 않습니다.
일괄 문서 처리
배송 명세서, 송장, 재고 기록, 의료 양식 등 바코드가 부착된 문서를 대량으로 처리하는 조직은 Scandit의 프레임 소스 모델이 문서 대기열과 호환되지 않는다는 것을 알게 됩니다. 이 라이브러리는 시작점과 끝점이 확정된 개별 문서가 아닌, 연속적인 카메라 촬영 세션을 위해 설계되었습니다. 문서 처리량이 증가하고 병렬 처리가 필요해지면 카메라 파이프라인의 상태 유지 기능은 장점이 아니라 오히려 엔지니어링 장애물이 됩니다.
가격 투명성
신규 프로젝트의 예산 제안, 공급업체 비교 또는 비용 편익 분석을 진행하는 개발팀은 스칸딧(Scandit)과의 영업 상담 없이는 해당 작업을 완료할 수 없습니다. 프로젝트에 확정된 예산과 일정이 있는 경우, 영업 상담 없이 라이선스 비용을 확인할 수 없기 때문에 프로젝트 계획에 차질과 불확실성이 발생하고 이는 결국 프로젝트 진행에 부정적인 영향을 미칩니다. 여러 도서관 옵션을 동시에 평가하는 팀은 공개된 가격 정보가 없어 스칸딧을 체계적인 비교 대상에 포함하기 어렵다는 것을 알게 됩니다.
파이프라인 복잡성 감소
Scandit이 이미 모바일 카메라 스캐닝에 사용되고 있더라도, 일부 팀은 동일한 애플리케이션에서 서버 측 바코드 요구 사항을 충족하려면 다른 도구가 필요하다는 것을 알게 됩니다. 실시간 모바일 스캔에 적합한 카메라 파이프라인을 정적 문서 처리에 적용하면 불필요한 복잡성이 발생합니다. 이 단계에 도달한 팀은 카메라 파이프라인을 설계 목적에 맞지 않는 사용 사례로 확장하려고 시도하기보다는 기존 Scandit 배포와 함께 서버 측 처리를 위해IronBarcode채택하는 경우가 많습니다.
일반적인 마이그레이션 고려사항
카메라 파이프라인에는 해당 파일이 없습니다.
컨텍스트 생성, 설정 구성, 기호 활성화, 카메라 획득, 프레임 소스 할당, 상태 전환 등 DataCaptureContext 초기화 블록 전체는 IronBarcode의 파일 기반 API에 해당하는 기능이 없습니다. 서버 측 통합 코드를 마이그레이션할 때 이 블록은 완전히 삭제됩니다. 번역되지 않았습니다. 제거되었습니다.IronBarcode교체는 라이선스 키 할당 후 BarcodeReader.Read 호출로 이루어집니다.
이벤트 콜백을 통한 직접 반환
실시간 카메라 스캔은 본질적으로 비동기식이기 때문에 Scandit은 BarcodeScanned 이벤트를 통해 바코드 결과를 전달합니다.IronBarcode파일 기반 읽기에는 완료 시점이 정해져 있기 때문에 결과를 동기적으로 타입이 지정된 컬렉션으로 반환합니다. 마이그레이션은 이벤트 핸들러 로직을 표준 반복문으로 변환하는 과정을 포함합니다.
// Scandit callback pattern (removed during migration)
barcodeCapture.BarcodeScanned += (sender, args) =>
{
foreach (var barcode in args.Session.NewlyRecognizedBarcodes)
ProcessBarcode(barcode.Data, barcode.Symbology.ToString());
};
//IronBarcodedirect return (replacement)
foreach (var result in BarcodeReader.Read("document.png"))
ProcessBarcode(result.Value, result.Format.ToString());
// Scandit callback pattern (removed during migration)
barcodeCapture.BarcodeScanned += (sender, args) =>
{
foreach (var barcode in args.Session.NewlyRecognizedBarcodes)
ProcessBarcode(barcode.Data, barcode.Symbology.ToString());
};
//IronBarcodedirect return (replacement)
foreach (var result in BarcodeReader.Read("document.png"))
ProcessBarcode(result.Value, result.Format.ToString());
Imports System
' Scandit callback pattern (removed during migration)
AddHandler barcodeCapture.BarcodeScanned, Sub(sender, args)
For Each barcode In args.Session.NewlyRecognizedBarcodes
ProcessBarcode(barcode.Data, barcode.Symbology.ToString())
Next
End Sub
' IronBarcodedirect return (replacement)
For Each result In BarcodeReader.Read("document.png")
ProcessBarcode(result.Value, result.Format.ToString())
Next
기호 선언 제거
스캔을 시작하기 전에 EnableSymbologies를 명시적으로 호출해야 합니다.IronBarcode심볼 사전 선언이 필요하지 않습니다. 모든 형식이 자동으로 감지됩니다. 마이그레이션 중에는 모든 settings.EnableSymbologies(...) 호출이 제거됩니다. 원래 Scandit 코드가 성능상의 이유로 기호를 제한하는 경우 BarcodeReaderOptions.ExpectBarcodeTypes를 통해 IronBarcode에서 동등한 최적화를 사용할 수 있지만, 시작하기 위해 반드시 필요한 것은 아닙니다.
IronBarcode추가 기능
위 비교에서 다룬 영역 외에도IronBarcode문서 및 데이터 처리 시나리오에서 활용도를 확장하는 기능을 제공합니다.
- 바코드 생성 : QR 코드, Code 128, Data Matrix, PDF417을 포함한 모든 지원되는 심볼 체계를 사용하여 바코드를 이미지 파일로 생성하거나 PDF에 삽입할 수 있습니다.
- GS1 및 구조화된 데이터 파싱 : GS1-128 애플리케이션 식별자를 포함한 구조화된 바코드 데이터 형식을 바코드 결과에서 직접 디코딩합니다.
- 이미지 보정 및 전처리 : 기울어지거나, 대비가 낮거나, 손상된 바코드를 자동으로 보정하여 수동 전처리 없이 스캔 문서의 판독률을 향상시킵니다.
- 멀티 바코드 감지:
BarcodeReader.Read호출 한 번으로 같은 페이지에 있는 혼합 형식을 포함하여 문서에 있는 모든 바코드를ExpectMultipleBarcodes옵션을 사용하여 감지합니다. - MAUI 바코드 판독: 캡처 및 처리 모델을 사용하는 MAUI 애플리케이션에서 IronBarcode는
MediaPicker를 사용하여 사진을 캡처한 후 처리 단계를 처리합니다. - 스트림 및 바이트 배열 입력: 파일 경로 외에도
BarcodeReader.Read은Stream및byte[]입력을 허용하여 임시 파일 생성 없이 업로드 핸들러, 메모리 버퍼 및 네트워크 스트림과 통합할 수 있습니다.
.NET 호환성 및 미래 준비
IronBarcode .NET Framework 4.6.2 이상, .NET Standard 2.0, 그리고 .NET 6, .NET 7, .NET 8, .NET 9를 포함한 모든 최신 .NET 버전을 지원합니다. 이 라이브러리는 현재 및 향후 출시될 .NET 버전(2026년 말 출시 예정인 .NET 10 포함)과의 호환성을 유지하기 위해 정기적으로 업데이트됩니다. 상태 비저장 API 설계는 최신 .NET 에서 도입된 비동기 우선 프로그래밍 모델과 호환되며, Linux 및 컨테이너 환경 지원을 통해 .NET 사용이 지속적으로 증가하고 있는 클라우드 네이티브 워크로드에 적합합니다. 이 라이브러리는 .NET 런타임 자체를 제외하고는 플랫폼별 런타임 종속성 없이 단일 NuGet 패키지로 제공되므로 .NET 버전 간 업그레이드 시 별도의 라이브러리 업데이트나 추가 구성이 필요하지 않습니다.
결론
Scandit SDK와IronBarcode서로 다른 배포 환경을 반영하는 근본적으로 다른 바코드 처리 접근 방식을 나타냅니다. Scandit는 모바일 하드웨어에서 실시간 카메라 스캐닝을 위해 개발되었으며, 실시간 카메라 세션, 프레임별 분석 설정 및 이벤트 기반 결과 전달을 조율하는 아키텍처를 갖추고 있습니다.IronBarcode서버, 데스크톱 및 클라우드 인프라에서 파일 기반 및 문서 중심 처리를 위해 구축되었으며, 파일, 스트림 및 PDF를 입력으로 받아 동기식 결과를 반환하는 상태 비저장 API를 제공합니다. 이것들은 동일한 아이디어를 서로 경쟁적으로 구현한 것이 아니라, 서로 다른 사용 사례에 맞춰 개발된 별개의 아이디어입니다.
Scandit SDK는 사용자가 기기 카메라를 실제 바코드에 비추고 100ms 미만의 시각적 피드백이 필요한 모바일 애플리케이션에 적합한 선택입니다. AR 오버레이 기능, MatrixScan을 통한 다중 바코드 동시 감지, ID Scanning을 통한 신분증 스캔 기능은 파일 기반 바코드 라이브러리에서는 찾아볼 수 없는, 특별히 설계된 기능입니다. 모바일 현장 작업자를 대규모로 배치하거나, 소비자 대상 스캔 서비스를 운영하거나, Enterprise 모바일 스캔 SLA가 필요한 조직은 Scandit이 설계된 대상 고객을 주목하고 있습니다.
IronBarcode 는 바코드 데이터가 이미지, PDF, 바이트 배열 또는 업로드 스트림과 같은 파일 형태로 제공되고 카메라, 사용자 또는 UI 없이 처리가 이루어질 때 적합한 선택입니다.IronBarcode서버 측 문서 처리, ASP.NET CoreAPI 엔드포인트, Azure Functions, 예약된 배치 작업 및 컨테이너화된 마이크로서비스와 같은 환경에서 실행되도록 설계되었습니다. 공개된 가격, 단일 패키지 기능 액세스 및 직접 파일 읽기 API는 Scandit의 카메라 파이프라인 모델과 연락처 기반 판매 모델이 이러한 시나리오에서 야기하는 아키텍처적 마찰과 예산 불확실성을 제거합니다.
솔직히 말해서, 선택은 선호도보다는 배포 환경에 따라 크게 좌우됩니다. 실시간 모바일 카메라 스캔이 필요한 프로젝트에는 명확한 해답이 있습니다. 서버 측에서 PDF 바코드를 추출해야 하는 프로젝트의 경우에도 답은 마찬가지로 명확합니다. 두 라이브러리가 혼동되는 경우가 종종 발생하는 부분은 바로 MAUI 애플리케이션, 하이브리드 아키텍처, 그리고 모바일 스캔과 문서 처리 요구 사항을 모두 가진 조직과 같은 중간 영역입니다. 이러한 경우 두 라이브러리는 공존할 수 있습니다. Scandit는 카메라 관련 작업을 처리하고IronBarcode문서 처리 작업을 처리하며, 어느 라이브러리도 설계 목적과 다른 역할을 강요받지 않습니다.
자주 묻는 질문
스칸딧 SDK란 무엇인가요?
Scandit SDK는 C# 애플리케이션에서 바코드를 생성하고 판독하기 위한 .NET 바코드 라이브러리입니다. 개발자가 .NET 프로젝트용 바코드 솔루션을 선택할 때 평가하는 여러 대안 중 하나입니다.
스칸딧 SDK와 IronBarcode의 주요 차이점은 무엇인가요?
IronBarcode는 인스턴스 관리가 필요 없는 정적 상태 비저장 API를 사용하는 반면, Scandit SDK는 일반적으로 사용하기 전에 인스턴스 생성 및 구성이 필요합니다. 또한 IronBarcode는 모든 환경에서 기본 PDF 지원, 자동 형식 감지, 단일 키 라이선싱을 제공합니다.
IronBarcode가 Scandit SDK보다 라이선스 취득이 더 쉬운가요?
IronBarcode는 개발 및 프로덕션 배포를 모두 포괄하는 단일 라이선스 키를 사용합니다. 따라서 SDK 키와 런타임 키를 분리하는 라이선싱 시스템에 비해 CI/CD 파이프라인 및 Docker 구성이 간소화됩니다.
IronBarcode는 스칸딧 SDK가 지원하는 모든 바코드 형식을 지원하나요?
IronBarcode는 QR코드, Code 128, Code 39, DataMatrix, PDF417, Aztec, EAN-13, UPC-A, GS1 등 30개 이상의 바코드 심볼로지를 지원합니다. 형식 자동 감지 기능은 명시적인 형식 열거가 필요하지 않음을 의미합니다.
IronBarcode는 네이티브 PDF 바코드 판독을 지원하나요?
예. IronBarcode는 별도의 PDF 렌더링 라이브러리가 필요 없이 BarcodeReader.Read("document.pdf")를 사용하여 PDF 파일에서 직접 바코드를 판독합니다. 페이지별 결과에는 페이지 번호, 바코드 형식, 값 및 신뢰도 점수가 포함됩니다.
IronBarcode는 Scandit SDK와 비교하여 일괄 처리를 어떻게 처리하나요?
IronBarcode의 정적 메서드는 상태 저장소가 없고 자연스럽게 스레드에 안전하므로 스레드별 인스턴스 관리 없이 Parallel.ForEach를 직접 사용할 수 있습니다. 어떤 가격대에서도 처리량 상한선이 없습니다.
IronBarcode 어떤 .NET 버전을 지원하나요?
IronBarcode는 단일 NuGet 패키지로 .NET Framework 4.6.2+, .NET Core 3.1 및 .NET 5, 6, 7, 8, 9를 지원합니다. 플랫폼 대상에는 Windows x64/x86, Linux x64, macOS x64/ARM이 포함됩니다.
.NET 프로젝트에 IronBarcode를 설치하려면 어떻게 해야 하나요?
NuGet을 통해 IronBarcode 설치: 패키지 관리자 콘솔에서 'Install-Package IronBarCode'를 실행하거나 CLI에서 '닷넷 추가 패키지 IronBarCode'를 실행합니다. 추가 SDK 인스톨러나 런타임 파일은 필요하지 않습니다.
스칸딧과 달리 구매하기 전에 IronBarcode를 평가할 수 있나요?
예. IronBarcode의 평가판 모드는 완전한 디코딩된 바코드 값을 반환하며 생성된 출력 이미지에만 워터마크가 표시됩니다. 구매를 결정하기 전에 자신의 문서에서 판독 정확도를 벤치마킹할 수 있습니다.
Scandit SDK와 IronBarcode의 가격 차이는 무엇인가요?
개발 및 프로덕션을 포함하는 단일 개발자 영구 라이선스의 IronBarcode 가격은 $749부터 시작합니다. 가격 세부 정보 및 볼륨 옵션은 IronBarcode 라이선스 페이지에서 확인할 수 있습니다. 별도의 런타임 라이선스 요구 사항은 없습니다.
스칸딧 SDK에서 IronBarcode로 마이그레이션하는 것은 간단하나요?
스칸딧 SDK에서 IronBarcode로의 마이그레이션은 주로 인스턴스 기반 API 호출을 IronBarcode의 정적 메서드로 대체하고, 라이선스 상용구를 제거하고, 결과 속성 이름을 업데이트하는 작업을 포함합니다. 대부분의 마이그레이션에는 코드를 추가하기보다는 줄이는 작업이 포함됩니다.
IronBarcode는 로고가 있는 QR 코드를 생성하나요?
예. QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png")는 구성 가능한 오류 수정을 통해 기본적으로 브랜드 이미지를 QR코드에 임베드합니다. ChangeBarCodeColor()를 통해 컬러 QR 코드도 지원됩니다.

