본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 05. 27. 22:29

서버리스 연구 논문 지능형 처리: Docling, Lambda Containers 및 Amazon Bedrock

요약

IBM Docling을 활용하여 복잡한 구조의 과학 논문 PDF에서 구조화된 정보를 추출하고, 이를 AWS Lambda와 Amazon Bedrock을 통해 서버리스 지식 베이스로 구축하는 방법을 다룹니다. 멀티모달 모델의 비용과 개인정보 문제를 해결하기 위한 효율적인 아키텍처 설계 과정을 소개합니다.

핵심 포인트

  • Docling을 이용한 복잡한 PDF(표, 공식 등)의 구조적 데이터 추출
  • AWS Lambda Containers를 활용한 서버리스 문서 처리 환경 구축
  • Amazon Bedrock Knowledge Bases 기반의 개인용 지식 베이스 구현
  • Lambda 크기 제한 및 타임아웃 등 실무적 구현 이슈 해결

1.🚀 서론

과학적 PDF를 처리하는 것은 단순히 텍스트를 추출하는 것만큼 간단하지 않습니다.

많은 논문에는 표(tables), 다중 열(multiple columns), 공식(formulas), 도표(figures) 및 구조가 포함되어 있어, 전통적인 추출기(extractors)를 사용할 때 쉽게 깨질 수 있습니다.
이러한 문서가 비공개(private)인 경우 문제는 더욱 커집니다. 우리는 항상 이들을 분석하기 위해 멀티모달 모델(multimodal models)에 전적으로 의존하고 싶지는 않으며, 많은 파일을 다룰 때 비용 또한 빠르게 증가할 수 있습니다.

몇 달 전, 저는 PyData Berlin에 참석했고 강연 중 하나에서 지능형 문서 처리(intelligent document processing)에 집중하는 오픈 소스 프로젝트인 IBM Docling을 발견했습니다. 제 관심을 가장 끌었던 점은 복잡한 PDF, 특히 전통적인 도구로는 처리하기 어려운 표, 다중 열, 공식 및 레이아웃이 포함된 과학적 문서에서 구조화된 정보(structured information)를 추출하는 능력이었습니다.

그 순간부터, 저는 비용을 통제하면서도 이러한 유형의 처리를 간단하고 확장 가능한(scalable) 방식으로 클라우드에 도입하는 방법에 대해 생각하기 시작했습니다. 생성형 AI(generative AI)로 복잡한 문서를 분석하는 현재의 일부 솔루션은 멀티모달 모델에 크게 의존하지만, 대량의 논문이나 비공개 문서를 다루는 시나리오에서는 비용과 개인정보 보호(privacy)가 빠르게 문제가 될 수 있습니다.

제 이전 기사들을 읽어보셨다면, 제가 실제 사용 사례(use case)를 중심으로 콘텐츠를 만드는 것을 좋아한다는 것을 아마 알고 계실 것입니다. 이 튜토리얼에서 저는 제2형 당뇨병과 비만 치료를 위해 널리 연구되는 약물 계열인 GLP-1 수용체 작용제(GLP-1 receptor agonists) 연구와 관련된 과학 논문들을 다루기로 결정했습니다.

이러한 치료제들은 현재 많은 사람들이 체중 감량 목적으로 사용하기 때문에 매우 인기가 높습니다.

튜토리얼의 목적

그 아이디어는 인터넷 전체를 대상으로 하는 범용 검색 엔진을 구축하는 것이 아니라, 훨씬 더 흥미로운 것, 즉 보안 환경 내에서 오직 본인의 연구 문서만을 쿼리(Query)할 수 있는 개인용 지식 베이스(Private Knowledge Base)를 만드는 것입니다.
이 문제를 해결하기 위해, 우리는 다음과 같은 요소들을 기반으로 한 아키텍처를 구축할 것입니다:

  • 📦 AWS Lambda Containers
  • 📑 Amazon Bedrock Knowledge Bases
  • 🐣 Docling을 이용한 PDF 처리
  • 🪣 Amazon S3 저장
  • ✂️ 정보 검색(Information Retrieval) 성능을 향상시키기 위한 청킹(Chunking) 전략

