른록노트

[llpv] PC 사용시간 관리 프로그램 기획 본문

Tech/[IT]

[llpv] PC 사용시간 관리 프로그램 기획

른록 2021. 4. 9. 18:43

llpv (llProcessView) for Windows

활성화된 프로그램의 사용시간을 측정하여 컴퓨터를 생산적으로 사용할 수 있도록 도와주는 프로그램입니다.

순위, 검색, 제어, 알람, 메모 기능이 있고 홈페이지에서 사용자들의 실시간 프로세스 순위를 볼 수 있습니다. (동의해야 집계에 포함됩니다.)

llpv의 이름은 lenlok process view의 약자입니다.

의도

실무에서 사용해봤던 기술을 이용하여

llpv라는 agent로 사용자의 정보를 받아서 데이터를 활용할 수 있는 시스템을 만들고 싶었습니다.

llpv (agent)

자바 Swing으로 개발하였고 데이터베이스는 h2를 사용하였습니다.

windows의 프로그램을 가져오는 방법은 jna 라이브러리를 사용하였습니다.

java 프레임워크는 사용하지 않았으며 spring boot나 다른 프레임워크를 사용하지 않은 이유는

간단한 기능밖에 없으니 최대한 간소화하고 아는 지식으로 빠르게 개발하고자 원초적인 방법을 채택하였습니다.

db는 embeded db h2를 사용하였습니다. 개발 초기엔 1초마다 데이터를 저장하게 했었는데

저장공간과 성능을 위해 같은 프로세스명과 같은 프로그램 제목을 실행할 경우 최대 1분마다 데이터가 저장되도록하여 성능을 개선하였습니다.

실시간 순위 집계에 동의를 체크하지 않으면 완전한 오프라인 응용프로그램입니다.

llpv_web (web)

웹서버는 항상 켜져있어야해서 Netlify 라는 무료 호스팅 사이트를 이용하였고

순위 데이터는 REST 서버와 통신하도록 개발하였습니다.

디자인은 무료 템플릿을 이용하였습니다.

llpv_rest (REST서버)

llpv_rest는 두가지 역할이 있습니다.

  1. 데이터 수집
    llpv agent에서 1분마다 데이터를 받으며 데이터를 검증하고 kafka로 데이터를 전송하여 수집합니다.
  2. llpv_web에 순위 정보 제공
    llpv_web에서 ajax로 순위 데이터를 요청하면 llpv_rest는 elastic에서 데이터를 검색하여 순위 정보를 제공합니다.
    web과 데이터 연동중에 CORS나 Mixed Content (http <-> https) 연결 등 ssl과 관련된 이슈가 있었는데 인증된 인증서를 사용하여 문제를 해결하였습니다. (SSL은 sslforfree라는 사이트에서 무료로 사용하였습니다.)

llpv_process (데이터 가공 저장)

spark로 실행되며 kafka에 저장된 데이터를 하나씩 불러와서 데이터를 가공해서 elastic에 저장합니다. (spark는 단일 프로세서로 동작합니다. 분산처리는 공부가 더 필요할 것 같습니다.)
나중에 분류 별 순위 제공을 위해 프로세스명, 프로그램 제목 데이터를 기준으로 데이터를 분류하여 저장되게합니다.

데이터 분류 방법은 elastic에 percolator라는 검색 기능을 사용해서 데이터를 기준으로 미리 저장된 쿼리에 역검색하는 방식으로 개발하였습니다.

서버

  1. Netlify 무료 호스팅 (llpv.kr 웹사이트)
  2. 윈도우 PC (Vmware 사용하여 CentOS7.4 서버 3대) (공유기의 포트포워딩 기능을 이용하였습니다)
    PC가 꺼지면 데이터 수집과 순위 표시가 멈추게 됩니다.

구성도

숫자는 순서입니다.

 

미래 계획

분류 별 순위를 제공할 생각입니다. 현재는 분류 할 기준을 제가 직접 넣고 있지만 사용자들에게 게시판형태로 신청받아 승인하면 저장해줄 수 있는 방식으로 개발할 생각입니다.

나중에 C#을 배워서 제대로된 응용 프로그램을 만들어보고싶고 디자인과 쉬운 사용자 UI, 그리고 데이터를 기반으로
AI가 사용자에게 대화로 추천이나 다양한 통계 등 여러가지를 구현하고 싶습니다.
그리고 CI/CD, 클라우드 등 개발 환경도 구축할 계획입니다.

 

마치며

처음엔 aws를 사용할까 생각해봤지만 rest서버로 트래픽이 있기때문에 비용 문제가 있을거같아서 선택하지 않았지만 역시 트래픽이 생기게 하는건 쉬운일이 아닌것 같습니다. 이번 계기로 여러가지를 많이 깨달았고 아주 재미있었습니다.

반응형
Comments