이 프로그램은 기존의 안전신문고 크롤러를 기반으로 GUI를 제거하고 사용자에게 좀 더 친숙한 웹 기반 UI로 리뉴얼한 프로그램입니다.

안전신문고에서 나의 신고 내역을 크롤링하여 처리 상태(수용, 일부수용, 불수용, 기타 등)으로 분류한 뒤 신고 내용과 답변 내용을 파싱하여 과태료/경고 등의 처분내역까지 정리하여 DB화하는 프로그램입니다.

기존 프로그램 사용자들로부터 스프레드 시트 연결과정이 복잡하다는 평가에 따라 웹에서도 표와 통계 기반의 데이터를 볼 수 있도록 기능 개선 및 부가 기능 등을 추가했습니다.

윈도우, 리눅스(데비안 계열) 버전 파일을 배포하고 있으며, 도커로도 사용 가능합니다.

안전신문고 크롤러 프로그램의 윈도우 버전 실행 커맨드 창
실행 예시

설치

다운로드는 [깃허브]에서 가능합니다.

라즈베리파이에 설치하는 법을 작성한 글은 링크를 참조해주세요.

윈도우

OS가 윈도우일 경우 mysafereport-win.zip을 다운 후 압축을 풀고 mysafetyreport.exe를 바로 실행하면 됩니다.

자체 웹서버를 실행하기 때문에 아래처럼 보안 경고가 나올 수 있는데, 허용 해주시면 됩니다.

윈도우 방화벽에서 프로그램 웹서버 통신을 위해 네트워크 액세스를 허용하는 창
윈도우 환경에서 프로그램을 실행하여 웹서버가 구동 중인 명령 프롬프트 창
윈도우 실행 예시

리눅스

리눅스일 경우 mysafetyreport-linux.zip를 다운받아 압축해제 후 아래 명령어로 실행하면 됩니다.

chmod +x ./run.sh
./run.sh

실행할 경우 웹서버 실행 후 아래처럼 알아서 브라우저를 띄워 접속해 줍니다.

프로그램 종료 시엔 터미널 창을 닫으면 알아서 종료됩니다.

리눅스 데비안 환경에서 명령어를 통해 프로그램을 실행한 터미널 창
Debian에서의 실행 예시

도커

가장 추천하는 설치방법입니다. 집에 놀고 있는 시놀로지 등 NAS가 있거나 N100등의 저전력 컴퓨터를 놀리고 있을 경우 적합합니다.

services:
  mysafetyreport:
    container_name: safetyreport
    image: ghcr.io/fentanest/safetyreport:latest
    ports:
      - 6819:6819
    environment:
      - TZ=Asia/Seoul
    volumes:
      - ./data:/app/data
    restart: unless-stopped

  selenium-hub:
    image: selenium/hub:latest
    container_name: selenium-hub
    ports:
      - 4442:4442
      - 4443:4443
      - 4444:4444
    restart: always

  chrome:
    container_name: chrome
    image: selenium/node-chrome:latest
    platform: linux/amd64
    shm_size: 2gb
    depends_on:
      - selenium-hub
    environment:
      - SE_EVENT_BUS_HOST=selenium-hub
      - SE_JAVA_OPTS=-Xmx512m
      - SE_BROWSER_ARGS_INCOGNITO=--incognito
      - SE_BROWSER_ARGS_DISABLE_DSHM=--disable-dev-shm-usage
      - SE_VNC_NO_PASSWORD=1
    restart: always

  watchtower:
    image: nickfedor/watchtower
    container_name: watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      TZ: Asia/Seoul
      WATCHTOWER_CLEANUP: 'true'
      WATCHTOWER_POLL_INTERVAL: 43200
    restart: unless-stopped

도커일 경우 자체 브라우저가 없으므로, IP:6819로 직접 접속하시면 됩니다.

최초 설정

자동 업데이트 확인

실행 시 아래처럼 업데이트가 있을 경우 y를 입력해 자동 업데이트를 진행할 수 있습니다.

프로그램 실행 시 최신 버전 업데이트를 확인하고 y를 입력해 진행하는 터미널
실행 전 업데이트 확인

관리자 계정 생성

최초 실행 시 아래처럼 관리용 계정을 생성하도록 묻습니다. 이 계정은 안전신문고 관리자 계정과는 무관하므로 편하신 ID/PW를 이용해서 생성하면 됩니다.

