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..
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..
스프링에서 @KafkaListener 어노테이션을 사용해서 간단하게 카프카 토픽을 바로보는 consumer를 작성하려면 spring-kafka 라이브러리가 필요하다. spring-boot를 적용한 환경에서 Maven pom.xml에 아래와 같이 dependency를 걸어주면 된다. org.springframework.kafka spring-kafka그런데 라이브러리가 추가가 안되서 확인해보니, spring-boot 1.5.X 이후부터 spring-kafka를 사용할 수 있었다. 직접 필요한 라이브러리들을 모두 추가하는 방법으로 spring-boot 1.4.X에서도 사용할 수 있는 것으로 보이지만, 그러고 싶지는 않았다. 어쩔수 없이 그냥 스프링부트 버전을 올렸다. 현재 최신버전인 spring-boot 2..
최신 spring-boot 릴리즈 버전은 2.1.3 이다. 특별한 사유가 없는한 새로운 프로젝트를 시작한다면 이 버전으로 셋팅할 것이다. 하지만 2~3년전에 만들어진 프로젝트는 spring-boot 버전 1.X를 사용했을 것이다.필자도 수년전에 개발하고 운영중인 시스템은 spring-boot 1.4.X가 적용되어 있으며, spring-data의 JPA로 DB에서 Pageable을 이용한 페이징과 정렬 처리를 하는 기능이 많다. 이 기능의 반환타입은 Page이며 실제 구현체는 PageImpl로 되어있다. 이 Page 객체를 @RestController의 응답값으로 곧바로 넘기고, ObjectMapper(Jackson)를 통하여 JSON 문자열로 변환된다.최근 spring-boot 1.4.X를 2.X로 버전..
스프링으로 웹어플리케이션을 작성하면 기본적인 오류화면은 아래와 같이 "Whitelabel Error Page"가 보일것이다. 이 오류화면을 없애고 싶다면 아래와 같이 application.properties 파일에 설정을 추가하면 된다. server.error.whitelabel.enabled=false 위 설정은 ErrorProperties.Whitelabel로 바인딩되는데, 기본값은 true 이다.package org.springframework.boot.autoconfigure.web; . . . public class ErrorProperties { ... public static class Whitelabel { /** * Whether to enable the default error page..
스프링 프레임워크를 이용하여 컨트롤러에 패턴을 등록하면 다양한 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/** 처럼 여러개의 경로를 지원할 필요가 있는데, 단..