튜토리얼을 진행하면서, 저는 이 솔루션을 구현하는 동안 발견했던 몇 가지 실제 문제들도 보여드릴 것입니다:

  • 〰️ Lambda의 크기 제한 (Size limits),
  • 〰️ 모델 다운로드로 인한 타임아웃 (Timeouts),
  • 〰️ Docker 이미지 최적화 (Docker image optimization),
  • 〰️ 과학 문서 처리 (Scientific document processing),
  • 〰️ 그리고 서버리스(Serverless) 및 저비용 접근 방식을 유지하기 위한 아키텍처 결정 사항들.

최종 목표는 일련의 과학 논문들을 자연어(Natural Language)를 사용하여 쿼리할 수 있는 지식 베이스로 변환하는 것입니다. 이를 통해 부작용, 임상 기준, 연구 결과, 그리고 서로 다른 연구 논문 간의 비교에 대해 질문할 수 있게 됩니다.

2.🧪 유스케이스 (Use case)

이 튜토리얼에서는 포도당 조절, 인슐린 분비 및 포만감에 관여하는 천연 호르몬인 GLP-1 수용체 작용제 (Glucagon-Like Peptide-1 receptor agonists) 연구와 관련된 일련의 과학 논문들을 다룰 것입니다.

최근 몇 년 동안 이 분자군을 기반으로 한 다양한 치료법들이 등장했으며, 수많은 임상 연구, 학술 논문 및 연구 문서들이 발표되었습니다. 이 문서들은 심혈관 결과, 체중 감량, 부작용, 그리고 임상 시험의 포함 또는 제외 기준과 관련이 있습니다.

이 유스케이스(use case)의 목적은 인터넷 상의 검색 엔진을 구축하거나 실시간으로 공개 정보를 사용하는 것이 아닙니다. 핵심 아이디어는 비공개 및 큐레이션된 과학 문서 세트와 작업하는 것이며, 이는 연구자, 의료 팀 또는 연구 분야에서 보안 환경 내에서 자신들만의 논문만을 쿼리(query)해야 하는 시나리오를 시뮬레이션합니다.

이번 **MVP(Minimum Viable Product, 최소 기능 제품)**를 위해 10개의 공개 논문을 예시 데이터셋으로 사용하지만, 이 아키텍처는 문서가 비공개이거나 내부 연구 프로세스에 속하는 시나리오를 위해 설계되었습니다.
이 문서들을 바탕으로 다음과 같이 자연어를 사용하여 쿼리할 수 있는 지식 베이스(knowledge base)를 구축할 것입니다.

  • 〰️ 서로 다른 연구에서 보고된 부작용 식별,
  • 〰️ 치료법 간의 결과 비교,
  • 〰️ 임상 시험의 제외 기준(exclusion criteria) 검증,
  • 〰️ 심혈관 결과 분석,
  • 〰️ 여러 과학 논문에 걸친 특정 정보 검색.

3. 🏗️ 솔루션 아키텍처 (Solution Architecture)

이론적인 개념을 살펴보기 전에, 우리가 구축할 솔루션을 설명하겠습니다.

이 솔루션은 PDF 형식의 과학 논문을 처리한 후, 이를 Amazon Bedrock Knowledge Base의 입력값으로 사용하여 RAG (Retrieval-Augmented Generation, 검색 증강 생성) 시스템을 구축하는 **서버리스 아키텍처 (serverless architecture)**를 기반으로 합니다.

이 아키텍처는 솔루션을 단순하고 확장 가능하게 유지하면서, **수집 및 처리 흐름 (ingestion and processing flow)**과 **지능형 쿼리 흐름 (intelligent query flow)**을 명확하게 분리합니다.

다음 블루프린트는 전체 파이프라인 내에서 각 구성 요소가 어떻게 연결되는지 보여줍니다.

요약하자면, 이 파이프라인은 컨테이너 이미지 기반의 AWS Lambda 함수 내에서 실행되는 Docling이 포함된 Python Docker 이미지를 사용하여 PDF 파일을 처리합니다.

이 Lambda 함수는 파일을 Markdown 형식의 구조화된 문서로 변환합니다.