최초 실행 시 웹 UI 접속을 위한 관리자 ID와 비밀번호를 설정하는 터미널

계정을 생성한 후엔 바로 로그인 창으로 넘어갑니다.

관리자 계정 생성 후 나타나는 나만의 안전신문고 웹 UI 로그인 화면

실행 후 아직 아무런 데이터도 없어 전부 ‘0’이 표기된 초기 화면이 표시됩니다. 정상입니다.

로그인 후 데이터가 비어 있는 나만의 안전신문고 초기 대시보드 화면

추후 관리용 계정을 변경하려고 할 땐, 설정 - 관리자 계정 변경 페이지를 이용해서 변경하시면 됩니다.

환경 설정 메뉴에서 나만의 안전신문고 관리자 계정을 변경하는 설정 화면
홈서버 관리와 셀프호스팅 도커 환경에서 계정 변경 방법을 설명하는 이미지입니다.

복잡한 설정 없이 우선 사용해 보고 싶다면 설정 페이지 에서 안전신문고 계정 입력, ‘로컬 데스크톱 크롬’을 선택 후 저장을 클릭하고

크롤링 제어 메뉴에서 크롤링 시작 버튼을 클릭해 작업을 시작하는 화면

크롤링 제어 페이지 에 가서 ‘크롤링 시작’ 버튼을 클릭하면 알아서 시작됩니다.

절.대. 자동작동중인 크롬 창의 사이즈를 변경하거나 클릭하거나 키보드 입력을 넣는 등 방해하지 마세요

설정 메뉴에 진입하여 시스템 및 서버 설정 항목을 보여주는 화면

기능 설명

프로그램 기본 설정

설정 페이지에 진입하면 아래와 같이 1. 시스템 및 서버 설정 항목을 볼 수 있습니다.

설정 메뉴의 시스템 및 서버 설정 항목에서 안전신문고 계정을 입력하는 칸
시스템 로그인 및 서버 설정 관련 이미지입니다.

이 프로그램은 기본적으로 안전신문고에 로그인해 나의 신고내역을 크롤링 및 파싱하는 프로그램이기 때문에 안전신문고 계정 정보를 입력해야 합니다. 입력된 비밀번호는 암호화해서 저장됩니다.

더 자세한 설명은 페이지 하단의 4. 세부 설정 이하 내용을 참고해 주세요.

2. 크롤링 설정 에서는 크롬 구동 방식과 크롤링 방식을 설정할 수 있습니다.

크롤링 설정에서 로컬 데스크톱 크롬 등 브라우저 구동 방식을 선택하는 화면

크롬 구동 방식의 경우 총 3가지가 있습니다.

윈도우나 리눅스용을 다운받아 사용하는 경우 2. 로컬 데스크톱 크롬이 가장 편한 선택입니다. 이 경우 프로그램에서 알아서 크롬 드라이버를 다운받은 뒤 로컬에서 크롬을 실행하여 크롤링을 시작합니다. Headless 모드를 선택할 경우 크롬창이 나타나지 않고 작업이 시작됩니다. Headless 없이 두어번 실행하여 정상작동 되는 것을 확인 후 Headless를 키면 됩니다.

Selenium Hub는 NAS, 서버, N100저전력 등의 환경을 염두에 둔 모드입니다. 위의 예시의 docker-compose.yml에도 Selenium Hub가 포함되어 있습니다. GUI환경이 없어도 크롬을 이용한 자동화를 돌릴 수 있는 매력적인 선택지입니다. 또한, 도커 이미지의 경우 크로니움을 자체내포하고 있기 때문에, CLI환경에서 편하게 사용하려면 로컬 데스크톱 크롬 - Headless모드를 통해 사용할 수 있습니다.

당연하지만, 크롬이 없거나 GUI환경이 아닌 곳에서 로컬 데스크톱 크롬(No headless)으로 작동시키려고 하면 아래처럼 에러가 발생합니다. 하지 마세요.

GUI 환경이 없는 리눅스 서버에서 로컬 데스크톱 크롬 방식으로 작동시켜 발생한 에러 창

안전신문고 크롤링

이 프로그램의 기본 기능입니다. 실행하면 안전신문고 로그인 후 나의 신고내역 을 페이지 끝까지 순회하며 모든 신고내역을 리스트화 한 후 개별 신고내역을 하나씩 전부 순회하며 신고내용, 처리내용 등을 긁고 파싱해서 DB화 합니다.

