brunch

You can make anything
by writing

C.S.Lewis

by jd Jul 19. 2020

PDF 검색엔진(1/2)

글파도(글밥 먹는 노동자의 파이썬 도전기)

나는 사보 기자다. 원래 무늬만 IT 전공생이었으나 업을 고를 때마다 하고 싶은 일은 가까이 하고, 하기 싫은 일은 멀리 하다 보니 지금 여기 있다. 2020년 연초부터 느닷없이 코딩이 하고 싶었고, 스파르타코딩이라는 좋은 연을 만나 한 달에 1~2개 씩 직접 프로그램을 만들어보겠다고 마음 먹었다. 할 일을 정하고 도전하는 리듬을 익히기 위해 '파도'라는 이름으로 그 과정을 기록해본다. 파도는 '파이썬 도전기'를 줄인 말이자, 일상 속 성장과 혁신의 움직임을 뜻한다.



4주간의 파이썬 교육을 마칠 즈음, '배운 것을 어떻게든 써먹겠다'는 고집이 생겼다. 그러자 관성적으로 하던 업무가 조금씩 달리 보였다. 보통 파이썬이 '업무 효율' '자동화'라는 키워드와 함께 엮이는데 내 주변에서 비벼볼 대목이 없을지 찾기 시작한 것.


곧 과월호에 실렸던 사람이나 단어를 찾을 때 한 권 한 권 일일이 펼쳐보던 내 모습이 떠올랐다. 만약 100페이지 짜리 PDF 파일 150여 개에 달하는 분량의 텍스트를 한 곳에 모아놓고, 검색 단어를 입력해 필요한 지점을 곧바로 찾을 수 있다면? 쉽게 말해 검색엔진을 만드는 것이다. 많게는 3시간 이상 업무 시간을 단축할 수 있을 것이었다. 마침 내가 진행하는 매체는 주로 인쇄 매체인 탓에 사내에 별도의 데이터 베이스나 텍스트 검색 기능이 구축돼 있지 않았다.


평소 생각보다 행동이 앞서야 한다는 주의다. 빠른 실행과 잦은 실패가 결국 빠른 성공으로 이어지는 경험을 나름 많이 해봤다. 그럼에도 코딩을 짜는 과정은 전반적으로 좌절의 연속이었다. 그중 특히 큰 좌절을 안겨준 2가지 난관을 소개한다.


1. PDF 용량이 너무 크다.


우선 가장 먼저 1개 호 PDF별로 텍스트를 추출해야 했다. 10년 전 c언어를 배울 때나 지금이나 드는 변치않는 의문 하나. 컴퓨터 프로그래밍은 언제쯤 한글이랑 친해질 수 있을까? 한글을 인식하는 라이브러리를 찾는 데 꽤 애를 먹었다. pdfminer, pdftotext 등 많은 라이브러리를 써봤지만 추출하는 시간이 너무 오래 걸리거나 한글 추출이 제대로 되지 않았다. 그나마 tika라는 텍스트 추출 라이브러리는 속도가 빨랐으나 pdf 용량이 워낙 커서 pdf 파일 1개의 텍스트를 추출하는 데 20초 정도가 걸렸다.


2. 한글 추출에만 이토록 오래 걸리는데, 검색은 또 어느 세월에 하지?


엄두가 나지 않았다. 이 많은 텍스트를 어떻게 데이터베이스에 저장하고 빠르게 스캔하는 프로그램을 구축할 수 있을지. 막히면 무조건 검색이다. 검색엔진에 '검색엔진 만드는 법'을 검색하니 기분이 묘했다. 그리고 마침내 Elasticsearch와 fscrawler에서 해답을 찾았다. 두 방식은 1번 문제점마저 완벽히 해결했다. 텍스트 추출과 검색을 한 번에, 신속하게 할 수 있는 것이다. (완성 페이지는 다음 편에서 공개하겠다.)


난관이라고 했지만 반대로 말하면 이 두 과제를 해결했을 때 프로그램은 눈에 띄게 완성에 가까워졌다. 그런 면에서 난관은 동시에 이정표이기도 했다. 하나하나 해결할수록 점점 원하는 그림이 그려지니 말이다. 여기서 포인트는 '원하는 그림'이다. 대학 시절 내가 좀처럼 코딩에 흥미를 붙이지 못했던 이유를 이제야 알았다. 내가 만들고 싶은 프로그램이 하나도 없었기 때문이다. 과제니까, 마땅이 해야할 것 같아서 꾸역꾸역 배웠다.


그러나 이제는 아니다. 나는 지금 내가 만든 이 프로그램이 진정으로 필요했고, 나아가 팀에게 도움이 될 거란 사실을 알았다. 그러다 보니 문제 해결 과정도 마냥 고되지만은 않았다. 오히려 즐거울 때가 있었다. 지금처럼 스스로 원하는 그림을 그려갈 수 있다면 끊임없이 코드를 짤 수 있을 것 같다. 내적 동기가 중요하다. 오늘부터 매달 원하는 프로그램을 1개 혹은 2개씩 만들고자 한다. 그 과정을 나의 심리와 엮어 적고, 필요한 이가 있다면 코드와 실행 방법도 공유하겠다.


작가의 이전글 당신의 당연한 출근길을 위하여
작품 선택
키워드 선택 0 / 3 0
댓글여부
afliean
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari