[Stock101] 반기 / 분기 공시 요약 및 전망 AI 기능 마무리- 8일차

2026. 1. 28. 21:46·Archive(완료된 내용)/포트폴리오 강화

 

1. 리소스 관리: 비용과 시간을 방어하는 SHA 중복 체크

대용량 파일(300p+) 분석은 CPU 자원과 AI 토큰 비용을 대량으로 소모합니다. 엔지니어링의 첫 번째 원칙은 **'하지 않아도 될 일을 하지 않는 것'**입니다.

  • 문제 상황: 유저가 동일한 파일을 실수나 확인 차 재업로드할 때마다 분석 엔진(3분 이상 소요)이 중복 가동됨.
  • 해결 로직: File Fingerprinting (SHA-256)
    • 파일 업로드 즉시 고유한 해시값(SHA)을 추출하여 DB와 대조.
    • Hit: 기존 분석 결과를 즉시 반환 (대기 시간 0.1초).
    • Miss: 신규 분석 프로세스 진행.
  • 인사이트: 인프라가 제한적인 홈서버 환경에서 가장 강력한 방어 로직은 '캐싱'과 '중복 제거'입니다.

2. 사용자 경험: Blocking을 피하는 비동기(Async) 설계

사용자는 10초만 응답이 없어도 서비스가 죽었다고 판단합니다. 3분의 분석 시간을 견디게 하는 것은 기술이 아니라 설계의 묘입니다.

  • 문제 상황: 파일 업로드 후 분석 완료까지 HTTP 커넥션을 유지할 경우 타임아웃 발생 및 유저 이탈.
  • 해결 로직: Non-blocking 통신 아키텍처
    1. Java 백엔드가 파일을 수신하고 즉시 접수 ID 발행 후 응답.
    2. @Async를 통해 백그라운드 스레드에서 Python FastAPI 서버와 통신 시작.
    3. 분석 완료 시 DB 상태값을 업데이트하거나 알림 전달.
  • 인사이트: 무거운 작업은 유저의 시야 밖에서 처리하고, 유저에게는 즉각적인 피드백을 주는 것이 현대 UX의 기본입니다.

3. 기술 스택의 결단: Java의 안정성 vs Python의 분석력

도구에 매몰되지 않고 문제 해결에 가장 적합한 대안을 찾는 과정이 돋보이는 구간입니다.

  • 시행착오: 처음엔 Java(PDFBox, Tabula)로 섹션 기반 추출을 시도했으나, 공시 정보 특유의 복합 표(Complex Table) 구조에서 데이터가 완전히 깨짐.
  • 의사결정: 라이브러리 내부 소스를 수정하며 시간을 버리는 대신, 분석 엔진을 Python FastAPI 기반의 마이크로서비스로 분리.
  • 결과: PDF 파싱 생태계가 압도적인 파이썬 도입을 통해 **'분석 퀄리티'**라는 본질적인 목표 달성.

4. 성능 최적화: 10분에서 3분으로, '데이터 다이어트'

홈서버라는 물리적 한계를 소프트웨어적 전략으로 돌파한 과정입니다.

  • 문제 상황: 300페이지 분석 시 Docling 엔진이 10분 이상 소요됨.
  • 최적화 전략:
    1. OCR 비활성화: 텍스트 레이어가 있는 디지털 PDF이므로 픽셀 분석 과정을 과감히 생략.
    2. Selective Parsing: 유저가 원하는 '요약'과 '전망' 섹션이 포함된 페이지만 타겟팅하여 물리적 처리량(Workload)을 1/10로 감소.
  • 결과: 정확도는 유지하면서 처리 시간을 3분 내외로 약 70% 단축.

5. 데이터 엔지니어링: AI의 이해도를 높이는 메타데이터 주입

단순히 글자를 뽑는 것을 넘어, AI가 문맥을 이해할 수 있는 구조를 만드는 과정입니다.

  • 전략: 전체 데이터를 단순히 던지지 않고 [부모주제 / 자식주제 / 타이틀] 형식을 메타데이터에 포함.
  • 효과: RAG(Retrieval-Augmented Generation) 환경에서 AI가 특정 데이터의 위치와 위계를 명확히 파악하여 답변의 질(Hallucination 방지)이 향상됨.

 


고민점 및 문제 기록 list

 

1. 중복해서 파일을 올리면 어떻게 해결할것인가.

-> sha로 중복을 걸러낸다.  -> 그리고 그 정보로 이미 있는 결과를 뱉어준다.

 

2. upload하고 유저는 응답을 기다릴 수 없다. -> 비동기 처리한다.

 

3. 데이터 정제를 어떻게하면 질 좋게 할 수 있는지 고민했다. 

  1. 전체 데이터에서 섹션을 분리하는건 유효하다고 생각했다.
  2. 부모주제 / 자식주제 / 타이틀을 메타데이터에 넣어 데이터의 질을 높이고자했다. 

 