회원 로그인 모드와 크롤링 범위를 선택하는 안전신문고 크롤링 제어 화면
신고내역을 크롤링하기 위한 페이지입니다

각 항목별 기능 설명은 아래와 같습니다.

메뉴명항목명설명
로그인 모드회원 로그인 모드설정값에 저장한 계정을 이용해 자동으로 로그인 후 크롤링
비회원(수동) 로그인 모드안전신문고 로그인 페이지에서 일시정지. 사용자가 직접 크롬을 조작하여 로그인 후 수동조작 완료 (계속하기) 버튼을 클릭해 크롤링 재개
크롤링 범위전체 크롤링나의 신고내역에서 마지막 페이지까지 전부 순회
최소 크롤링'처리중' 상태가 하나도 없는 페이지를 탐색 페이지 한도만큼 만날 경우 리스트 순회를 중지, 개별 신고건을 크롤링 시작
(기존 안전신문고 크롤러의 조건부 탐색과 동일한 기능)
DB 초기화 후 새로 크롤링모종의 이유로 DB를 스스로 수정, 정리할 수 없거나 데이터가 망가졌을 경우 DB를 초기화하고 처음부터 완전히 크롤링
큐 기능특정 신고번호를 행으로 구분하여 입력 시 해당 신고건만 개별 크롤링. DB에 없는 신고번호를 크롤링할 순 없음
이미 존재하는 개별 신고건 중 일부에 대해 특정 사유로 크롤링 할 때 필요(잦은 보완 요청 등)
수동 데이터 내보내기현재 DB 엑셀 저장mysafetyreport.exe 가 위치한 경로의 하위 경로인 ./data/results아래에 일시_시간.xlsx 형식으로 엑셀 파일 저장
매 크롤링 작업마다 자동으로 생성
구글 시트에 업로드스프레드시트 주소와 JSON키 업로드 시 활성화됨.
엑셀파일 저장 외에도 지정한 구글 스프레드 시트에서 data 시트에 데이터를 업로드
매 크롤링 작업마다 자동으로 수행됨
크롤링 시작선택한 옵션대로 크롤링 시작, 엑셀 저장 작업까지 완료
수동조작 완료(계속하기)비회원(수동) 로그인 모드 선택 시, 직접 로그인을 수행한 후 클릭해야 크롤링 재개됨
강제 중지작업중인 크롤링 강제 중지

데이터 조회

크롤링 작업이 진행되는 동안 표시되는 동작 상태 로그와 제어 버튼

크롤링 작업이 완료되면 DB에 적재한 데이터를 바로 가시적으로 볼 수 있는 페이지를 제공합니다.

교통위반 내역

먼저 교통위반 내역은 안전신문고에서 신고할 때, 교통위반 탭을 이용한 신고건이 해당됩니다.

크롤링이 완료된 교통위반 신고 내역들이 표 형태로 나열된 데이터 조회 화면
교통위반 예시
교통위반 내역 표에서 체크박스를 통해 특정 신고건을 감시목록에 추가하는 기능
항목기능 설명
(1)감시목록 추가체크박스로 선택된 신고건들을 '감시 목록 관리' 페이지에 추가합니다.
이렇게 추가된 신고대상건들은 접속하자마자 대시보드에서 상태를 확인할 수 있어, 신고 후 답변 추이를 관찰해야 하는 건에 유용합니다.
(1)엑셀 다운로드검색 결과에 따른 신고건들을 엑셀 형식으로 내려받습니다.
(1)선택된 신고번호 복사체크박스로 선택된 신고건들의 신고번호(SPP-...)를 클립보드에 복사합니다.
(1)현재 페이지 신고번호 복사검색 결과 현재 페이지에 나타나고 있는 신고건들의 신고번호를 클립보드에 복사합니다.
(1)전체 신고번호 복사교통위반에 해당되는 모든 신고번호(2000건일 경우 2000건..)를 복사합니다.
(2)검색창표 내부 내용 중 검색하려는 텍스트가 일치하는 모든 건을 모조리 추려내는 단순검색창입니다.
(3)상세 검색 및 도구오른쪽 사이드바를 통해 검색 조건을 구체화합니다.

