properties 파일을 구성할때 암호화가 필요한 부분들이 존재한다. 가장 대표적인 예가 datasource의 username, password 부분이다. 이것들은 정말 다양한 방법을 통해서 암호화가 되고 있지만 요즘 추세는 datasource의 설정을 ApplicationContext가 아닌 properties(yml) 파일에서 하므로 여기에서 암호화를 하는 방법에 대해서 알아보자. properties 파일에서 암호화를 쉽게 할수 있도록 도와주는 Jasypt (Java Simplified Encryption) 라는 것이 있다. 이것을 사용해서 암호화를 해보자. Springboot에서 Jasypt를 사용하여 properties 파일 암호화 pom.xml com.github.ulisesbocchio ja..
우리가 보통 사용하던 Spring MVC + RDBMS 패턴은 Blocking IO 방식이다. Blocking IO 방식이라는 것은 요청을 처리하기 전까지는 다른 작업을 수행할 수 없는 상태라는 것을 말한다. 동시에 여러 요청을 처리하기 위해서는 Thread 수를 늘려서 하는 방법이 존재하기는 하지만 이도 오버헤드가 발생한다. 이를 개선하기 위해 나온 기술이 Non-Blocking IO 방식인 Spring WebFlux 이다. Spring WebFlux 는 동시에 처리되어야 할 많은 요청에 대해 효율적으로 처리해줄 수 있다. The other is a fully reactive stack that takes advantage of Spring WebFlux and Spring Data’s reactive..
log4j는 한때 위용을 떨쳤던 강력한 logging framework였다. 하지만 세월이 흐르고 기술은 발전하여 더 나은 logging framework들이 등장했다. 성능적인 측면이나 기능적인 측면에 더욱 발전하여 전환은 선택이 아닌 필수가 되었다. 그중 springboot 공식 logging framework로 사용될만큼 인정을 받은 logback으로 전환을 하는 방법에 대해 알아보자. 더불어 다음부터는 쉽게 logging framework 전환을 쉽게 하기 위해 slf4j 를 사용하도록 하자. pom.xml library 변경 log4j log4j log4j 1.2.17 slf4j + logback org.slf4j slf4j-api 1.7.25 ch.qos.logback logback-class..
Spring에서 외부 환경변수의 값을 가지고 오는 방법은 다양하다. 그중 하나가 PropertyPlaceholderConfigurer 를 통해서 가져오는 방법이다. 가장 일반적인 방법이다. 사용법은 다음과 같다. classpath*:/config/test.properties 위와 같이 작성을 잘 했는데 뭘 해도 값을 못가져오는 경우가 있다. 이를테면 java에서 @Value("${testkey}") 이런식으로 test.properties에 정의한 testkey에 대한 value를 얻는다거나 ApplicationContextAware 의 구현체로부터 ApplicationContext를 가지고 와서 getEnvironment().getProperty("testkey") 를 해서 가지고 온다거나 하는 방식 모..
기존 log를 관리하기 위한 구현체로써 log4j가 사용되었다. 그러나 보다 안정성이 높고 편리하게 log를 관리하기 위해 Logging framework인 Slf4j(Simple Logging Façade for Java)와 그 구현체로써 Logback이 고안되었다. Slf4j는 일명 Façade 패턴으로, 이를 사용하면 구현체의 종류와 상관없이 일관된 로깅 코드를 작성할 수 있으며 구현체를 변경할 경우에도 최소한의 수정으로 교체가 가능하다. 이에 맞춘 Logback은 log4j의 후속 버전으로 만든 Logging 라이브러리이다. Logback은 springboot의 기본 Logging framework로 사용될만큼 범용적이고 다양한 기능을 가지고 있다. log 관리 및 처리 구조는 다음과 같다. Lo..
앞서 설명한 Chunk 방식을 사용하지 않는 경우 Tasklet 방식의 Batch를 사용한다고 했었다. 두 방식 모두 많이 쓰이는데 장단이 있다. 생각나는대로 말해보면 Chunk 방식은 포맷이 딱 정해져 있어서 그에 맞게 코드를 작성해야 하지만 성능적으로 우수하고, Tasklet 방식은 정해진 형식이 없고 자유롭게 코드를 작성할수 있고 쉽지만 Spring Batch에서 제공하는 다양한 기능들을 활용하지는 못한다. Spring Batch에 대한 이해도가 낮거나 외부 연동작업이라던지 성능이 크게 중요하지 않은 배치 작업을 할때는 Tasklet 방식을 많이 사용하는데 이에 대해 알아보자. 그럼 tasklet 방식의 배치는 어떤게 구현을 해야 하는지 살펴보자. (xml config 로 진행한다.) 사용한 spr..
application을 구현하다보면 jsp에서 분기처리를 해서 권한에 따라서 다른걸 보여줘야 하는 상황이 발생한다. 이럴때 기존의 JSTL 을 사용하여 if 문으로 분기처리를 할수도 있지만 객체를 받아와서 그걸 풀고 그에 따라 분기처리를 하는 부분은 어찌보면 복잡하게 느껴질수도 있다. 이런 상황일때 spring security 를 사용하여 권한관리를 하고 있다면 간단하게 구현을 할 수 있다. AuthenticationProvider의 구현체에서 role을 정의하고 UsernamePasswordAuthenticationToken에 정의된 role을 집어 넣는 과정이 모두 끝났다면 spring security tag library를 통해 어디서든 role을 사용할 준비는 끝이 났다. Spring Securi..
일전에 springloaded를 이용하여 일반적인 tomcat 개발환경에서 hot swapping을 하는 방법에 대해 다룬적이 있었다. Eclipse, tomcat 환경에서 hot deploy 적용하기 (with springloaded) springloaded는 hot deploy를 가능하게 해주는 기술 중 하나이다. hot deploy는 뭐냐? 쉽게 설명을 하자면 소스의 변경을 was의 재기동 없이 반영을 해주는 것이라고 생각 하면 된다. was의 재기동은 상황에 oingdaddy.tistory.com 마찬가지로 springboot를 쓸때도 이런 기술은 적용이 가능하다. springboot는 embeded tomcat 이 들어있고 이 또한 간단하게 hot swapping 을 할 수 있다. 무료로 사용할..