자바에서 백그라운드 잡을 비동기로 처리하고 싶을때 사용

 

- Apache commons exec / ProcessBuilder 보다 많은 기능을 제공

- 자세한 내용은 아래 깃헙 참조 

- zt-exec 는 2020 년 apache commons exec 는 2014년 

- zt-exec 는 최신까지 패치는 안되어 최신 보안 이슈는 존재 (내부 의존성 때문, 2022.08 기준 )

 

java

- https://github.com/zeroturnaround/zt-exec

 

GitHub - zeroturnaround/zt-exec: ZeroTurnaround Process Executor

ZeroTurnaround Process Executor. Contribute to zeroturnaround/zt-exec development by creating an account on GitHub.

github.com

  public static int exec2(String... args) throws Exception {
    log.info("started at : {}", getCurrentTimestamp());

    String[] params = { "7", "5", "1" };
    for (String p : params) {
      String[] command = { "python3", "/Users/wonsama/Desktop/spring-dev/elk-log-test/test.py", p };
      Future<ProcessResult> future = new ProcessExecutor().command(command).readOutput(true).start().getFuture();
      // 아래 두 라인 주석 해제를 하면 동기 처리 됨
      // String output = future.get(60, TimeUnit.SECONDS).outputUTF8();
      // log.info("output : {}", output);
    }
    log.info("end at : {}", getCurrentTimestamp());
    return 0;
  }

python

import time
from datetime import datetime
import sys

loop = int(sys.argv[1])

for idx in range(1, loop+1):
    time.sleep(1)

f = open("result.txt", "a")
f.write("argv1 : {}, occured : {}\n".format(
    sys.argv[1], datetime.now(tz=None)))
f.close()

 

설치 완료 후 iTerm2 테마 화면

 

1. zsh 활용법 

https://sourabhbajaj.com/mac-setup/iTerm/zsh.html

 

Zsh · macOS Setup Guide

zsh The Z shell (also known as zsh) is a Unix shell that is built on top of bash (the default shell for macOS) with additional features. It's recommended to use zsh over bash. It's also highly recommended to install a framework with zsh as it makes dealing

sourabhbajaj.com

2. agnoster 테마 설치

 

> git 사용자에게 매우 좋음 

 

https://github.com/agnoster/agnoster-zsh-theme

 

agnoster/agnoster-zsh-theme

A ZSH theme designed to disclose information contextually, with a powerline aesthetic - agnoster/agnoster-zsh-theme

github.com

 

3. 파워라인 폰트 설치

https://github.com/powerline/fonts

 

powerline/fonts

Patched fonts for Powerline users. Contribute to powerline/fonts development by creating an account on GitHub.

github.com

4. 추가 색상판 설치 ( solarized ) 

 

https://github.com/brantb/solarized/tree/master/iterm2-colors-solarized

 

brantb/solarized

precision color scheme for multiple applications (terminal, vim, etc.) with both dark/light modes - brantb/solarized

github.com

 

 

flutter 설치하기

 

https://flutter.dev/docs/get-started/install/macos

 

macOS install

How to install on macOS.

flutter.dev

 

 

qrcode.min.js



 

[ 사전 준비 ]


- 후라이팬

- 허브솔트 ( 갠적으로 - 청정원 마늘양파 맛 )

- 집게 ( 고기 뒤집기 & 먹기용 )

- 가위 



[ 구매 ]


- 쌈케일 990 ( 10장 들어 있음 / 1인분 5장 )

- 양송이 1,800 ( 4개 입 / 1인분 2개 )

- 살치살 9,300 ( 캐나다산 300g / 1인분 150g )

- 양파 860 ( 1개 / 1인분 반쪽 )


약 집밥 한끼 약 7,000 원 정도면 준수하게 고기 구워먹기 가능


[ 굽는 방법 ]


( 후라이팬 쎈불 ) - - - - - - - - 

- 양송이 내부 기둥 따네고 후라이팬에 배치

- 양송이는 굽는 시간이 젤 많이 걸림