상세 검색 및 도구를 클릭 시 아래 사진처럼 검색을 위한 사이드바가 열립니다.

특별한 내용은 없고, 처리기관 하단의 ‘경찰기관 제외, 경찰기관만 포함’ 기능의 경우 처리기관에 ‘서울’이라고 검색할 경우 처리기관에 서울특별시, 서울관할경찰서등이 섞여나오는 것을 방지하기 위함입니다.

상세 검색 및 도구 사이드바를 열어 처리기관이나 위반법규로 검색하는 화면 상세 검색창의 처리기관 항목에 인천계양을 입력하여 필터링하는 화면

예시로 아래처럼 ‘인천계양’을 검색(단축키 Enter)할 경우

검색 결과 처리기관이 인천계양경찰서인 신고건들만 추려진 교통위반 내역 표

아래처럼 처리기관이 인천계양인 신고건만 추려집니다.

차량번호나 발생일 입력 항목이 존재하지 않는 기타 위반 조회 탭의 신고 내역 표

기타 위반 조회

교통위반 이외의 탭을 이용해 신고한 건들을 모아서 보여줍니다.

이 탭에서 신고할 땐, 차량번호, 발생일, 발생 시간 등을 입력하는 항목이 없습니다.

안전신문고 웹사이트에서 차량번호나 발생일을 따로 입력하는 항목이 없는 기타 위반 신고 창

따라서, 크롤러도 해당 정보는 가져올 수가 없습니다.

기타 위반 신고 시 신고 내용란에 차량번호와 발생일시를 직접 텍스트로 입력한 신고 창

만일 쓰레기, 폐기물 탭으로 담배꽁초를 버리는 운전자를 신고하거나 불법 주정차 신고 등에 대해 크롤러에서 해당 정보를 보고 싶다면 신고할 때 신고내용에 아래 내용을 직접 입력하면 됩니다(콜론 : 앞뒤로 띄어쓰기 한 칸 주의)

* 차량번호 : 서울999999
* 발생일자 : 2026.12.31.
* 발생시각 : 23:59

그러면 크롤러에서 해당 텍스트를 파싱할 수 있습니다.

중복차량 내역

사실 운전하다 보면, 위반하는 운전자는 따로 있습니다. 늘 위반하는 차가 위반합니다.. 저도 운전하기 전까지는 이런 사실을 몰랐습니다.

어느날부터 신고하다보면 차량번호 입력칸에서 자동완성이 되더군요…… =ㅅ=

그런 차량들에 대한 신고 내역을 추적관찰하기 위한 메뉴입니다. 제가 다니는 구역의 모 경찰서는 상습범을 계속 신고해도 계속 경고만 줘서 화딱지나더라구요.

이 페이지에서는 동일한 차량을 그룹화하여 신고번호 역순으로 보여줍니다. 즉, 가장 최근에 신고한 차량이 제일 위로 올라오는 구조입니다.

동일한 차량을 그룹화하여 중복횟수와 함께 신고번호 역순으로 보여주는 중복차량 내역 표

뒤의 두 페이지와 다른 점은 ‘중복횟수’ 컬럼이 있다는 점입니다.

전체는 ‘취하’상태의 신고건을 포함한 수, 유효는 취하 신고를 제외한 신고수입니다.

만일 설정 페이지에서 ‘취하 데이터 숨기기’를 끈다면, 이 표에서도 취하 건이 같이 나타납니다.

처리 부서 통계

교통위반과 기타 위반에 대해 각각 기관별/담당자별로 처분율을 나타내는 통계페이지입니다.

교통위반과 기타 위반에 대해 기관별 및 담당자별 과태료 처분율을 보여주는 통계 화면 통계 표에서 서울강서경찰서 행을 클릭하여 해당 기관의 신고건만 필터링된 교통위반 내역 표

기관별/담당자별 표의 각 행을 클릭 시 교통위반 내역 혹은 기타 위반 조회 페이지에서 기관 및 담당자를 추려서 보여줍니다.

아래 예시는 서울강서경찰서 행을 클릭했을 경우 알아서 페이지를 이동해주는 모습입니다.

처리 부서 통계 메뉴 우측에 있는 신고명 및 위반법규명 상세 검색 사이드바

이 페이지의 상세 검색 기능은 비교적 단촐합니다.

