Rocky 's Blog

OCR과 Open AI의 응답 속도 개선

  • 멋쟁이사자처럼
  • OCR
  • 응답 속도 개선
2025. 08. 30.
게시글 썸네일

문제 상황


어떤 점이 가장 큰 고민거리였는가?

우리 프로젝트에서는 사용자가 계약서 이미지를 업로드하면 OCR 기술을 통해 문자를 추출한 후, 이를 OpenAI에게 전달해 번역을 수행하도록 했다. 하지만 데이터 양이 많아지면서 응답 시간이 크게 지연되는 문제가 발생했다.

프론트엔드에서 OCR과 OpenAI 처리를 모두 담당하다 보니 네트워크 응답 속도가 매우 중요했는데, 실제 측정 결과 OpenAI 처리 속도가 현저히 느린 것이 문제였다.

얼마나 느렸기에 문제로 판단했는가?

OCR 처리 속도는 평균 약 6초로, 생각보다 괜찮았다. 하지만 OpenAI의 응답 속도는 번역 요청 시 평균 44.15초, 하이라이팅 작업은 46.71초가 소요되어 매우 오래 걸렸다.

  • Open AI 번역본 요청 / 응답 시간
  • Open AI 하이라이팅 요청 / 응답 시간
  • Open AI 전체 요약 요청 / 응답 시간
  • 이게 왜 문제라고 판단했는가?

    서비스 사용자 입장에서 40초가 넘는 응답 시간은 매우 부적절하다. 특히 ‘계약서 분석 결과’라는 하나의 페이지에서 세 가지 요청이 모두 처리되기 때문에 전체 로딩 시간이 약 2분에 달한다. 이는 사용자 경험 측면에서 전혀 용납될 수 없는 수준이다.

    첫번째 시도


    어떤 부분에서 문제점을 파악했어?

    ‘계약서 분석 결과’ 페이지에서 번역, 하이라이팅, 요약까지 세 가지 요청을 한 번에 보내고 있었다. 이러한 설계는 응답 시간에 대한 고려를 배제하였다. 사용자가 부드러운 스크롤로 대기시간 없이 정보를 볼 수 있도록 하려는 목적에서 비롯되었다.

    그렇다면 어떻게 개선하고자 했어?

    페이지 로드 시 모든 요청을 동시에 보내는 대신, 화면에 보이는 구역에 해당하는 요청만 보내는 방식으로 처리 방식을 변경했다. 페이지가 스크롤을 기준으로 세 구역(번역, 하이라이팅, 요약)으로 나누어져 있었기 때문에 가능한 접근이었다. 예를 들어 사용자가 ‘번역’ 구역을 보고 있을 때는 하이라이팅이나 요약 요청을 보내지 않았다.

    Notion image
    이를 통해서 얼마나 개선되었지?

    기존에 총 2분가량 걸리던 요청 시간이 세 구역 별 요청 시간으로 분산되면서, 사용자 입장에서는 해당 구역의 결과만 기다리면 되어 대기 시간이 크게 줄었다. 이를 통해 전체 응답 시간을 약 58초까지 단축할 수 있었다.

    두번째 시도


    어떤 부분에서 문제점을 파악했어?

    계약서가 총 3페이지로 구성되어 있는데, 현재는 세 페이지의 모든 데이터를 한꺼번에 전송하고 있었다. 이 부분에서 데이터 처리와 응답 속도의 병목이 발생하는 문제를 발견했다.

    Notion image
    그렇다면 어떻게 개선하고자 했어?

    한번에 많은 데이터를 처리하고 응답받는 대신, 각 페이지별로 데이터를 나누어 요청을 보내고 이를 병렬로 비동기 처리하는 방식을 적용했다. 이렇게 하면 각 페이지의 요청이 동시에 처리되어 전체 응답 속도가 개선될 수 있다고 판단했다.

    이를 통해서 얼마나 개선되었지?

    이 방법을 적용한 결과, 가장 오래 걸리던 페이지의 응답 시간이 24초로 단축되었으며, OCR 처리 시간을 포함하면 총 28초까지 개선되었다. 이는 사용자 체감 대기시간을 크게 줄일 수 있었다.

  • Open AI 번역본 요청 / 응답 시간
  • 마지막 시도


    어떤 부분에서 문제점을 파악했어?

    여전히 30초에 가까운 로딩 시간은 서비스로서 사용자 경험에 치명적인 수준이었다. 더 개선할 수 있는 부분이 없을지 생각해봤다. 현재 계약서 세 페이지의 응답이 도착해야지만 렌더링을 하고 있었다.

    그렇다면 어떻게 개선하고자 했어?

    첫 번째 페이지의 응답이 도착하는 즉시 화면에 바로 렌더링하도록 구현하고, 사용자가 첫 페이지를 보는 동안 나머지 페이지들은 백그라운드에서 비동기적으로 처리되도록 변경했다. 이렇게 하면 사용자는 첫 페이지를 빠르게 확인할 수 있고, 두 번째 페이지부터 나중에 로딩되더라도 불편함을 느끼지 않는다.

    Notion image
    이를 통해서 얼마나 개선되었지?

    이를 통해 사용자가 첫 화면을 보기까지 걸리는 시간을 18초까지 줄였다. 이는 사용자 경험 측면에서 매우 큰 향상이며, 가능한 최선의 조치라고 판단했다.

    최종적인 흐름은 다음과 같다.

    Notion image

    더 나아가서, 개선할 수 있는 부분


    더 개선시킬 수 있는 부분이 있다면?

    계약서의 형식을 미리 고정된 템플릿으로 설정하면 응답 속도를 크게 개선할 수 있었을 것이다. 고정된 문장은 이미 번역된 내용을 미리 저장해두고, 사용자가 입력하거나 변경한 부분만 OpenAI에게 요청하여 처리할 수 있기 때문이다.

    이 방법을 사용하면 전달하고 처리해야 하는 데이터 양이 크게 줄어들어, 전체 응답 시간도 절반 이상 단축될 가능성이 크다. 개인적인 판단으로는 OCR과 OpenAI 처리까지 포함해 약 10초 내외로 속도를 끌어올릴 수 있을 것으로 보인다.

    깨달은 점


    개선하는 과정에서 가장 먼저 들었던 생각은 뭐야?

    개발자는 단순히 화면을 띄우는 역할에 그치지 않고, 사용자와 데이터를 주고받으며 경험을 책임지는 존재임을 항상 인식해야 한다. 단순한 기능 구현에만 집중할 것이 아니라, 전체적인 흐름과 아키텍처 설계를 기반으로 한 체계적인 구현이 중요하다는 점을 깨달았다.

    앞으로의 방향성

    사전에 신경 써야 할 부분을 꼼꼼히 점검한 후 개발에 착수할 계획이다. 빠른 개발을 위해 무작정 코딩만 하는 태도를 지양하고, 네트워크 처리 속도와 같은 핵심 요소를 항상 염두에 둘 것이다. 이를 바탕으로 지속적으로 개선할 점을 찾아 더 나은 사용자 경험을 제공하기 위해 노력할 것이다.