WebMvcTest to PlantUML (1)

26 July 2020

이번은 MockMvc 필터와 Mockito의 mock을 이용하여, WebMvcTest를 parsing하여 PlantUML을 생성하는 예제를 진행해보도록 하겠습니다. 먼저 아래와 같이 필터를 선언해주도록 합니다.

read more

WebMvcTest to PlantUML (2)

26 July 2020

이번은 저장된 ApiModel 객체를 이용하여 PlantUML document를 생성하는 예제를 진행해보도록 하겠습니다. 기존에 만들어진 umlGenerator 파일에 아래와 같이 method를 생성해주도록 합니다.

read more

WebMvcTest to Swagger Yaml (2)

25 July 2020

이번은 MockMvc 필터를 통해 Test Case의 request와 response를 parsing하는 방법을 알아보도록 합니다. 아래와 같이 필터를 선언해주도록 합니다.

read more

WebMvcTest to Swagger Yaml (1)

19 July 2020

spring boot에서 @WebMvcTest를 실행하면서 Swagger Yaml 파일을 자동 생성해주는 예제를 공유하도록 하겠습니다. 실제 소스코드를 보면서 동작 방식을 설명하도록 하겠습니다.

read more

artemis와 kafka로 2차 queue 설계

29 December 2019

activemq artemis와 kafka를 이용해 local queue와 remote queue를 동시에 쓰는 예제를 진행해보도록 하겠습니다. artemis [https://shashaka.github.io/springboot/2019/12/22/SPRING-ARTEMIS-AUTO-CONFIG.html]와 kafka [ https://shashaka.github.io/springboot/2019/12/28/SPRING-KAFKA.html ] 설정 참고 부탁드립니다. 컨셉은 아래와 같습니다. 1. request가 들어오면 서버 내 activemq로 enqueue 2. activemq에서 다시 외부 kafka로 enqueue 3. kafka에서 서버 activemq consumer가 dequeue 4. activemq consumer가 마지막 처리 해당 logic에서 kafka가 healthy 상황이 아닐 경우, 처리하는 logic을 추가해보도록 하겠습니다.

read more

spring kafka

28 December 2019

spring boot에서 kafka 설정을 하는 방법을 알아보도록 하겠습니다. 먼저 아래와 같이 config 설정을 해줍니다. - application.yml

read more

spring webclient log

27 December 2019

spring boot webclient에서 request와 response를 logging하는 방법을 알아보도록 하겠습니다. 먼저 아래와 같이 logSupport가 가능하게 webClient를 설정해주도록 합니다.

read more

spring artemis auto configuration

22 December 2019

spring boot에서 autoConfiguration을 이용해 activemq artemis를 설정하는 방법을 알아보도록 하겠습니다. 먼저 아래와 같이 dependency를 추가해주도록 합니다.

read more

spring artemis config

22 December 2019

spring boot에서 activemq artemis를 설정하는 방법을 알아보도록 하겠습니다. ArtemisAutoConfiguration이 설정되어 있으면, application의 설정에 상관없이 artemis가 enable되므로 아래와 같이 autoconfiguration을 꺼주도록 합니다.

read more

spring jms tracing

21 December 2019

Spring Cloud Sleuth를 활용하여 jms를 tracing하는 예제를 알아보도록 하겠습니다. jms 설정과 spring cloud sleuth 설정까지 포함하면 길어지므로, jms 설정과 spring cloud sleuth 설정은 다른 예제를 참고 바랍니다. jms와 spring cloud sleuth를 설정한 이후, 아래와 같이 producer와 consumer를 설정해주도록 합니다.

read more

spring cloud sleuth custom trace id

17 December 2019

Spring Cloud Sleuth를 활용하여 log correlation id를 생성하는 예제를 진행해보도록 하겠습니다. 추가로, MDC와 비교하여 reactive 환경에서 tracing id 추적이 가능한지 여부도 함께 살펴보도록 합니다. 먼저 아래와 같이 restController를 만들어 API가 호출되면 해당 값에서 path를 받아오고, 다시 httpbin.org로 쏜 다음, 해당 response에서 url을 parsing하여 response로 돌려주는 API를 만들어줍니다. 각각의 실행은 하나의 스레드에서 실행되는 것으로 보장되지 않으므로, log상에서 어떤 thread에서 실행되는지도 같이 기록하도록 설정합니다. sleuth에서 traceId, spanId 이외에 custom한 값을 넘겨주기 위해, tracing 역시 새롭게 Bean으로 설정해줍니다. 설정을 통해, log-correlation-id 값이 넘어오게 되면 tracing을 따라 함께 field값이 전달되게 됩니다.

read more

spring data r2dbc

15 December 2019

spring data r2dbc를 이용해 mysql을 연동하는 예제를 진행해보도록 하겠습니다.

read more

spring data redis config

14 December 2019

spring-data-redis 를 설정해보도록 하겠습니다. 먼저 아래와 같이 dependency를 추가해주도록 합니다.

read more

spring boot ratelimit

14 December 2019

spring interceptor를 이용해 간단한 ratelimiter를 작성해보도록 하겠습니다.

read more

spring webclient circuit breaker

14 December 2019

spring webclient를 이용해 간단한 circuit breaker를 만들어보도록 하겠습니다.

read more

spring boot jms

10 December 2019

spring jms를 이용해 local에서 비동기 처리를 진행해보도록 하겠습니다. 먼저 아래와 같이 gradle을 통해 dependency를 정의해줍니다.

read more

spring netflix zuul routing

08 December 2019

spring-cloud-starter-netflix-zuul을 활용하여, routing을 하는 방법을 알아보도록 하겠습니다. 먼저 아래와 같이 gradle을 통해 dependency를 정의해줍니다.

read more

spring request body caching

23 November 2019

ContentCachingRequestWrapper와 ContentCachingResponseWrapper를 사용해서 request body와 response body를 여러번 접근해 log에 남겨보도록 하겠습니다. 먼저 아래와 같이 requestfilter를 정의해줍니다.

read more

Spring Gradle Dockerfile 설정

22 September 2019

springboot를 사용하는 application에서 Dockerfile을 설정하는 방법입니다. - Dockerfile FROM openjdk:8-jdk-alpine as build WORKDIR /workspace/app

read more

Spring bootJar 설정

21 September 2019

SpringBoot에서 gradle plugin을 이용해 executable jar를 만드는 설정입니다. - build.gradle plugins { id 'java' id 'org.springframework.boot' version '2.1.8.RELEASE' }

read more

Spring integration test

13 March 2018

spring boot starter test 라이브러리를 통해, integration test를 진행하는 법을 알아보도록 하겠습니다. 보통 controller, service, repository 등의 layer에 대한 테스트를 진행할 수 있는데, 때때로는 전체 workflow 테스트를 위해서 integration test를 진행해야 하는 경우가 생깁니다. 그러한 경우에, random port를 통해 spring test를 진행할 수 있습니다. 예를 들어, 3rd party 서버나 외부 캐쉬, 데이타베이스 등을 사용할 때 이러한 모듈은 junit에 의해 mock으로 선언됩니다. 하지만, 3rd party 서버의 응답이나 외부 캐시의 실제 값, 데이터베이스가 변경되었을 경우 전체 서비스의 정상 동작 역시 보장이 되어야 합니다. 그러한 경우에 대한 테스트를 위해 integration test를 진행하게 됩니다. spring-boot-starter-test 라이브러리는 이미 다양한 기능을 제공하기 때문에, 간단히 annotation 선언을...

read more

RestTemplate logging

13 March 2018

Spring의 restTemplate에 interceptor를 추가하여, 내가 호출한 rest call의 request와 response를 로그로 남길 수 있습니다. 가장 먼저, 아래와 같이 configuration을 추가하여 기존에 사용되는 restTemplate에 interceptor를 추가해줍니다. ClientHttpRequestInterceptor를 이용하여, restTemplate의 메서드가 실행된 이후에 해당 request와 response를 logging하도록 합니다.

read more

Spring Async 설정

13 March 2018

Spring에서 method를 Async로 실행시키기 위해서, SpringTaskExecutor 설정을 이용할 수 있습니다. 아래와 같이 간단히 bean으로 taskExecutor를 설정하고, @EnableAsync를 설정하면 간단히 async executor 설정이 이루어집니다.

read more

Spring Swagger 설정

13 March 2018

API backEnd server에서 만든 API를 문서화 시켜주는 Swagger를 설정해보도록 합니다. 다양한 Swagger의 integration tool이 있는데, 이번 예제에서는 spring fox를 사용해보도록 하겠습니다. 기본적으로 springfox에서는 서버에 설정되어 있는 controller의 request와 response를 파싱하고, 해당 모델들을 json 형식으로 만들어 GET /v2/api-docs 를 호출하게 되면 응답으로 내려주게 됩니다. 이에 더해 spring fox에서는 swagger-ui 역시 내장시킬 수 있습니다. swagger-ui는 GET /v2/api-docs API를 통해 받은 응답을 사용자가 보기 편한 웹사이트 형식으로 변경해주는 역할을 합니다. 먼저 아래와 같이 EnableSwagger2 어노테이션을 설정함으로써 해당 /v2/api-docs를 enable 시킬 수 있습니다.

read more

Async Method 테스트

28 February 2018

Spring에서 junit 테스트를 작성할 때, async method를 테스트하는 경우에 어려움을 가지게 됩니다. 이 장에서는 test 실행 시, async task executor를 sync task executor로 변환해서 테스트하는 방법을 소개합니다.

read more

Propagation REQUIRES_NEW

08 October 2017

현재 spring에서 선언할 수 있는 transaction의 격리 수준을 테스트 해보도록 하겠습니다. 가장 먼저 아래와 같이 person이라는 table에 접근하는 서비스 [PersonService]를 선언하도록 합니다. 해당 서비스에서는 PersonNewService 라는 서비스를 접근하게 되고, 해당 서비스는 transaction이 격리 수준을 변화시켜 어떻게 commit, rollback 등이 진행되는지 알아보도록 하겠습니다.

read more

Spring Data Cassandra

20 September 2017

spring data cassandra 라이브러리를 통해서, 간단히 spring에서 cassandra를 사용할 수 있습니다. 가장 먼저, application.yml 파일에 사용하게 될 cassandra에 대한 접속 정보를 설정해줍니다.

read more

Spring Redis Setting

12 August 2017

redis를 캐시 메모리를 사용하기 위해서 사용할 수 있는 다양한 java client가 있지만, 그 중에서 lettuce를 사용해보도록 하겠습니다. 가장 먼저, 우리의 프로젝트에 아래와 같이 lettuce를 dependency로 추가해줍니다.

read more

Spring Cloud Slueth 설정

29 June 2017

스프링 클라우드 슬루스를 통해서, 마이크로 서비스 아키텍쳐 상에서 request를 추적할 수 있습니다. 해당 dependency 설정을 통해, slueth 는 각각의 request마다 traceId, spanId를 발행합니다. 해당 값을 통해 사용자로부터 들어온 Request가 MSA에서 어떤 모듈을 통해 전송되고 응답되었는지 추적할 수 있습니다.

read more

Spring Cloud Config Server

13 June 2017

spring cloud config를 통해, 서버의 설정을 하나의 서버로 집중화시킬 수 있습니다. 해당 서버를 통해, properties를 하나의 서버로 모으고 config client 서버가 시작할 때 해당 서버로부터 property 값을 읽어와 적용하게 됩니다. 가장 먼저, 해당 properties 값을 제공하는 config server를 셋팅해보도록 하겠습니다. 아래와 같이 @EnableConfigServer 와 @SpringBootApplication 를 설정함으로써 해당 서버가 cloud config server로 사용되는 것으로 선언합니다.

read more

Spring Cloud Ribbon

04 June 2017

Spring cloud ribbon을 통해서, 클라이언트 단에서 로드밸런싱이 가능합니다. 가장 먼저, eureka server를 세팅하고, 그 후 eureka client를 통해 실제 rest call을 받을 서버를 셋팅하도록 합니다. 해당 준비를 통해서, eureka server에는 eureka server 자신의 서버와 eureka client라는 두개의 서버가 등록되게 됩니다.

read more

Spring Data JPA Test

30 May 2017

스프링 부트를 활용하여, 실제 서버에서 만든 jpa junit test를 작성할 수 있습니다. 스프링 부트에서는 이 기능을 너무나도 간단하게 만들어놓아서, 전혀 부담없이 아래 예제를 따라하시면 가능합니다. jpa junit test를 위해서는 아래와 같이 @DataJpaTest 를 선언하고, spring boot에서 제공하는 TestEntityManager를 사용하여, test data를 생성할 수 있습니다. 그 후, 실제 개발자가 만든 method를 실행시켜 기대하는 값이 나오는지 확인하는 과정을 거치면 됩니다.

read more

Spring logback valve

29 May 2017

embedded tomcat을 사용하는 spring boot에서 request가 들어온 경우, 해당 request와 response를 log로 남기기 위해서 아래와 같이 logback-access 설정을 통해 logback valve를 설정할 수 있습니다. 가장 먼저 resources 폴더에 아래와 같이 어떠한 형식으로 log를 남길 것인지에 대해서, 아래와 같이 xml 파일로 설정하도록 합니다.

read more