개발환경 37

스프링배치로 전환

외부 API 사용 목록 작성 외부API 오류 구분. 재처리가능? api 변경으로 로직 재구성필요? spring service 작성 Retryable annotation 작성 Recover annotation 작성 오류시에 텔레그램에 관련 메세지 전송. 재처리 위한 정보 필요. spring batch 작성 기존 jobs 에서 Scheduled 어노테이션은 그대로 사용가능함. Scheduled 밑의 메소드 안에 있는 로직을 하나의 tasklet으로 구현하면 스프링배치로 전이가 쉬워짐 spring 재처리 api controller api 에서 스프링배치 재기동을 위한 코드 필요 관리자 화면에서 재처리 api 호출하는 식으로 처리.

개발환경 2022.05.18

윈도우에서 리눅스 파일 시스템 접근하기.

최근에 지인의 리눅스서버에서 적출한 하드디스크에 있는 데이터를 백업할 일이 있었습니다. 윈도우10에서 해당 하드디스크를 마운트 하는 것은 어렵지 않습니다. 여러 유틸이 있지요. 그런데 한글로 된 디렉토리나 파일을 읽지 못합니다.. 그래서 이것저것 시도를 해 보았는데요... 위에서 읽지 못한 디렉토리나 파일을 읽을 수는 있는데 한글인식이 되지 않는 문제가 있네요.. 한글인식이 되면서 읽을 수 있게 하는 유틸이 필요하게 되었는데요.. http://www.chrysocome.net/explore2fs chrysocome.net - Explore2fs Explore2fs Explore2fs is a GUI explorer tool for accessing ext2 and ext3 filesystems. It r..

개발환경 2020.06.17

HttpClient timeout ...

HTML 크롤링하여 스크래핑할 때 Jsoup 을 많이 사용합니다. 하지만 Jsoup에는 크게 두가지 문제가 있어 보입니다. 1. 큰 HTML 파일을 크롤링 제대로 하지 못합니다. 2. 잘못된 HTML 파일의 경우 텍스트만 발라내다가 행(Hang)이 걸립니다. 21세기에 이런 황당한 일이... 1번 문제는 크롤링은 HttpClient 같은 오픈소스를 이용하여 해결할 수 있습니다. 2번 문제는 Swing에 있는 모듈로 처리할 수 있습니다. 대충 아래처럼 하면 HTML에서 텍스트를 얻어낼 수 있습니다. StringBuilder sb = new StringBuilder(); ParserDelegator parserDelegator = new ParserDelegator(); HTMLEditorKit.Parser..

개발환경 2019.11.13

spring mvc favicon 에러..

일반적인 브라우징에서는 딱히 문제가 없는데 로그인이후에 favicon 파일로 인해 여러 가지 문제가 발생했습니다. 구글링해보면 여러가지 방법이 제안되어 있습니다. 1. Controller에서 /favicon.ico을 처리하는 메소드에 리턴값이 없게 합니다. @GetMapping("favicon.ico") @ResponseBody public void returnNoFavicon() { } 2. Configuration에 custom 하게 favicon.ico 위치를 직접 처리합니다. @Bean public SimpleUrlHandlerMapping customFaviconHandlerMapping() { SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMa..

개발환경 2019.11.13

jsoup 사용시 애로사항

자바로 html을 파싱할 때 jsoup을 주로 사용합니다. 오늘까지 jsoup ( 1.11.3 ) 사용할 때 크게 문제가 없었는데요. 오늘 장애가 발생하면서 문제를 인식하게 되었습니다. jsoup을 통해 여러가지 작업을 수행중인데요. 그중에 html에서 text를 추출하는 게 있습니다. html 파일이 정상이 아닌 경우 text 추출할 때 HANG 이 걸립니다. ( 예외도 발생하지 않고 HANG 이 걸립니다... @.@) rabbitmq 에서 ack 를 받아야 이후 큐 처리를 하는 경우 해당큐가 HANG이 걸립니다. 놀랍게도 어드민 화면에서 제어가 저같은 경우 불가능했습니다. 그래서 HANG이 걸린 듯 보이는 큐는 삭제하고 재생성했습니다. 이후 처리하지 못한 데이터는 재처리해서 겨우 복구했습니다. 1.1..

개발환경 2019.10.29

spring boot rabbitmq 장애..

rabbitmq 설정은 아래와 같습니다. spring.rabbitmq.listener.simple.concurrency=4 spring.rabbitmq.listener.simple.max-concurrency=8 spring.rabbitmq.listener.simple.retry.initial-interval=5000 spring boot 설정중에 아래와 같은 설정이 문제 였습니다. #spring.task.scheduling.pool.size=8 #spring.task.scheduling.thread-name-prefix=news springboot의 task thread pool 사이즈를 아래처럼 설정하여 문제 해결하였습니다 @Bean public TaskExecutor taskExecutor() { ..

개발환경 2019.10.23

java HttpClient 사용시에 Not in GZIP format 에러 발생할 때...

약간 황당한 순간입니다. response 헤더에 아래와 같이 설정이 되어 있습니다. Content-Encoding: gzip HttpClient는 당연히 해당 컨텐츠를 GZIPInputStream 으로 처리하려고 하는데.. 알고 보니 GZIP 형식이 아니어서 결국 에러를 냅니다. 해당 컨텐츠는 일반 텍스트 문서 입니다. 이럴 때는 아래 처럼 HttpClient를 생성하면 됩니다. CloseableHttpClient httpclient = HttpClients.custom().disableContentCompression().build() 참고로 대개 아래 처럼 생성합니다. CloseableHttpClient httpclient = HttpClients.createDefault()

개발환경 2019.10.16

java로 바이너리 파일 안정적으로 다운로드 받기

최근에 모사이트에서 pdf 파일을 다운로드 받아야 할 업무가 있었습니다. 가장 쉬운 방법은 org.apache.commons.io.FileUtils.copyURLToFile 을 이용하는 것입니다. 그런데 살펴보니 몇몇 pdf 파일은 다운은 받았지만 pdfview로 볼 수가 없었습니다. 다운받다가 중간에 끊긴 듯 싶습니다. 제가 자주 사용하는 방법은 httpcomponents-client-4.5.x 의 HttpClient 를 사용하는 것인데... 이것도 위의 방법보다 안정적이지만 몇몇 파일들에 문제가 있었습니다. 최종적으로 OkHttp 를 사용하여 가장 안정적으로 바이너리 파일을 다운받을 수 있었습니다. public static void downloadOkHttp(String url, File dstFil..

개발환경 2019.10.11

스프링 시큐리티 _ 로그인후에 이전 요청 페이지로 이동하기...

검색을 해 보면 대부분 REFERER 를 이용하여 처리하게 했는데 뭔가 적절하지 않은 솔류션이 아닌가 싶다. 대개 처음 페이지가 띄어져 있는 상태에서 임의의 메뉴를 선택할 때 로그인이 되어 있지 않으면 로그인 페이지로 이동하게 된다. 로그인이 성공하면 그 임의의 메뉴로 이동을 해야 하는데.. REFERER를 이용하여 처음 페이지로 이동하게 된다. 스프링 시큐리티를 사용하고 있다고 하면 spring-security.xml 에 아래처럼 처리한다. org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler 를 참고하여 CustomAuthenticationSuccessHandler 을 구현하면 된다. R..

개발환경 2019.09.23