안녕하세요, 하마연구소입니다.요즘 개인 프로젝트를 시작했으며 HTML 파싱이 필요하였습니다.고민하지도 않고 jsoup을 사용하고 있습니다.역시 부족한거 없이 잘 사용하고 있습니다.https://jsoup.org/ jsoup: Java HTML parser, built for HTML editing, cleaning, scraping, and XSS safetyjsoup: Java HTML Parser jsoup is a Java library that simplifies working with real-world HTML and XML. It offers an easy-to-use API for URL fetching, data parsing, extraction, and manipulation usin..
JSONP 처리를 기본 기능으로 제공하였지만, 스프링부트 2.1(스프링프레임워크 5.1)부터 없어졌다. 이미 Deprecated 처리되어 언제가는 없어질 것을 예상했지만, 담당하고 있는 시스템에서는 아직 JSONP가 필요하였다. 없어진 AbstractJsonpResponseBodyAdvice.java 소스: https://github.com/spring-projects/spring-framework/blob/5.0.x/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/AbstractJsonpResponseBodyAdvice.java spring-projects/spring-framework Spring Fra..
스프링 기반의 어플리케이션을 개발할 때, 환경설정으로 보안정보를 다루기 위하여 Vault를 이용하게 된다. 일반적으로 가장 간단하게 Vault를 이용하는 방법은 @VaultPropertySource 또는 @VaultPropertySources 어노테이션을 사용하는 것이다. import org.springframework.context.annotation.Configuration; import org.springframework.vault.annotation.VaultPropertySource; @Configuration @VaultPropertySource(value = { "secret/hippolab/wallet1", "secret/hippolab/wallet2", "secret/hippolab/wa..
자바에서 JSON 파싱 및 변환을 위하여 많이 사용하는 Gson과 Jackson(ObjectMapper)에서 JSON 문자열을 출력할 때, 이쁘게 출력(pretty printing)하는 간단한 방법을 소개한다. Gson MyObject myObject = new MyObject(); Gson gson = new GsonBuilder() .setPrettyPrinting() .create(); String jsonString = gson.toJson(myObject); Jackson(ObjectMapper) MyObject myObject = new MyObject(); ObjectMapper objectMapper = new ObjectMapper(); String jsonString = objectMa..
spring-boot 버전 1.4.2에서 현재 1.X 버전 최고인 1.5.19로 업데이트하였다. 한 프로젝트에 Maven 모듈로 여러 어플리케이션이 존재하는 구성이다. 2개 어플리케이션만 제외하고 나머지 어플리케이션은 잘 수행된다. 이 2개 어플리케이션에서는 처음 로딩 중 아래와 같은 예외가 발생한다. 더 특이한 것은 IDE에서 바로 실행시키면(로컬환경) 잘 된다. 서버환경에서만 안된다. 환장하겠다.Exception in thread "main" java.lang.ExceptionInInitializerErrorat com.hippolab.MyTopologyRunner.getApplicationContext(MyTopologyRunner.java:39)at com.hippolab.AbstractTopol..
자바 프로그래밍을 하다보면 콜렉션(collection) 중에 맵(Map)을 많이 사용하게 된다.동시성(synchronization) 처리를 위하여 자바는 기본적으로 thread-safe한 java.util.concurrent.ConcurrentMap 객체를 제공한다. 또는 java.util.Collections.synchronizedMap()을 이용해도 된다.그리고 복합키를 이용할 수 있도록 Apache에서 MultiKeyMap 객체도 제공한다.Map에 키와 값을 계속해서 put하게되면 key만 중복되지 않으면 자꾸자꾸 들어가게 된다. 그 개수야 상당하게 크지만 그만큼 메모리 사용량은 늘어나게 된다. 필자도 spring-integration에서 이러한 현상을 발견하게 되었고 이를 해결하기 위하여, 일정시..
자바에서 Iterable 인터페이스를 구현한 객체를 스트림으로 처리하는 간단한 방법이 있다.StreamSupport 클래스를 사용하면 되며, 자바에 기본으로 포함되어 있다.아래 소스와 같이 Iterable에서 Spliterator를 얻어서 stream 처리하면 된다. Iterable iterable = new LinkedList(); Spliterator spliterator = iterable.spliterator(); StreamSupport.stream(spliterator, false) .forEach(data -> { }); StreamSupport.stream()의 두번째 파라미터를 true로 주면 parallel(병렬) 스트림 처리도 가능하다.
스프링 프레임워크를 이용하여 컨트롤러에 패턴을 등록하면 다양한 URI로 매핑시킬 수 있다.이때 와일드카드(wildcard)를 자주 사용하게 되는데 기본적으로 ?, *, ** 가 있다.아래는 스프링 문서 설명이다. ※ 출처: Spring Web MVC - Web on Servlet Stack (https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html) 또한, {XXXXX}과 @PathVariable 어노테이션을 이용하여 URI의 특정부분을 변수에 할당할 수도 있다. 그리고 정규표현식(regular expression)도 지원한다. 가끔 매핑 패턴을 /path1/path2/** 처럼 여러개의 경로를 지원할 필요가 있는데, 단..