3. PDF추출 관련해서 맨처음에는 text와 표를 pdfbox, Tabula를 썻다. 하지만 수치 정보가 중요한 공시정보 표 추출에는 한계가 명확했다.

  1. 복잡한 표를 추출하지 못했다. 전략적으로 접근이 필요해 사용하기 어렵다. 
  2. 그럼에도 불구하고  위 2가지를 써보려했다. 처음 시도는 섹션 기반 추출이였다. 
  3. 그러나 섹션이 또 길어지는 경우는 문제가 생기며 표가 잘 들어가지도 않았다. 
  4. 문제 원인을 파악했을때 내부 라이브러리를 확인해야했는데 내부로직을 확인하는것보다 더 좋은 도구인 fastAPI를 넣는게 시간 효율이 좋아서 위의 2개를 버리기로했다.
  5. 버리고 파이썬으로 fastAPI를 통해 결과를 받았다. 외부 라이브러리는 파이썬이 압도적으로 성능이 좋은것같다. 여기서 성능은 분석 퀄리티를 말한다. 

 

 

 

4.  파이썬 docling은 반기/분기 공시는 300페이지가 넘어서 PDF를 분석하는데 10분이상 걸렸다.

  1. 그래서 이를 빠르게 하기위해 옵션을 좀 만지고 page 자체를 줄였다. 내가 원하는건 요약과 전망정도였으니 그와 관련된 섹션만 가져와서 읽으면되고 또 ocr문서는 취급하지 않을것이기 때문에 ocr기능도 껏다.
  2. 이러면 약 3분정도 걸렸다. 컴퓨터 성능이 빵빵하면 서버를 늘려 배치처리하며 빠르게 추출할텐데 홈서버라 우선 보수적으로 접근했다.

 

다음에 기억할것

  1. AI에게서 어떤 일을 시킬지 또 AI에게 무엇을 데이터로 줄지 정제하는 과정이 필요하다. 전부 다 해주는 AI는 아직 없다.
  2. 300페이지를 ai로 분석하는건 엄청 비용이 비싸다 컴퓨터가 좋다면 빠르게 훅훅하겠지만 앞으로 아무거나 막 넣지말고 내가 하고자 하는 기능에 AI혹은 코드로 1차 필터링을 해야한다. 성능 좋은 컴터있어도 쓸데 없는걸 넣을 이유는 없으니까!

 

 

저작자표시 비영리 변경금지 (새창열림)

'Archive(완료된 내용) > 포트폴리오 강화' 카테고리의 다른 글

[Stock101] 프론트를 재정비하자.- 8일차  (1) 2026.01.29
[stock101] 프론트앤드 구조를 잘 만들어야 관리가 쉽다.  (0) 2026.01.29
[Stock101]PDF 내용 요약 구현 - 7일차  (1) 2026.01.27
[Stock101] RAG PDF내용 요약과 전망을 도출하자 - 6일차  (0) 2026.01.26
[Stock101] PDF 데이터 추출이 1회 만에 멈췄던 이유 - 5일차  (0) 2026.01.26
'Archive(완료된 내용)/포트폴리오 강화' 카테고리의 다른 글
  • [Stock101] 프론트를 재정비하자.- 8일차
  • [stock101] 프론트앤드 구조를 잘 만들어야 관리가 쉽다.
  • [Stock101]PDF 내용 요약 구현 - 7일차
  • [Stock101] RAG PDF내용 요약과 전망을 도출하자 - 6일차
오늘은치킨이닭
오늘은치킨이닭
개발로 세상을 밝히자.(억지 맞음)
  • 오늘은치킨이닭
    개발세밝
    오늘은치킨이닭
  • 전체
    오늘
    어제
    • 분류 전체보기 (80)
      • Project(마감 기한이 정해진 목표) (2)
        • Docker(도커) (1)
        • Django(장고) (0)
        • 부트캠프 (1)
      • Archive(완료된 내용) (59)
        • 재취업준비 (8)
        • 포트폴리오 강화 (24)
        • 부트캠프 (3)
        • 팁 (2)
        • 데이터베이스 (2)
        • SQL (12)
        • 백엔드 (5)
        • 프론트엔드 (1)
        • 유니티(Unity) (2)
      • Area(일생동안 지속 유지하는 활동,마감X) (16)
        • 게임 (2)
        • 코딩테스트 (12)
        • 운영체제 (0)
        • DB (2)
      • Resource(지속적 관심을 갖는 주제분야) (1)
        • 애니메이션 (0)
        • 내가 선정한 맛집 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    칼국수맛집
    DB #데이터베이스
    인포그래픽 #자기소개서 #자기소개 #명함삭제
    롤 #룬 #자동적용 #블리츠 #다운로드 #도움 #TIP #브론즈 #아이언 #브실골 #아브실
    명동교자
    고클린 #cpu온도보는법 #cpu온도
    유니티 #설치 #방법 #다운
    맛집
    명동맛집
    명동
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
오늘은치킨이닭
[Stock101] 반기 / 분기 공시 요약 및 전망 AI 기능 마무리- 8일차
상단으로

티스토리툴바