상세 검색창에 5조를 검색하여 도로교통법 제5조 위반에 대한 통계를 확인하는 화면

신고명이나 위반법규명을 이용해 특정 위반행위에 대한 통계도 따로 산출할 수 있습니다.

예를 들어 ‘5조’라고 검색할 경우 신호 위반이나 지시 위반에 대한 통계를 확인할 수 있습니다(도로교통법 제5조).

설정 메뉴의 안드로이드 기기 연동 항목에서 연동 키를 입력하는 칸

세부 설정

안드로이드 기기 연동

안드로이드 앱 연동을 통해 답변 완료 알림을 받아 신속하게 크롤링된 신고 내역 표
안드로이드 기기 연동 메뉴

안드로이드 앱과의 연동을 지원하며, 카카오톡 혹은 안전신문고 앱 알림을 이용해 답변이 완료된 건이 파악되는대로 신속하게 크롤링하여 사용자가 보기 편하게 제공합니다.
(아래 예시는 개인정보 노출방지를 위해 일부 가렸습니다.)

답변이 완료된 안전신문고 신고건에 대해 만족도 평가를 진행할 수 있는 안내 페이지
안전 신고와 관련된 신고서 이미지로 보입니다.
안드로이드 앱 연동을 위한 앱 설정 및 기기 등록 절차를 보여주는 안내 화면
신고 절차와 관련된 안내 이미지로, 안전 신고를 위한 절차와 주의사항을 시각적으로 보여줍니다.
설정 메뉴의 시스템 및 서버 설정 하단에 위치한 프로그램 작동 방식 관련 세부 설정 창 안전신문고 만족도 평가 자동화를 위해 본인의 휴대폰 번호를 입력하는 시스템 설정 창

기기 연동과 관련된 설명은 이 페이지를 참조해 주세요

시스템 및 서버 설정

설정 페이지에서 1. 시스템 및 서버 설정 하단에 프로그램 작동 방식에 대한 몇 가지 설정이 있습니다.

신고 건에 답변이 달린 후 만족도 평가 별점을 남길 수 있는 안전신문고 웹페이지 팝업
시스템 설정 페이지로, 사용자 계정 정보 입력과 시스템 설정 옵션이 보여집니다.

휴대폰 번호

휴대폰 번호가 미입력된 상태에서 만족도 평가를 시도하여 발생한 오류 메시지 창
나만의 안전신문고 휴대폰 번호 입력 페이지

안전신문고 신고 건에 대해 답변이 달린 후엔 만족도 평가에 참여할 수 있습니다. 해당 만족도 평가 페이지 주소는 신고번호와 신고자의 휴대폰 번호로 이루어져 있어, 이를 자동으로 순회하기 위해선 휴대폰 번호가 필수적으로 입력되어야 합니다.

휴대폰 번호가 입력되지 않을 시 아래처럼 오류 메세지가 나타납니다.

혹은 잘못된 휴대폰 번호를 입력하면 기능 작동 중 에러만 띄우다가 끝나버리니 제대로 입력해주세요. 어차피 모든 설정값은 로컬에 저장될 뿐입니다.

설정 메뉴에서 경찰소속기관명 정규화 기능을 켜는 기타 데이터 필터 세팅 화면

기타 데이터 필터 세팅

동일한 경찰서 소속임에도 시기에 따라 다르게 표시된 원본 데이터의 처리기관명 예시
나만의 안전신문고 데이터 필터 세팅

경찰소속기관명 정규화의 경우 안전신문고 답변에 중구난방으로 달려나오던 처리기관을 통일하여 통계자료 산출에 도움을 줍니다.

예를 들어, 같은 ‘서울강서경찰서’ 소속이라도 아래처럼 언제 답변했냐에 따라 처리기관명에 사소한 차이가 있는 부분을 ‘경찰청 서울특별시경찰청 서울경찰서’로 통일해 줍니다.

정규화 옵션 적용 전 동일 경찰서임에도 다르게 표기된 안전신문고 처리기관명 예시 표 경찰소속기관명 정규화 기능을 통해 하나로 통일된 형태로 변환된 처리기관명 예시 표

통계 페이지에서도 동일기관, 동일인이 불필요하게 분리되어 데이터를 보기 어려워지기 때문에 켜두는 것을 추천합니다.

