Java

Spring Boot Graceful Shutdown

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

글쓴이 SilverNine,
Java

Spring Boot – Lucy XSS Filter

가장 기초적인 공격방법 중 하나인 XSS를 방어할 수 있는 방법 중 Lucy XSS Filter를 Spring Boot에 적용하는 법을 소개합니다. XSS에 관한 정보는 아래 링크를 참조하시기 바랍니다. https://namu.wiki/w/XSS   – Maven을 사용한다면 pom.xml에 아래 내용추가 [crayon-5dcafc658a06c001788576/]   – Configuration 추가 [crayon-5dcafc658a07a980614820/]   – Resources 폴더 하위에 lucy-xss-servlet-filter-rule.xml 추가 [crayon-5dcafc658a07f719117920/]  

글쓴이 SilverNine,
AWS

ElasticBeanstalk Spring Boot Custom nginx.conf 적용

ElasticBeanstalk에 Spring Boot 프로젝트로 Tomcat을 사용하고 있을때 Custom nginx.conf 적용 방법입니다. Maven을 사용하고 있다면 pom.xml에 아래와 같이 정의합니다. [crayon-5dcafc658aa65150473245/]   /src/main/resources/.ebextensions/nginx/nginx.conf 생성 ( 대용량 파일의 업로드를 위한 설정이 포함되어 있습니다. 값을 서비스에 맞게 수정하세요 ) [crayon-5dcafc658aa74503443498/]   자 이제 빌드를 하고 eb deploy를 통해 배포를 진행하면 custom nginx 설정이 적용됩니다. 더 보기…

글쓴이 SilverNine,
Java

Spring Batch – @Transactional 이슈 해결 방법

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

글쓴이 SilverNine,
Java

JsonView Null to Empty String

Spring에서 JsonView 사용 시 공통으로 null인 필드를 empty string으로 리턴해야 할 필요가 있는 경우가 있습니다. 이런 경우 ObjectMapper를 상속받은 Custom ObjectMapper를 이용한 HttpMessageConverter를 통해 해결할 수 있습니다. 1.NullSerializer 구현 [crayon-5dcafc658b0f3725871634/] 2.CustomObjectMapper 구현 [crayon-5dcafc658b0fc310839497/] 3.HttpMessageConverter 추가 [crayon-5dcafc658b100012873702/]  

글쓴이 SilverNine,
Java

Mocking BindingResult

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

글쓴이 SilverNine,
Java

Querydsl ( JPA ) @OneToOne Mapping

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

글쓴이 SilverNine,