문제
브라우저에서 검색결과 100개를 열고, 각 상세페이지를 읽고, 결과를 엑셀이나 PDF로 정리하는 일은 겉보기에는 단순합니다.
버튼 하나를 만들고 누르면 될 것처럼 보입니다.
하지만 크롬 확장 프로그램에서 이 작업을 팝업 안에 넣으면 바로 문제가 생깁니다.
팝업은 사용자가 다른 탭으로 이동하거나 바깥을 클릭하면 닫힙니다. 팝업이 닫히면 그 안에서 돌던 긴 작업도 끊길 수 있습니다.
즉, 팝업은 긴 작업의 실행 공간이 아닙니다.
실패한 구조
처음 떠올리기 쉬운 구조는 이렇습니다.
- 사용자가 검색결과 페이지를 연다.
- 확장 팝업을 연다.
전부 처리버튼을 누른다.- 팝업 안의 JavaScript가 100개 링크를 순서대로 fetch한다.
- 다 끝나면 엑셀이나 PDF를 만든다.
이 구조는 작게 테스트할 때는 돌아갑니다.
하지만 실제 사용에서는 취약합니다.
- 사용자가 다른 탭으로 이동하면 팝업이 닫힌다.
- 팝업이 닫히면 진행 상태를 보기 어렵다.
- 네트워크가 느리면 사용자는 멈춘 것으로 느낀다.
- 100개 요청 중간에 실패하면 어디까지 됐는지 알기 어렵다.
- 다운로드나 PDF 저장 같은 브라우저 권한이 팝업 수명에 묶인다.
가장 큰 문제는 사용자가 기다리는 동안 아무것도 하면 안 되는 구조가 된다는 점입니다.
자동화가 사용자를 자유롭게 해야 하는데, 오히려 사용자를 붙잡아 둡니다.
기준
브라우저에서 100개 페이지를 자동 처리하려면 팝업 버튼 장난이 아니라 백그라운드 작업 + 파일 저장 구조로 처음부터 만들어야 합니다.
팝업은 작업자가 아니라 조작 패널입니다.
- 팝업은 시작 버튼을 제공한다.
- 백그라운드 서비스워커가 긴 작업을 맡는다.
- 진행 상태는
chrome.storage에 저장한다. - 팝업은 저장된 상태를 읽어서 보여주기만 한다.
- 결과는 다운로드 가능한 파일로 저장한다.
이렇게 해야 팝업이 닫혀도 작업이 이어지고, 사용자가 다른 탭으로 이동해도 흐름이 끊기지 않습니다.
올바른 구조
구조는 다음처럼 나눕니다.
- 검색결과 페이지에서 공고 링크 목록을 추출한다.
- 링크 목록과 필터 조건을 백그라운드로 넘긴다.
- 백그라운드 작업이 상세페이지를 순서대로 읽는다.
- 각 상세페이지에서 제목, 회사, 경력, 급여, 근무시간, 주소, 주요업무, 자격요건, 우대사항을 파싱한다.
- 진행 상태를 계속 저장한다.
- 완료되면 HTML, CSV, XLS 같은 파일을 다운로드 폴더에 저장한다.
- 사용자는 저장된 파일을 열어 검토하거나 PDF로 변환한다.
여기서 중요한 점은 “PDF 저장”까지 완전 자동화하려고 무리하지 않는 것입니다.
브라우저는 보안상 확장이 조용히 인쇄창을 열고 PDF 파일을 마음대로 저장하는 동작을 제한합니다.
따라서 현실적인 결과물은 PDF용 HTML 리포트입니다.
HTML 리포트는 자동 저장하고, 사용자는 그 파일을 열어 Ctrl+P로 PDF 저장합니다.
이 단계 하나를 남겨두는 편이 브라우저 정책과 충돌하지 않고 안정적입니다.
데이터 수집의 함정
목록 페이지의 정보만 믿으면 결과가 지저분해집니다.
검색결과 목록에는 보통 제목, 회사명, 간단한 조건만 있습니다.
급여, 근무시간, 상세주소, 자격요건, 우대사항은 상세페이지에만 있는 경우가 많습니다.
또한 사람인 같은 사이트는 페이지 곳곳에 공통 UI 문구가 있습니다.
- 이전공고
- 다음공고
- 스크랩
- Ai매치
- 커뮤니티
- 로그인
- 추천 공고
이런 텍스트까지 같이 파싱하면 엉뚱한 결과가 나옵니다.
예를 들어 급여 칸에 공통 UI 문구가 들어가거나, 모든 공고에 같은 기술스택이 붙는 식입니다.
따라서 파싱은 두 단계를 거쳐야 합니다.
- 먼저 공고 본문 영역을 최대한 좁힌다.
- 그다음 공통 UI 문구를 제거한다.
자동화에서 중요한 것은 많이 긁는 것이 아니라, 쓸 수 있는 형태로 남기는 것입니다.
필터 기준
검색어가 AI라고 해서 모든 결과가 AI 직무는 아닙니다.
AI 활용 영상 편집, AI 교육 강사, 마케팅, 세일즈, 생산직, 품질관리, 부동산 공고도 함께 섞일 수 있습니다.
그래서 필터는 한 번에 삭제하는 방식보다 표시하는 방식이 낫습니다.
- 전체 공고는 보존한다.
- 조건에 맞는 공고는
필터통과=Y로 표시한다. - 애매한 공고는 사람이 나중에 볼 수 있게 남긴다.
필터는 너무 약하면 잡음이 많고, 너무 강하면 0건이 됩니다.
처음에는 전체를 저장하고, 엑셀이나 리포트에서 통과 여부를 같이 보는 편이 안전합니다.
사용자가 알아야 할 것
사용자가 알아야 할 교훈은 간단합니다.
브라우저에서 100개 페이지를 자동 처리하려면, 팝업 안에서 오래 도는 스크립트를 만들면 안 됩니다.
처음부터 다음 조건을 요구해야 합니다.
- 팝업을 닫아도 계속 돌아갈 것
- 다른 탭으로 이동해도 중단되지 않을 것
- 진행률이 저장될 것
- 실패해도 어디까지 처리했는지 남을 것
- 결과 파일이 다운로드 폴더에 저장될 것
- PDF가 필요하면 먼저 인쇄용 HTML 리포트를 만들 것
이 조건이 없으면 자동화가 아니라 긴 대기 버튼이 됩니다.
결론
좋은 자동화는 버튼을 많이 만드는 것이 아닙니다.
사용자가 기다리는 시간을 줄이고, 중간에 실수해도 작업이 날아가지 않게 만들고, 결과를 검토 가능한 파일로 남기는 것입니다.
브라우저 확장에서 긴 작업의 기본 구조는 다음 한 줄로 정리할 수 있습니다.
팝업은 시작과 상태 표시만, 긴 작업은 백그라운드에서, 결과는 파일로 저장한다.
이 기준을 처음부터 잡으면 100개 페이지 자동 처리도 도구가 됩니다.
이 기준 없이 만들면 사용자가 탭 하나 이동하는 순간 중단되는 불안정한 버튼이 됩니다.