경찰소속기관명 정규화 옵션을 끄고 산출하여 동일 기관이 분리된 부서별 통계 화면 경찰소속기관명 정규화 옵션을 끄고 산출하여 동일 소속임에도 분리된 담당자별 통계 화면

경찰소속기관명 정규화 옵션 끈 상태

경찰소속기관명 정규화 옵션을 켜서 산출하여 동일 기관 데이터가 하나로 통합된 부서별 통계 경찰소속기관명 정규화 옵션을 켜서 동일 기관 담당자들의 데이터가 깔끔하게 통합된 통계 화면

경찰소속기관명 정규화 옵션 킨 상태

취하 데이터 숨기기의 경우 웹UI 혹은 엑셀 추출 시 ‘취하’상태의 신고건을 제외하고 대시보드의 막대 그래프 비율 산정에서도 제외시킵니다.

대시보드의 막대 그래프와 통계에 취하 상태의 신고건이 포함되어 산출된 화면
취하 데이터 숨기기 끈 상태
대시보드의 막대 그래프와 통계에서 취하 상태의 신고건이 제외되어 산출된 화면
취하 데이터 숨기기 킨 상태

취하 신고건의 경우 유의미한 데이터가 되지 못하므로 켜두는 것을 추천합니다.

시스템 설정

로그인 세션 유지시간과 신뢰할 수 있는 프록시 주소를 설정하는 시스템 설정 칸
안전 신고와 관련된 내용을 설명하는 이미지로, 사용자들이 안전 신고 절차를 이해하는 데 도움을 줍니다.

로그인 세션 유지시간(초)에서 설정한 시간까지 동작이 없을 경우 자동 로그아웃해주는 기능입니다.

신뢰할 수 있는 프록시는 리버스 프록시 서버와 나만의 안전신문고가 별도로 분리되어있을 경우, 로그에 찍히는 IP를 Real-IP로 보기 위해 제공하는 기능입니다.

재시도 간격(초)최대 재시도 횟수는 크롤링이나 자동 별점 기능 중 오류 발생 시 동일 시도를 시행할 간격과 횟수를 정하는 옵션입니다.

크롤링 설정

크롤링 방식 설정

안전신문고 데이터를 크롤링하는 방식을 API와 레거시 방식 중 선택할 수 있는 설정 칸
안전신문고 크롤링 방식 선택 예시

안전신문고 내부 데이터를 뿌려주는 API를 이용해 직접 데이터를 요청하는 방식(API)과, BeautifulSoup를 이용해 웹페이지를 로드해서 텍스트를 파싱하는 방법(레거시) 2가지를 제공합니다.

기본은 API로 설정되어 있으며, 추후 API구조 변동 시 제가 대응하기 전까지 사용할 수 있도록 레거시 방식도 살려두었습니다.

크롤링 후 자동 저장

크롤링 작업 완료 후 엑셀 파일 저장 및 구글 스프레드시트 업로드 자동 수행을 켜는 옵션 화면
나만의 안전신문고v2와 관련된 서버 관리 및 보안 강화 모습.

원래 모든 크롤링이 끝난 후 무조건 엑셀저장 및 스프레드시트를 업로드하도록 계획된 프로그램이었으나, 안드로이드 앱 지원 및 알람 스니핑을 통한 상시 크롤링 기능이 추가되어

지나치게 많은 횟수로 엑셀과 스프레드시트저장을 하게 되어, 별도 옵션으로 빼 두었습니다.

활성화 시 크롤링 작업 이후 매번 엑셀파일 저장 혹은 스프레드 시트 업로드 작업을 수행합니다.

크롤링 고급 설정

크롤링이나 별점 주기 작동 중 실패 시 재시도 간격과 횟수를 지정하는 크롤링 고급 설정 화면
안전 신고를 위한 사용자 인터페이스와 신고 절차를 설명하는 이미지입니다.

크롤링 뿐만 아니라 자동 별점 주기 등 프로그램 내 작동 중 모든 실패에 대해 몇 초 간격으로 얼마나 재시도 할지를 설정하는 부분입니다.

크롤링 자동 스케쥴러

스케쥴러는, 사용자가 일일히 크롤링 지시를 내리지 않아도 프로그램이 켜져있기만 하다면 설정된 시간에 자동적으로 크롤링을 수행하도록 하는 기능입니다.

방식은 인터벌과 시간 지정 두 가지입니다.