- 쌈케일 한번 씻어두기 


( 후라이팬 중불 ) - - - - - - - - 

( 양파 준비 )

- 절반 잘라 놓고 우선 두껍께 가로 썰기 함.

- 후에 고기를 양파 위에 올려놓기 위함.

- 양파도 나름 금방 익음


( 양송이 내부에 물기가 보이기 시작한다면 ... )

- 양파 올리기

- 고기 반 도막 올리기 

- 고기는 빨리 익으므로 주의 !!

- 고기 5초정도 익히고 모두 뒤집기

- 처음 올린거 부터 먹기 좋은 형태로 가위로 자르기

- 다 잘랐으면 한번 더 뒤집어 주기

- 양파도 상황봐서 중간 중간 뒤집기 시전


( 후라이팬 약불 ) - - - - - - - - 


- 이제 양파 위에 고기 익은것을 올려 놓기

- 씻어 놓은 쌈케일과 고기를 냠냠 맛있게 물론 양파와 함께라면 굳

- 양송이 대는 상대적으로 빨리 구워짐 / 적절하게 익으면 먹기 !!

- 양송이에 물이 많이 올라오면 건져 놓고 먹기 (뜨거울 수 있으므로 주의)

- 다 먹고 불 끄기 !!



( 청소 )


- 육즙이 내려가면서 후라이팬을 태워버림

- 키친타올 2장 정도를 집게에 찝어서 휘휘 닦아줌

- 다 닦은 후 설걷이로 마무리하면 끝 !!



[ 키포인트 ]


- 고기는 끝까지 불 위에 놓기 ( 육즙이 흘러 고기가 맛 없어짐 )



장모님께서 부탁하셔서 만든 금연, 광고부착 금지 포스터


A4로 출력하여 코팅한 다음 붙여서 쓸 예정


그럭저럭 잘 만든거 같아서 나름 뿌듯 ;; 포토샵에서 대충 해서 만든것이긴 하지만 ㅜㅜ


nosmoking.psd

마음껏 받아서 사용하세요 ~~~



라즈베리에서 사용할 UI를 찾는 도중...

(MAC에서 개발해보고 raspberrypi에 배포가능한 형태로 ...)


1) Electron + html

언어 : nodejs, javascript, css, html, electron-framework

장점 : html로 구현가능, javascript만 잘알아도 굳

단점 : html로 하기 때문에 제약이 좀 있음. nodejs도 알아야 편함.


2) JavaFX

언어 : java, css

장점 : 무겁다 

단점 : 참조 소스가 많음, SceneBuilder를 UI구성 손쉽다. 코딩량이 많음.


3) Kivy 

언어 : pythonm kivy-framework

장점 : 가볍다, 코딩량이 적음

단점 : 환경구성이 쉽진 않았음. (뭐 공홈에 나온데로 해도 안되는 부분이 좀 발생함)



위 3개 중에서 고민 했었는데 ... 

각각 일장 일단이 있으므로, 일단 다 helloworld 수준까지는 해보기로 함.

( python, java, javascript, nodejs ... 다양한 언어를 알아야 됨... 물론 약간만 알고 PASS, 현시점에서는)

( 물론 pyqt 같은 것도 있었는데 설치 용량도 크고 배워야 될 것이 너무 많아 일단 배제함. )


1) Electron + html


매직미러를 만들어 봤음 



웹으로 UI를 손쉽게 구현할 수 있었으나 ... 라즈베리에 올라가니 실제 속도가 늦어지는 단점이 있었고 뭔가 아쉬움이 있었음


2) JavaFX


간단한 websocket 기반의 채팅 프로그램을 올려서 테스트 해봤는데 ... 

부팅 시간이랑 Animation 부분이 영 맘에 안들었음 ㅜㅜ 1) 보다 속도가 더 안나오는 듯한 느낌이 들었음

하지만 정형화 된 틀에서 뭔가를 만든다고 한다면 생산성이 잘 나올거 같음(SceneBuilder 때문, Java에 익숙하기 ㅋ)


