UGLYPEAR AI 사업 전환 완료: 고성능 문서 압축 × RAG 데이터 엔지니어링 기반신규 사업 알아보기 →

압축 SDK 통합 가이드: Python/Java/C# 다국어 호출

결론부터 말씀드리면: SmartSlim SDK는 표준 C ABI를 통해 동적 라이브러리를 내보내며, Python/Java/C#/Rust 네 가지 언어 통합을 지원합니다. 핵심 호출과정는 네 단계로 나뉩니다 - SDK 초기화, 압축 구성 생성, 압축 실행, 자원 해제. 단일 파일 압축의 경우 100MB PDF가 약 0.8초 만에 완료되며, 라이선스 검증 지연은 5ms 미만입니다. 본문에서는 세 가지 언어의 완전한 통합 코드 예제, API 파라미터 표, 성능 튜닝 방안과 대량 압축 데모를 제시합니다. 아래에서는 SDK 아키텍처부터 시작하여 각 언어의 통합 방법을 하나씩 상세히 설명하겠습니다.

SDK 통합이 아닌 HTTP 인터페이스를 통한 압축 서비스 호출이 필요하시다면, 먼저 압축 API 호출 실전: RESTful 인터페이스 문서 상세를 읽어보시기를 권장합니다.

1. SDK 아키텍처와 통합 원리

SmartSlim SDK의 저수준은 Rust 압축 엔진으로, 표준 C ABI(Application Binary Interface)를 통해 동적 라이브러리(.so/.dylib/.dll)로 내보내지며, FFI(외부 함수 인터페이스)를 지원하는 모든 언어가 이를 로드하여 호출할 수 있습니다. 이러한 아키텍처의 장점은 Rust로 코어 엔진을 한 번 작성하면 여러 언어가 동일한 바이너리 라이브러리를 재사용할 수 있어, 각 언어에서 압축 로직을 반복 구현할 필요가 없다는 점입니다.

구성 요소기술역할출력물
압축 엔진 코어Rust압축 알고리즘 실행정적 라이브러리 .a/.lib
ABI 내보내기 계층Rust #[no_mangle]C 호환 함수 내보내기동적 라이브러리 .so/.dylib/.dll
언어 바인딩 계층각 언어 FFI네이티브 호출 캡슐화각 언어 패키지/라이브러리
라이선스 모듈Rust + 암호화라이선스 키 검증동적 라이브러리 내장
구성 관리Rust struct압축 파라미터 관리JSON/TOML 구성

SDK는 6개 플랫폼용 사전 컴파일된 라이브러리를 제공하여, 주요 운영 체제와 CPU 아키텍처를 포괄하며 별도 Rust 코드 컴파일 없이 바로 사용할 수 있습니다.

플랫폼동적 라이브러리운영 체제CPU 아키텍처적용 시나리오
linux-x64libsmartslim.soLinuxx86_64서버/데스크톱
linux-arm64libsmartslim.soLinuxaarch64ARM 서버/라즈베리 파이
macos-universallibsmartslim.dylibmacOSx86_64+arm64Intel+Apple Silicon
windows-x64smartslim.dllWindowsx86_64Windows 데스크톱/서버
linux-server-x64libsmartslim.soLinuxx86_64서버 최적화 버전
linux-server-arm64libsmartslim.soLinuxaarch64ARM 서버 최적화 버전

2. 핵심 API 파라미터 상세

SDK의 핵심 API는 초기화, 구성, 압축, 해제 네 가지로 분류됩니다. 아래 표는 주요 API 함수와 그 파라미터 설명을 정리한 것입니다.

API 함수파라미터반환값설명
smartslim_initlicense_key: Stringhandle: HandleSDK 초기화, 라이선스 검증
smartslim_create_configformat, level, qualityconfig: ConfigHandle압축 구성 생성
smartslim_compresshandle, input, output, configresult: ResultCode단일 파일 압축 실행
smartslim_compress_batchhandle, files[], config, workersresults[]: ResultCode대량 압축(다중 동시성)
smartslim_get_infohandle, filepathFileInfo: struct파일 압축 정보 획득
smartslim_free_configconfig: ConfigHandlevoid구성 자원 해제
smartslim_freehandle: HandlevoidSDK 인스턴스 해제

압축 구성 파라미터는 4단계 압축(low/medium/high/ultra) x 15개 시나리오 x 5단계 성능(ultrafast/fast/balanced/quality/optimal), 총 300가지 조합을 지원하여 거의 모든 압축 요구를 포괄합니다.

파라미터선택값기본값설명
formatpdf/image/video/office/ofd자동 감지파일 유형
levellow/medium/high/ultramedium압축 레벨
quality1-10075품질 계수(이미지/PDF)
performanceultrafast/fast/balanced/quality/optimalbalanced성능 등급
workers1-164동시성 스레드 수
securityDISABLED/LOW/MEDIUM/HIGH/MAXIMUMMEDIUM보안 레벨