인터벌의 경우 시작시간과 실행 간격을 지정할 수 있고

시작시간과 실행 간격을 분 단위로 지정해 주기적으로 크롤링을 수행하는 인터벌 스케쥴러 설정 창

시간 지정은 24시간 형식으로 시간을 기록 후 콤마(,) 로 구분하여 최대 10개의 시간대까지 입력하면 됩니다.

특정 시간대들을 콤마로 구분하여 매일 정해진 시간에 크롤링을 예약하는 시간 지정 스케쥴러 설정 창

리버스 프록시 등을 이용해 나만의 안전신문고를 외부도메인으로 연결하고 텔레그램 봇 등과 함께 병행할 경우 외부에서도 괜찮은 사용성을 얻을 수 있습니다.

그래서 NAS등을 이용해 도커 형식으로 작동시키는 것이 가장 추천되는 방식입니다.

외부 연동 키 설정

설정 메뉴의 외부 연동 키 설정에서 텔레그램 봇 토큰과 채팅 ID를 입력하는 칸
포스트 또는 페이지 제목과 관련 사진이 위치한 앞뒤 1개 단락을 읽어 맥락 파악.

텔레그램 봇

텔레그램 봇을 생성하는 방법은 잘 알려져 있는 관계로 외부 블로그 링크로 대체합니다.. 봇 생성 후 두 가지 값만 채워놓으면, 크롤링 마다 주요 변경내역에 대한 알람을 받아볼 수 있고,

텔레그램 봇을 통해 크롤링 완료된 신고건의 주요 변경 내역 알림을 받은 스마트폰 대화 화면

차량번호나 신고번호 등을 통한 간단한 검색결과도 받아볼 수 있습니다.

텔레그램 봇 대화창에서 명령어를 입력해 특정 신고건을 검색하고 결과를 확인한 화면

봇은 , /ㅇ, /h를 통해 호출할 수 있습니다.

텔레그램 봇 대화창에서 전체 명령어 목록과 사용법 도움말을 출력한 메신저 화면

구글 스프레드시트 연동

구글 스프레드 시트 연동은 외부 블로그에 잘 설명된 곳이 있어 링크로 대체합니다.

이 기능을 활성화하면, 매 크롤링 작업 이후 DB에 저장된 데이터를 엑셀로 저장할 때, 지정된 스프레드 시트의 data시트에도 데이터를 함께 업로드하고 스프레드 시트의 =image()함수를 이용하여 첨부사진도 바로 볼 수 있는 기능을 제공합니다.

구글 스프레드시트 연동을 위해 서비스 계정의 JSON 형식 인증 키 파일을 업로드하는 칸

링크된 블로그 글들 중 ‘서비스 계정 생성, 키 파일 다운로드, API 권한 설정, 사용할 구글 스프레드 시트 권한 공유 ‘2. 파이썬으로 구글 스프레드 시트 가져오기 - 1. 구글 스프레드 시트 권한 공유’ 까지 진행해야 합니다.

키 파일은 설정 페이지 맨 마지막 3. 구글 연동 인증 파일 (JSON) 업로드에 업로드하시면 됩니다. 잘 업로드 되었다면 아래 스샷의 우측 상단처럼 ‘인증 파일 있음’으로 변경됩니다.

인증 키 파일 업로드가 완료되어 설정 페이지 우측 상단에 인증 파일 있음 상태로 표시된 화면 구글 스프레드시트의 주소 또는 고유 키값을 복사하여 설정 메뉴의 입력칸에 붙여넣는 화면

업로드 전과 후

이후 사용할 구글 스프레드시트의 주소를 아래 중 하나의 예시처럼 통째로 붙여넣던지, 스프레드시트 문서의 키값만 붙여넣으시면 됩니다.

https://docs.google.com/spreadsheets/d/1Gn3Yy9upbxGTIXzYBgopQfNcRqPHC6vnej7lgPbGsC0/edit?gid=694146024#gid=694146024

https://docs.google.com/spreadsheets/d/1Gn3Yy9upbxGTIXzYBgopQfNcRqPHC6vnej7lgPbGsC0

1Gn3Yy9upbxGTIXzYBgopQfNcRqPHC6vnej7lgPbGsC0

그 외 기타 기능

자동 별점 주기

