반응형

Java 10

[Spring] spring-boot 2.1(SpringFramework 5.1)에서 없어진 기능, JSONP 간단하게 구현하기

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..

IT/PROGRAMMING 2019.06.09

[Spring] spring-vault에서 @VaultPropertySource 여러개 사용하면 안되는 이유

스프링 기반의 어플리케이션을 개발할 때, 환경설정으로 보안정보를 다루기 위하여 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..

IT/PROGRAMMING 2019.04.19

[Java] Gson, Jackson(ObjectMapper)으로 JSON 문자열 출력할 때, pretty printing하는 방법

자바에서 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..

IT/PROGRAMMING 2019.04.08

[Spring] Hibernate에서 "Could not build ClassFile" 발생하는 오류 해결

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..

IT/PROGRAMMING 2019.03.10

[Java] 일정시간이 지나면 값이 없어지는(expiring) 맵, 캐시로 사용가능한 ExpiringMap

자바 프로그래밍을 하다보면 콜렉션(collection) 중에 맵(Map)을 많이 사용하게 된다.동시성(synchronization) 처리를 위하여 자바는 기본적으로 thread-safe한 java.util.concurrent.ConcurrentMap 객체를 제공한다. 또는 java.util.Collections.synchronizedMap()을 이용해도 된다.그리고 복합키를 이용할 수 있도록 Apache에서 MultiKeyMap 객체도 제공한다.Map에 키와 값을 계속해서 put하게되면 key만 중복되지 않으면 자꾸자꾸 들어가게 된다. 그 개수야 상당하게 크지만 그만큼 메모리 사용량은 늘어나게 된다. 필자도 spring-integration에서 이러한 현상을 발견하게 되었고 이를 해결하기 위하여, 일정시..

IT/PROGRAMMING 2019.02.24

[Java] Iterable을 stream으로 처리하기

자바에서 Iterable 인터페이스를 구현한 객체를 스트림으로 처리하는 간단한 방법이 있다.StreamSupport 클래스를 사용하면 되며, 자바에 기본으로 포함되어 있다.아래 소스와 같이 Iterable에서 Spliterator를 얻어서 stream 처리하면 된다. Iterable iterable = new LinkedList(); Spliterator spliterator = iterable.spliterator(); StreamSupport.stream(spliterator, false) .forEach(data -> { }); StreamSupport.stream()의 두번째 파라미터를 true로 주면 parallel(병렬) 스트림 처리도 가능하다.

IT/PROGRAMMING 2019.02.20

[Java] 클래스에 정의된 제너릭(generic) 타입의 Class를 얻는 방법

자바에서 클래스를 정의할 때, 제너릭(generic) 타입을 종종 사용하게 된다.코딩을 하다보면 이 generic 타입이 어떤 클래스인지 알아야할 때가 있다.방법은 자바 리플렉션을 이용하면 된다. 아래와 같이 ClassUtil 클래스에 2개 메서드를 작성하였다.getGenericTypsClasses() 메서드는 generic 타입을 얻기위한 핵심 코드이며, 복수개로 정의된 generic 타입을 위하여 리스트로 반환한다.getGenericTypsClass() 메서드는 원하는 위치(index)의 generic 타입을 얻기위하여 작성하였다. public class ClassUtil { /** * 클래스에 정의된 generic 타입의 Class를 얻는다. * @param clazz 클래스 * @return Ge..

IT/PROGRAMMING 2019.02.12

[Spring] @RequestMapping의 wildcard 패턴 **의 값을 배열로 얻기

스프링 프레임워크를 이용하여 컨트롤러에 패턴을 등록하면 다양한 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/** 처럼 여러개의 경로를 지원할 필요가 있는데, 단..

IT/PROGRAMMING 2019.02.09

[Java] IP주소가 loopback(127.0.0.1)인지 확인하는 방법

자바에서 입력한 IP주소가 loopback(127.0.0.1)인지 확인한다. /** * Loopback 네트워크 여부를 확인한다. * @param ipAddr IP 주소 * @return Loopback 네트워크 여부 * @throws UnknownHostException 입력한 IP주소가 잘못되었음 */ public static boolean isLoopbackAddress(String ipAddr) throws UnknownHostException { InetAddress inetAddress = InetAddress.getByName(ipAddr); return inetAddress.isLoopbackAddress(); }

IT/PROGRAMMING 2019.02.08

[Java] IP주소가 사설(private) 네트워크인지 확인하는 방법

자바에서 입력한 IP 주소가 사설(private) 네트워크인지 확인한다./** * 사설 네트워크 여부를 확인한다. * * @param ipAddr IP 주소 * @return 사설 네트워크 여부 * @throws UnknownHostException 입력한 IP주소가 잘못되었음 */ public static boolean isPrivateNetwork(String ipAddr) throws UnknownHostException { InetAddress inetAddress = InetAddress.getByName(ipAddr); return inetAddress.isSiteLocalAddress(); }

IT/PROGRAMMING 2019.02.08
반응형