Spring Boot Graceful Shutdown

Kubernetes 기반의 구조에서 Spring Boot를 주로 사용하다 보니 서비스 무중단 배포가 중요한 이슈로 부상했습니다. 이를 대응하다 보니 Open Source Library를 만들어서 ( 다른 Library를 거의 베껴서 ) 공개하게 되었습니다. https://github.com/SilverNine/spring-boot-graceful-shutdown PS. 마음껏 수정하기 위해 기존의 다른 Library를 쓰지 않고 새로 만들게 되었습니다.

Spring Boot – Lucy XSS Filter

가장 기초적인 공격방법 중 하나인 XSS를 방어할 수 있는 방법 중 Lucy XSS Filter를 Spring Boot에 적용하는 법을 소개합니다. XSS에 관한 정보는 아래 링크를 참조하시기 바랍니다. https://namu.wiki/w/XSS   – Maven을 사용한다면 pom.xml에 아래 내용추가

  – Configuration 추가

  – Resources 폴더 하위에 lucy-xss-servlet-filter-rule.xml 추가

 

ElasticBeanstalk Spring Boot Custom nginx.conf 적용

ElasticBeanstalk에 Spring Boot 프로젝트로 Tomcat을 사용하고 있을때 Custom nginx.conf 적용 방법입니다. Maven을 사용하고 있다면 pom.xml에 아래와 같이 정의합니다.

  /src/main/resources/.ebextensions/nginx/nginx.conf 생성 ( 대용량 파일의 업로드를 위한 설정이 포함되어 있습니다. 값을 서비스에 맞게 수정하세요 )

  자 이제 빌드를 하고 eb deploy를 통해 배포를 진행하면 custom nginx 설정이 적용됩니다. 더보기…

Spring Batch – @Transactional 이슈 해결 방법

Spring Batch Admin 을 통합한 Spring Batch 프로젝트에서 아래와 같은 경우 @Transactional 어노테이션이 정상적으로 작동하지 않는 경우가 있습니다.     1. 기존 Spring Batch Admin 라이브러리 내부에 transactionManager가 선언되어 있기 때문에 다른 이름으로 TransactionManager를 선언하여 사용

2. 위와 같이 선언하고 아래와 같이 어노테이션을 사용하여 트랜젝션을 설정

  이와 같은 더보기…

JsonView Null to Empty String

Spring에서 JsonView 사용 시 공통으로 null인 필드를 empty string으로 리턴해야 할 필요가 있는 경우가 있습니다. 이런 경우 ObjectMapper를 상속받은 Custom ObjectMapper를 이용한 HttpMessageConverter를 통해 해결할 수 있습니다. 1.NullSerializer 구현

2.CustomObjectMapper 구현

3.HttpMessageConverter 추가

 

Mocking BindingResult

Controller Test시에 해당 method를 invoke를 할 일이 생길 수 있습니다. 이때 @Valid Annotion을 사용하고 있다면 BindingResult를 Mock객체로 만들어야 할 일이 생깁니다. 방법은 Mock 객체를 사용할 수 있게 setup 코드를 삽입하면 해당 BindingResult를 무시하고 Test Code를 작성할 수 있습니다.

Convert Map inside null to empty string

Convert Map inside null to empty string 1. ObjectMapper 사용

  2. Java8 lambda 사용

 

Querydsl ( JPA ) @OneToOne Mapping

현재 진행하고 있는 개인 프로젝트에서 Querydsl을 사용하고 있습니다. JPA Entity는 어노테이션을 통해 매핑을 수행할 수 있습니다. 좋은 상황은 아니지만 쿼리를 만든다면 Select 절에 scalar subquery를 사용해야 하는 상황에서 사용할 수 있는 @OneToOne 매핑에 대해 공유합니다.   Book, Code 두 개의 Entity가 있다고 가정합니다. 각각 아래와 같은 컬럼을 사용하고 있습니다. BOOK 더보기…

Java Generic 와일드 카드, 가변인자의 예

Java Generic 와일드 카드, 가변인자의 예 org.springframework.web.servlet > FrameworkServlet.java