신고건 수가 늘어날 경우 만족도 조사를 전부 눌러주기가 어려워 만든 기능입니다. 이 기능은 아직까지는 크롬 직접 조작 없이 작동합니다(언제 막힐지 모름, 막힐 경우 크롬 조작 방식으로 배포할 예정).

페이지의 하단에는 만족도 조사를 참여할 수 있는(답변 완료, 만족도 조사 참여 안한) 신고건들만 나타나는 표가 있으며,

자동 별점 주기 메뉴에서 만족도 조사를 참여할 수 있는 신고건들이 나열된 대상 목록 표

4가지 검색 항목을 통해 조건에 맞는 신고건을 추려낼 수 있습니다.

자동 별점 주기 표에서 특정 신고건을 클릭해 상단 별점 부여 대상 입력칸에 수동으로 등록한 상태

왼쪽의 ID부분의 8자리 숫자를 클릭 시 알아서 상단에 하나씩 입력되기도 하지만,

검색 결과 자동 입력 버튼을 눌러 하단 표의 조건에 맞는 신고건들을 상단에 일괄로 등록한 상태

‘검색 결과 자동 입력’ 버튼 클릭 시 일괄 입력됩니다.

선택 건 별점 처리 시작 버튼을 누른 후 실시간으로 만족도 조사 처리 로그가 출력되는 화면

이후 원하는 별점 클릭 후 ‘선택 건 별점 처리 시작’ 을 클릭하면 알아서 과정이 진행됩니다.

자동 별점 주기가 완료된 후 실제 안전신문고 사이트에서 만족도 조사가 정상적으로 반영된 팝업 창

아래처럼 실시간으로 로그가 출력되며, 실행 후 실제로 해당 신고건에 가보면 이미 만족도 조사가 완료되어있음을 확인할 수 있습니다.

감시 목록 관리에 추가하기 위해 데이터 조회 페이지 표에서 중요 신고건 체크박스를 선택하는 화면 감시목록에 추가된 특정 신고건들이 감시 목록 관리 페이지의 표에 나열되어 지속 관리되는 화면 감시 목록 관리 페이지에서 사용자가 직접 등록해 둔 중요 신고건들의 현재 처리 상태를 확인하는 표

감시 목록 관리

‘즐겨찾기’라고 표현해도 될텐데 Watchlist의 느낌을 강하게 주기 위해 감시 목록이라고 이름 지었습니다.

교통/기타 위반 페이지에서 신고건들을 선택해 감시목록에 추가할 수 있습니다. 상세 검색 등을 활용해 조건에 맞는 걸 추려서 등록하시면 되고,

크롤링마다 서버에 생성되는 엑셀 파일과 로그들을 웹 UI에서 직접 확인하고 다운로드하는 파일 브라우저

감시 목록에 추가된 신고건은 감시 목록 관리 페이지에서 할 수 있습니다.

파일 브라우저 디렉토리에 crawl, core, star 등의 접두사가 붙은 각종 로그 파일들이 나열된 화면

파일 브라우저

크롤링마다 자동으로 저장되는 엑셀 파일이나 작동 로그를 직접 다운로드 할 수 있는 곳입니다.

최근 크롤링 시각과 전체 신고건 비율 및 교통위반 과태료 처분율 등을 요약해서 보여주는 대시보드 상단

윈도우, 리눅스, 도커 모두 하위 경로 ./data/logs./data/results폴더에서 다운받을 수 있지만, 웹에서 바로 확인하면 편할 것 같다는 생각에 만들었습니다.

로그의 경우 crawl_, core_, star_ 3가지 형식의 로그로 나뉘어지고 각각 크롤링 로그, 웹서버 관련 로그, 자동 별점 주기 로그를 기록합니다.

대시보드

가장 최근 크롤링 시각 표시, 모든 신고건의 퍼센테이지(%)화, 교통위반 신고건에 대한 실제 과태료 처분율 등을 간략하게 표기합니다.

대시보드 하단 영역에 사용자가 등록한 감시 목록과 최근 3일 내에 답변이 달린 신고건들이 요약되어 나타난 표

페이지 하단에는 Watchlist와 최근 3일 내 답변된 신고건들이 간략하게 표로 나타납니다.

나만의 안전신문고 프로그램의 상세 변경 이력과 업데이트 내용을 확인할 수 있는 Github 릴리즈 화면

변경 이력

상세 변경 이력은 Github를 참조 부탁드립니다.