3. 세 가지 언어 통합 코드 예제

아래에서는 Python, Java, C# 세 가지 언어의 완전한 통합 예제를 제시하며, 모두 단일 PDF 파일 압축을 예로 듭니다.

3.1 Python 통합 (ctypes)

Python은 ctypes 모듈을 통해 동적 라이브러리를 로드하고 내보내기 함수를 호출합니다. 아래 코드는 SDK 초기화, 구성 생성, PDF 압축, 자원 해제의 완전한 흐름을 구현합니다. 100MB PDF 압축은 약 0.8초가 소요됩니다.

단계Python 코드설명
1. 라이브러리 로드lib = ctypes.CDLL('./libsmartslim.so')동적 라이브러리 로드
2. 초기화handle = lib.smartslim_init(b"YOUR_LICENSE")라이선스 키 전달
3. 구성 생성config = lib.smartslim_create_config(b"pdf", b"medium", 75)PDF/medium/q75
4. 압축 실행lib.smartslim_compress(handle, b"in.pdf", b"out.pdf", config)파일 압축
5. 자원 해제lib.smartslim_free_config(config); lib.smartslim_free(handle)메모리 해제

3.2 Java 통합 (JNI)

Java는 JNI(Java Native Interface)를 통해 동적 라이브러리를 호출합니다. 먼저 native 메서드 선언을 작성한 다음 라이브러리 파일을 로드해야 합니다. 아래 코드는 핵심 호출 흐름을 보여주며, Spring Boot 등 Java 백엔드 프로젝트 통합에 적합합니다.

단계Java 코드설명
1. 라이브러리 로드System.loadLibrary("smartslim")DLL/SO 로드
2. 메서드 선언native long smartslim_init(String key)JNI 메서드 선언
3. 초기화long handle = smartslim_init("YOUR_LICENSE")인스턴스 핸들 획득
4. 구성 생성long config = smartslim_create_config("pdf","medium",75)구성 파라미터
5. 압축 실행smartslim_compress(handle, "in.pdf", "out.pdf", config)파일 압축
6. 자원 해제smartslim_free_config(config); smartslim_free(handle)메모리 해제

3.3 C# 통합 (P-Invoke)

C#은 P/Invoke(Platform Invocation Services)를 통해 동적 라이브러리를 호출합니다. DllImport 특성을 사용하여 외부 함수를 선언하며, .NET/.NET Core 프로젝트 통합에 적합합니다. 아래 코드는 Windows와 Linux 듀얼 플랫폼에 모두 적용됩니다.

단계C# 코드설명
1. 함수 선언[DllImport("smartslim")] static extern IntPtr smartslim_init(string key)P-Invoke 선언
2. 초기화IntPtr handle = smartslim_init("YOUR_LICENSE")핸들 획득
3. 구성 생성IntPtr config = smartslim_create_config("pdf","medium",75)구성 파라미터
4. 압축 실행smartslim_compress(handle, "in.pdf", "out.pdf", config)파일 압축
5. 자원 해제smartslim_free_config(config); smartslim_free(handle)메모리 해제

4. 성능 튜닝과 대량 압축

SDK 통합의 성능 튜닝은 주로 동시성, 메모리, 대량 처리의 세 가지 차원을 중심으로 이루어집니다. 아래 표는 서로 다른 튜닝 전략의 효과를 비교합니다.

튜닝 전략단일 파일 소요100개 파일 총 소요메모리 사용량적용 라이선스
단일 스레드 순차0.8초80초50MBTrial(동시성 1)
4 스레드 동시0.8초22초180MBStandard(동시성 4)
8 스레드 동시0.8초12초320MBProfessional(동시성 8)
16 스레드 동시0.8초7초600MBEnterprise(동시성 16+)
스트리밍 압축 모드1.2초95초15MB모든 라이선스

대량 압축에는 SDK 내장 smartslim_compress_batch 인터페이스 사용을 권장하며, 파일 목록과 동시성 수를 전달하면 SDK 내부에서 Rust 비동기 작업 스케줄링을 사용하므로 각 언어에서 직접 멀티스레딩을 구현하는 것보다 효율적입니다. 다음은 100개 PDF 파일 대량 압축 데모의 성능 데이터입니다.

파일 수단일 파일 평균총 크기압축 후 크기8 동시성 소요압축률
100개 PDF15MB1.5GB320MB12초78.7%
100개 PNG8MB800MB180MB8초77.5%
100개 DOCX5MB500MB120MB6초76.0%
100개 MP450MB5GB1.8GB45초64.0%