3) Kivy 




소스코드 분량도 확실히 적고 코딩(.py) 디자인(.kv)가 분리 되어 유지보수가 수월함.(python이 익숙하지 않은것이 문제 ;;)



==> 총평

Java에 익숙하다면 JavaFx

Python에 익숙하면 Kivy

Web에 익숙하다면 Electron + HTML


[코딩시간]

개인적으로는 java와 javascript를 많이 써서 1(electron), 2(javafx)가 시간이 적게 든거 같음.

하지만 python에 익숙한 사람이라면 kivy를 배워 UI를 구성하는 것도 좋은거 같음.


[UI구성]

UI구성에 있어서는 정형화된 대쉬보드를 만드는 것이라면 2(javafx)를 선택하여 scenebuilder를 활용한다면 손쉽고 빠르게 뭔가를 만들 수 있을거 같음.


[범용성]

3(kivy) 같은 경우 거의모든 플렛폼에서 (linux, vm, windows, mac, rapberrypi, ios, android) 동작하기 때문에 잘 만들어만 두면 좋을거 같다. 거기다 파이썬을 어느정도 해본 사람이라면 추천 !!



참조1) JavaFX에서 WebView올리고 HTML로만 구성하는것 보단 Electron으로 구현하는 편이좋음

참조2) 동일 CASE로 테스트 하면 더 좋겠지만 재미도 없고, 시간도 없어서 샘플에 맞춰 대충 해보니 ;;


JSOUP을 사용하여 스크래핑 (웹 정보를 분석하여 필요정보를 정제하는 과정) 을 하는 것에 대해 기록을 남겨봅니다.


#1. USER_AGENT 설정


=> 별것 아니라 생각될 수 있는 부분이겠지만... 브라우저 정보를 서버사이드에서 판독하여 그에 맞는 화면을 구성하도록 지원합니다.


MOBILE 
(아이폰)

 Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1

 WEB

(맥크롬최신)

 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36

 WEB

(윈도구버전)

 Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6


위와 같이 각각 다른 USER_AGENT 정보를 설정하여 웹을 조회해 보면 각각 화면이 다르게 보이는 것을 확인할 수 있다.


특히 구버전으로 조회하는 경우 이런 케이스가 있는데 javascript를 지원하지 않아서 랜더링된 html로 바로 보여주는 case가 존재한다.

(이땐 보통 많은 점검과정이 생략되는 경우가 많음, 서버사이드에서 체크를 할 수 없기 때문 )


모바일, 웹, 구버전 브라우저 등을 적절하게 섞어서 잘 해보면 스크래핑 안될 사이트도 되는 경우가 있다 ㅎㅎ


#2. javascript를 통한 렌더링 된 dom의 처리 방안


위와 같은 경우는 좀 난감하다 소스는 javascript 밖에 없는데 실제는 화면이 렌더링 되니 jsoup로 백날 해봐야 건져지는 것이 없다. 이럴 땐 phandomjs 등을 사용하여 headless browser 기능을 활용하여 phantomjs에서 랜더링된 html 정보를 읽어들여 후처리를 하는 방법이 있다.

( 확인사항 : phantomjs를 설치해야 되며 이후 processor 또는 driver로 접근하여 해당 정보를 catch 해야 됨 )




위 2가지 정보만 잘 조합해봐도 많은 것을 처리 할 수 있다. ( 잊어버릴까봐 기록물로 남김 )

처음으로 구매 해 봤는데... 과연 잘 산 것인지 흠..









개인적으로 사용하려고 이곳 저곳에서 모은 팁을 기록 합니다.

(내용은 계속 추가 예정 댓글 환영)


자동 재시작

: 가끔 프로그램 오류등으로 정상 동작하지 않는 경우가 발생하는데 자동 재시작을 걸어두면 상대적으로 좋은거 같음

- 메뉴진입 : 설정 - 일반 - 초기화 - 자동 재시작

- 기본 동작시간 : (수) 03:00 







+ Recent posts