그 후, 이 문서들은 Amazon S3에 저장되고 Amazon Bedrock에 의해 인덱싱되며, 이를 통해 embeddings (임베딩)를 생성하고 콘텐츠에 대한 시맨틱 쿼리 (semantic queries)를 수행할 수 있습니다.

4. 📑 Docling: 구조화된 문서 추출 (structured document extraction)

과학적 PDF 파일을 다룰 때 발생하는 주요 과제 중 하나는 이들이 "단순한" 문서가 아니라는 점입니다. 이들은 표 (tables), 단 (columns), 수식 (formulas), 도표 (figures), 그리고 텍스트를 추출할 때 항상 올바르게 보존되지 않는 복잡한 layouts (레이아웃)로 가득 차 있습니다.

IBM DoclingPDF 추출 및 문서 구조화를 위해 설계된 오픈 소스 라이브러리입니다. 이 라이브러리의 목표는 단순히 텍스트를 추출하는 것뿐만 아니라, 복잡한 문서를 인공지능 파이프라인 및 RAG (검색 증강 생성) 시스템에서 사용할 수 있는 **구조화된 표현 (structured representation)**으로 변환하는 것입니다.

Docling은 지저분한 일반 텍스트를 반환하는 대신, 읽기 순서 (reading order), 표 (tables), 수식 (formulas), 이미지 (images) 및 콘텐츠의 기타 핵심 요소들을 포함하여 문서의 구조를 보존하려고 시도합니다.

다음 이미지는 복잡한 문서 처리를 위해 Docling을 사용할 때의 주요 이점 중 일부를 요약합니다.

왜 Docling을 사용해야 하는가?

PyPDF, PDFPlumber 또는 전통적인 OCR (광학 문자 인식)과 같은 기존 도구들은 단순한 문서에는 대개 충분하지만, 복잡한 layouts (레이아웃)를 가진 과학 논문을 다룰 때는 어려움을 겪을 수 있습니다.

이러한 경우 다음과 같은 중요한 정보가 손실될 수 있습니다:

  • 〰️표 구조 (table structure)
  • 〰️ 단 분리 (column separation)
  • 〰️텍스트와 도표 간의 관계 (relationship between text and figures)
  • 〰️수학 공식 (mathematical formulas)

Docling은 바로 이러한 문제들을 해결하려고 시도하며, 이후 분석을 위해 훨씬 더 일관된 출력을 생성하는 대안으로 등장합니다.

Docling 기능

아래에서는 Hugging Face에 게시된 이 라이브러리의 주요 기능들을 확인할 수 있습니다:

  1. 🏷️ 효율적인 토큰화(Tokenization)를 위한 DocTags – DoclingDocuments와 완전히 호환되는, 문서에 대한 효율적이고 최소한의 표현 방식인 DocTags를 도입합니다.
  2. 🔍 OCR (Optical Character Recognition, 광학 문자 인식) – 이미지에서 텍스트를 정확하게 추출합니다.
  3. 📐 레이아웃 및 로컬라이제이션 (Layout and Localization) – 문서 구조와 문서 요소의 경계 상자(Bounding boxes)를 보존합니다.
  4. 💻 코드 인식 (Code Recognition) – 들여쓰기(Indentation)를 포함하여 코드 블록을 감지하고 형식을 지정합니다.
  5. 🔢 수식 인식 (Formula Recognition) – 수학적 표현을 식별하고 처리합니다.
  6. 📊 차트 인식 (Chart Recognition) – 차트 데이터를 추출하고 해석합니다.
  7. 📑 표 인식 (Table Recognition) – 구조화된 표 추출을 위해 열(Column) 및 행(Row) 헤더를 지원합니다.
  8. 🖼️ 그림 분류 (Figure Classification) – 그림(Figures)과 그래픽 요소를 구분합니다.
  9. 📝 캡션 대응 (Caption Correspondence) – 캡션을 관련 이미지 및 그림과 연결합니다.
  10. 📜 목록 그룹화 (List Grouping) – 목록 요소를 올바르게 정리하고 구조화합니다.
  11. 📄 전체 페이지 변환 (Full-Page Conversion) – 모든 페이지 요소(코드, 수식, 표, 차트 등)를 포함하여 포괄적인 문서 변환을 위해 전체 페이지를 처리합니다.
  12. 🔲 경계 상자를 사용한 OCR (OCR with Bounding Boxes) – 경계 상자(Bounding box)를 사용하여 OCR 영역을 지정합니다.
  13. 📂 일반 문서 처리 (General Document Processing) – 과학적 문서와 비과학적 문서 모두를 위해 학습되었습니다.