Rust 압축 라이브러리의 저수준 알고리즘 비교를 이해하려면 Rust 압축 라이브러리 비교: 왜 Rust로 압축 엔진을 작성하는가를 참조하시기 바랍니다. 압축 서비스를 Docker 컨테이너로 배포해야 한다면 Docker로 압축 서비스 배포를 참조하시기 바랍니다.

5. 자주 묻는 질문(FAQ)

Q1: 압축 SDK는 어떤 프로그래밍 언어를 지원하나요?

SmartSlim SDK는 표준 C ABI를 통해 동적 라이브러리를 내보내며, Python(ctypes), Java(JNI), C#(P-Invoke), Rust(FFI) 네 가지 언어 통합을 지원합니다. SDK는 6개 플랫폼용 사전 컴파일된 라이브러리(linux-x64/arm64, macos-universal, windows-x64 등)를 제공하여 별도 컴파일 없이 바로 사용할 수 있습니다. C ABI 호출을 지원하는 다른 언어(예: Go, Node.js, PHP)도 각자의 FFI 메커니즘을 통해 통합할 수 있습니다.

Q2: 압축 SDK의 API 호출과정은 무엇인가요?

표준 호출과정는 네 단계로 나뉩니다. 1. smartslim_init을 호출하여 SDK를 초기화하고 라이선스 키를 전달. 2. smartslim_create_config를 호출하여 압축 구성 생성(포맷, 레벨, 성능 등급 지정). 3. smartslim_compress를 호출하여 압축 실행(입력 파일 경로와 출력 경로 전달). 4. smartslim_free를 호출하여 자원 해제. 단일 파일 압축의 경우 100MB PDF가 약 0.8초 만에 완료되며, 라이선스 검증 지연은 5ms 미만입니다.

Q3: 압축 SDK로 대량 압축을 어떻게 구현하나요?

대량 압축에는 두 가지 방식이 있습니다. 첫째, 단일 파일 압축 인터페이스를 반복 호출하되 멀티스레딩과 함께 사용(Python은 concurrent.futures, Java는 ThreadPoolExecutor). 둘째, SDK 내장 대량 압축 인터페이스 smartslim_compress_batch를 사용하며, 파일 목록과 동시성 수를 전달하면 SDK 내부에서 Rust 비동기 작업 스케줄링이 이루어집니다. 두 번째 방식을 권장하며, Standard 라이선스는 4 동시성, Professional은 8 동시성, Enterprise는 16 이상의 동시성을 지원합니다.

Q4: 압축 SDK 통합 오류는 어떻게 처리하나요?

흔한 오류와 해결 방안: 1. UnsatisfiedLinkError(Java) 또는 DLL 로드 실패 - 동적 라이브러리 경로와 시스템 아키텍처 일치 여부 확인. 2. 라이선스 검증 실패 - 라이선스 키 정확성 및 만료 여부 확인. 3. 메모리 오버플로우 - 동시성 수를 줄이거나 스트리밍 압축 모드 활성화. 4. 포맷 미지원 - SDK 버전이 대상 포맷을 지원하는지 확인. DEBUG 로그를 활성화하여 문제를 파악하거나 SmartSlim 기술 지원팀에 연락하시기 바랍니다.

결론

SmartSlim SDK는 표준 C ABI를 통해 한 번 작성, 다중 언어 호출을 구현하며, Python/Java/C#/Rust 네 가지 언어 통합을 지원합니다. 핵심 호출과정 4단계: 초기화, 구성 생성, 압축 실행, 자원 해제. 단일 파일 압축의 경우 100MB PDF가 0.8초 만에 완료되며, 대량 압축 100개 파일의 8 동시성은 12초에 불과합니다. 성능 튜닝의 세 가지 차원: 동시성(4–16 스레드), 메모리(스트리밍 모드로 75% 절감), 대량 처리(내장 batch 인터페이스).

세 가지를 기억하시기 바랍니다. 첫째, 시스템 아키텍처와 일치하는 사전 컴파일된 라이브러리 선택(6개 플랫폼 완전 포괄). 둘째, 대량 압축은 자체 멀티스레딩보다 내장 batch 인터페이스를 우선 사용. 셋째, 운영 환경에는 Professional 이상 라이선스(8 동시성) 권장, 성능과 비용 양립. HTTP 인터페이스 호출을 SDK 통합보다 선호하신다면, 압축 API 호출 실전을 참조하시기 바랍니다.

파일을 압축해야 하나요? SmartSlim을 사용해 보세요

자체 개발한 Rust 압축 엔진을 기반으로, PDF/이미지/동영상/Office/OFD 등 10개 분야 40개 이상의 형식을 지원합니다. 로컬 압축으로 데이터가 외부로 나가지 않습니다.