기록해야 기억한다/Spring
-
Jackson - 다형성 유형의 serialize, deserialize 사용하기기록해야 기억한다/Spring 2021. 10. 26. 14:06
spring 에서 기본적으로 json 을 직렬화, 역직렬화하는데 사용하는 jackson 을 사용할때 interface 나 abstract class 를 상속받는 클래스들의 역직렬화하는 방법을 정리합니다. // 역직렬화 대상인 인터페이스 @JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT, property = "type") @JsonSubTypes(value = { @JsonSubTypes.Type(value = BlockA.class, name = "a"), @JsonSubTypes.Type(value = BlockB.class, name = "b") }) public interface IBlock { } ..
-
@DataJpaTest 할 때의 주의 사항기록해야 기억한다/Spring 2021. 2. 2. 23:30
저는 테스트할때 보통 test/resources 에 application-test.yml 을 따로 설정해두고 테스트를 진행합니다. 그런데 아래와 같은 상황이 생겨서 한참 고민했는데 역시나 사람이 문제였습니다. @DataJpaTest 인데 Unable to start ServletWebServerApplicationContext....가 뜬다! 분명히 JPA 테스트를 위해 @DataJpaTest 를 수행하는데 자꾸 servlet 관련 에러가 발생했고.... 왜 그러지? 뭔가 잘못됐나? 라고 하면서 test 리소스를 계속 찾았지만 이유를 찾지 못하여 급기야..아래처럼 처리하고 테스트를 진행했습니다. @DataJpaTest(properties = "spring.main.web-application-type=n..
-
Spring REST 에서의 Global Exception기록해야 기억한다/Spring 2021. 1. 11. 12:26
spring-mvc 에서의 global exception 에 대해 메모해놓으려합니다. 언제나 그랬듯이 spring ref. 문서를 찾는게 가장 좋으니 간략하게 정리하는 수준이 될 것입니다. Spring 3.2 이전에는 Spring MVC application 에서 예외를 처리하는 두 가지 주요 접근 방식이 있었습니다. 하나는 HandlerExceptionResolver, 또 하나는 @ExceptionHandler annotation 이였습니다. 둘다 분명한 단점이 있습니다. spring-boot 에서는 WebMvcRegistrations Bean 을 선언하고 이를 재정의하여 custom instance 로 제공하는 방법으로 사용할 수 있습니다. 이에 3.2부터 이전 두 솔루션의 한계를 해결하고 전체 애플..
-
Spring Cloud OpenFeign, 그리고 SSL기록해야 기억한다/Spring 2020. 12. 29. 00:05
OpenFeign (github.com/OpenFeign/feign) Feign 은 선언적 Web Service Client 인 오픈소스이다. 이를 이용해 우리가 Spring 에서 Service 를 DI 를 통해 호출하여 사용하는 것처럼 웹서비스 Client 를 사용할 수 있게 도와준다. Feign 은 Interface 를 만들고 annotation 을 추가하는것으로 쉽게 사용할 수 있고, encoder, decoder 를 플러그형으로 지원한다. Spring Cloud OpenFeign Spring Cloud는 Spring MVC annotation 및 Spring Web에서 기본적으로 사용되는 동일한 HttpMessageConverters를 사용하기위한 지원을 추가하고 Eureka, Spring Clo..
-
스케줄러에 property 주입하기기록해야 기억한다/Spring 2020. 12. 17. 15:31
1. scheduling + property spring 에서 간단하게 주기적인 작업을 처리하기 위해 scheduling 패키지를 이용하게 되는데, 이 때 변수값에 따라 주기정보를 변경적용하기 위한 방법이다. 아래는 spring 의 여느 value 주입처럼 "${}" 을 이용하여 주입을 하고 @Scheduled(cron = "${my.custom.cron}") public void sampleJob() { logger.info("========= 진행합니다. ========="); } 아래는 월요일~금요일까지 매시간 0 분 0초에 돌아가도록 설정한 application 속성 파일의 내용이다. (yml 의 경우 따옴표를 붙여야하는데 문자열에 띄어쓰기가 있을 경우 안되는 경우가 있었던 것같다...기억이.....
-
Spring Boot 의 properties기록해야 기억한다/Spring 2020. 11. 16. 13:02
개요 properties 는 기본이면서도 설정에 가장 많이 사용하게 되는 요소입니다. 기본적으로는 .properies, .yml 등을 통해 설정할 수 있는데 관련 방법들도 많고 어떻게 써야 효과적인지도 명확하지 않습니다. 가장 많이 이용하게 되고 실제 유용한 방법들을 정리합니다. 외부화 구성(Externalized Configuration) Spring Boot 는 다른 환경에서 동일한 코드로 작업할 수 있도록 구성을 외부화 할 수 있습니다. 환경 변수, command-line arguments, 별도의 외부 파일 등을 이용할 수 있는데, 이 때 properties 의 효과가 발휘됩니다. YAML 파일, properties 파일들을 통해 지정된 속성 값은 @Value 주석을 사용하여 Bean 에 직접 주..
-
spring boot - 전체 초기화 코드를 넣어보자기록해야 기억한다/Spring 2020. 11. 14. 22:10
spring boot 에서는 몇가지 초기화 방법이 있다. 사용하는 사람마다 선호하는 방법이 있을테니 그것대로 사용하면 되지만 각 방법의 목적과 사용방법에 대해 정리한다. CommandLineRunner 인터페이스 사용 @FunctionalInterface public interface CommandLineRunner { void run(String... args) throws Exception; } 1.0.0 버전부터 정의된 것처럼 @FunctionalInterface 이며 해당 인터페이스를 통해 선언된 Bean 이 SpringApplication 내에 포함이 될 때 실행되어야 함을 나타내는데 사용되는 인터페이스이다. 여러 Bean 을 동일한 ApplicationContext 내에서 정의 할 수 있으며 ..
-
Spring Boot 분석(구동 원리)기록해야 기억한다/Spring 2020. 11. 14. 00:51
Spring Application 실행 아래의 모든 설명은 spring-boot 2.3.5 기준으로 설명합니다. 얼마전(2020/11월기준) GA 된 2.4 는 변경사항이 있습니다. 아래의 코드를 실행하면 Spring Application 이 수행된다. 나머지 정보들은 전혀 노출되지 않는데 어떻게 그 많은 정보들을 처리하게 되는지에 대한 내용을 정리한 글이다. package com.example; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SampleApplication ..