TL;DR — 사업자등록증 필드 추출에 쓰던 Tesseract OCR이 성능이 잘 안 나왔고, 이를 더 튜닝하는 비용보다 무료로 쓸 수 있는 외부 API(Gemini)로 바꾸는 게 낫다고 판단해 교체했다. 출력 형식을 JSON으로 지정하니 추출 정확도가 크게 올랐다.

배경

문제 (증상)

원인 분석 / 판단

해결

Gemini Vision으로 교체(2026-02)하고, 출력 형식을 JSON으로 지정해 필드를 구조화된 형태로 직접 받았다 — 이 JSON 형식 지정이 정확도를 크게 끌어올렸다.

private static final String GEMINI_MODEL = "gemini-3.1-flash-lite-preview";

public BusinessRegistrationInfo extractBusinessRegistrationInfo(MultipartFile pdfFile) throws IOException {
    // 1. PDF → 이미지(PDFBox) → base64
    // 2. Gemini Vision 호출 (필드를 JSON 형식으로 추출하도록 지정)
    String extractedJson = callGeminiVisionApi(base64Image);
    // 3. JSON → BusinessRegistrationInfo
    return parseJsonToBusinessRegistrationInfo(extractedJson);
}

고려한 트레이드오프