안녕하세요. Kevin 입니다.

Spring Boot 2.6 릴리즈가 되었습니다.

Circular References Prohibited by Default
순환참조 방지 property가 생겼으며 기본 true 입니다. 순환참조를 허용하고 싶을 경우 spring.main.allow-circular-references 를 변경하여 허용 할 수 있습니다.

PathPattern Based Path Matching Strategy for Spring MVC
Spring MVC 핸들러 매핑에 대해 요청 경로를 일치시키는 기본 전략이 AntPathMatcher에서 PathPatternParser로…

안녕하세요. Kevin 입니다.

새로운 LTS 버전인 Java17이 GA 되고 Adoptium (구 AdoptOpenJDK)에서 17버전이 나왔습니다. sdkman을 사용하는 경우는 Vendor Temurin 으로 확인 할 수 있습니다.

Java17을 기다리면 꾸준히 버전업을 해왔기에 바로 적용을 시도 했습니다 …

안녕하세요. Kevin 입니다.

스프링 Webflux를 통해 리액티브 기반의 비동기 / 논블록킹 서비스를 개발할 수 있습니다. 점점 많은 곳에서 Webflux를 도입하고 있는데요. 동일한 Rest API를 MVC와 Webflux를 비교했을 때 Webflux의 처리량이 약 3배 정도 좋았습니다. 단일 건에 대한 응 …

안녕하세요. Kevin 입니다.

스프링 WebClinet 사용 시 WebClint에 대한 로그가 예쁘게 나오지 않았었는데요. reactor 1.0.0 부터 AdvancedByteBufFormat.TEXTUAL 가 제공 되어 조금 더 plan text로 로그를 확인 할 수 있습니다. AdvancedByteBufFormat에는 SIMPLE, HEX_DUMP, TEXTUAL 3가지 타입을 ENUM으로 제공하고 있습니다.

그럼 WebClient 설정 시 AdvancedByteBufFormat.TEXTUAL 적용 하는 방법과 Proxy를 적용하는 방법 두가지로 작성해 보았습니다. WebClient는 JVM에 설정한 Proxy Properties를 이용하지 않기 때문에 Proxy가 필요한 경우 WebClient에 직접 설정 해주어야 합니다.

wiretap에 첫번째 파라미터 category가 logger가 표시 해주는 category가 됩니다.

참고 : https://projectreactor.io/docs/netty/release/api/reactor/netty/transport/Transport.html#wiretap-java.lang.String-io.netty.handler.logging.LogLevel-reactor.netty.transport.logging.AdvancedByteBufFormat-

안녕하세요. kevin 입니다.

스프링부트 2.2.0 부터 지원하고 있는 ConstructorBinding 을 이용하여 불변 properties를 생성하고 생성 시 validation을 통해 보다 안전한 방법으로 사용하는 방법을 추천 드립니다.

properties에 값을 주입하는 방법은 여러 방법이 있으나 Con …

springboot2 의 logging 라이브러리를 log4j2로 변경하고 log를 slack으로 보내는 예제 입니다.

spring은 기본 logging으로 logback을 사용하고 있습니다. log4j2는 예전 log4j의 단점을 보완하고 logback의 장점을 더욱 발전시켜 나온 것으로 알고 있습니다.

Logging Library Performance Comparison

출처 : https://logging.apache.org/log4j/2.x/images/async-throughput-comparison.png

그래서 프로젝트의 logging 라이브러리를 log4j2로 변경하기로 했습니다.

1. 먼저 gradle 설정을 변경해야 합니다. 기존 spring-boot-starter-logging 라이브러리를 제외 시키고 spring-boot-starter-log4j2를 추가 합니다.

2. 프로퍼티에 log 설정파일의 위치를 설정값으로 입력합니다. 기본 위치에 등록하여 자동으로 처리하여도 되지만 profile 별로 설정을 하려면 logging.config 를 설정해주어야 합니다.

logging:
config: classpath:log4j2/log4j2-${spring.profiles.active}.xml

3. 기존에 개발 서버에는 logback slack appender를 통해 warn level 이상의 log를 slack에서 바로 확인 할 수 있도록 하고 있었습니다. 그래서 다른 오픈소스를 참고하여 deprecated 된 것과 불필요한 것들의 제거하고 log4j2 용 appender를 만들었습니다.

관련 소스는 github : https://github.com/underbell/springboot-log4j2-slack에서 확인 하 실 수 있습니다.

감사합니다.

참고 자료

이미지 리사이징 라이브러리가 많은 성능 개선이 되면서 원본 이미지를 미리 리사이징해두지 않고 요청 시 리사이징해서 처리하는 방식이 비용적인 부분이나 리소스 사용 부분에서 좀 더 나은 방식으로 볼 수 있습니다.

AWS에서는 Serverless Image Handler를 Solution 형태로 제공하고 있습니다. 이미 …

Kevin Park

Software Engineer

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store