🏥 실무 예제: Docling을 이용한 의료 기록 처리

이 예제에서는 PDF 형식의 **합성 생성된 임상 기록 (Synthetically generated clinical record)**을 사용하여 Docling이 의료 문서에서 어떻게 정보를 추출하고 구조화할 수 있는지 보여줍니다.

모든 환자 데이터, 의료 기록 및 임상 소견은 완전히 허구이며 오직 교육 목적으로만 생성되었습니다. 실제 환자 정보는 사용되지 않았습니다.

이 예제는 의료 문서가 처리 및 구조화되어 AI 분석을 위해 준비되어야 하는 의료 산업의 일반적인 사용 사례를 나타냅니다.

다음 단계에서 우리는 Docling을 사용하여 다음을 수행할 것입니다:

  • 〰️ PDF 로드 및 변환
  • 〰️ 문서 구조 탐색 및 섹션 식별
  • 〰️ 구조화된 환자 데이터를 pandas DataFrame으로 추출

📌다음 이미지는 이 예제에서 처리할 임상 기록(clinical record)의 일부를 보여줍니다.

📑 PDF 로드 및 변환

이 단계에서는 Docling의 DocumentConverter를 사용하여 임상 기록 PDF를 로드합니다.

Docling은 문서 구조를 자동으로 감지하고 결과를 두 가지 형식으로 내보냅니다:

  • 〰️ Markdown (마크다운): 콘텐츠를 미리 볼 수 있는 사람이 읽기 쉬운 출력 형식
  • 〰️ Dictionary (딕셔너리): 텍스트, 표, 이미지 및 메타데이터에 대한 프로그래밍 방식의 접근

이러한 구조화된 출력은 Docling을 기본적인 PDF 텍스트 추출기보다 더 강력하게 만드는 요소입니다.

from docling.document_converter import DocumentConverter, PdfFormatOption
import pandas as pd
converter = DocumentConverter()
...

🗂️ 문서 섹션 탐색

모든 임상 기록은 섹션별로 구성되어 있습니다. 여기에서는 Patient Identification (환자 식별), Chief Complaint (주소/주증상), Laboratory Results (검사 결과)와 같이 Docling이 감지한 모든 **섹션 헤더 (section headers)**를 추출합니다.

이를 통해 다음을 얻을 수 있습니다:

  • 〰️ 문서 구조의 맵 (map of the document structure)
  • 〰️ 후속 처리를 위해 특정 섹션을 타겟팅할 수 있는 능력
[item['text'] for item in data_dict['texts']  if item['label'] == 'section_header']
['CITYVIEW MEDICAL CENTER CLINICAL HISTORY AND RECORD',
 '1. PATIENT IDENTIFICATION',
 '4. PAST MEDICAL HISTORY',
...

🧩 구조화된 표로 환자 데이터 추출

이제 #/groups/0에 속하는 항목들을 필터링하여 첫 번째 섹션인 **Patient Identification (환자 식별)**의 콘텐츠를 추출합니다.

Docling은 원본 PDFkey value (키-값) 레이아웃을 보존하므로, Python의 슬라이스 표기법(slice notation)을 사용하여 평면 리스트(flat list)를 필드 이름과 값으로 분리할 수 있습니다.

그 결과, 다음과 같은 작업에 즉시 사용할 수 있는 깔끔한 pandas DataFrame이 생성됩니다:

  • 〰️ 분석
  • 〰️ 저장
  • 〰️ 후속 AI 처리

그룹 0 필터링

그룹 0은 texts 리스트를 순회하며, 각 item의 부모 참조($ref)가 '#/groups/0'인 경우에만 해당 항목의 원본 값('orig')을 추출하여 구성됩니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0