springboot로 전환함에따라 web.xml에서 기술을 하던 Spring Security 관련 필터들에 대한 설정을 할 필요가 없어졌다. 그럼 나머지 필터들은 어떻게 등록을 해야하나? web.xml CustomFilter sample.CustomFilter CustomFilter /* springSecurityFilterChain org.springframework.web.filter.DelegatingFilterProxy springSecurityFilterChain /* 기존의 모습은 이랬다. CustomFilter라는 놈은 request로부터 IP를 가지고 오는 역할을 한다고 가정한다. CustomFilter.java public class CustomFilter implements Filter..
springboot로 기존에 있던 프로젝트를 전환을 하고 화면개발을 시작하는데 JSP 파일을 수정하고 아무리 새로고침을 해보고 캐시도 날려보고 요란법석을 떨어도 반영이 되지 않았다. 서버를 재기동해야만 이게 반영이 되는데 이래서는 도저히 쓸수가 없다고 느끼고 방법을 찾아보니 방법이 있다. application.properties에 한줄만 추가해주면 된다. server.jsp-servlet.init-parameters.development=true 위 문구 추가하고 재기동! .... 안된다. 문제가 있었다. 위의 방법은 springboot 2.0 미만에서 동작을 한다는 것이다. springboot 2.0 이상에서는 다음과 같이 작성해야 한다. server.servlet.jsp.init-parameters...
Quartz scheduler란? 거의 모든 Java 응용 프로그램에 통합 할 수 있는 풍부한 기능의 오픈 소스 작업 스케쥴 라이브러리이다. 보통 배치작업이나 변경된 정보를 주기적으로 reload 해주기 위해 사용한다. 대략적인 구조는 이러하다. 스케쥴러의 특성상 언제(Trigger)와 무엇을(Job Detail) 로 구성되어 있다. 일단 Quartz를 사용하기 위해서는 dependency 추가가 필요하다. pom.xml org.quartz-scheduler quartz 2.3.2 추가가 되었다면 샘플을 작성해 보도록 하자. Quartz Scheduler Sample 위의 그림처럼 Scheduler는 Trigger를, Trigger는 Job을 가지고 있는 구조이다. sampleJob이라는것은 sample..
spring의 환경변수를 정의하는 역할을 하고 있는 application.properties 파일의 내용을 가지고 오는 방법은 여러가지가 있다. 하지만 이 여러가지 방법들은 사용을 하기 번거로울수도 있고 또한 bean이 아닌 POJO에서 바로 사용할수는 없다. 하지만 프로젝트를 진행하다보면 분명 이런 POJO에서도 application.properties에 있는 값들을 사용하고 싶은 경우가 분명히 있다. 이경우 매번 applicationContext를 가지고 와서 getBean 하여 사용을 하는것은 바람직하지 않기에 이를 Util 클래스로 만들어서 쉽고 간단하게 사용할 수 있도록 해보자. ApplicationContextServe.java import org.springframework.beans.Bea..
spring에서 mysql datasource를 설정하는 방법이다. pom.xml 에서 mysql 연동을 위한 driver를 가지고 온다. mysql mysql-connector-java 8.0.20 applicationContext에서 datasource 설정을 다음과 같이 한다. (xml config version) url 에서 ip, port, dbname을, username, password를 해당 db의 정보에 맞게 수정해 주면 된다. url 뒤에 옵션으로 붙은 useSSL, serverTimezone, useUnicode, characterEncoding 등은 일반적은 프로젝트에서 사용되는 옵션이다. timezone과 encoding 등의 이슈를 잡아준다. 끝!
dataaccess를 혁신적으로 편하게 만들어준 MyBatis. SI를 수행하는 사람은 모르는 사람이 없는 스킬셋이다. 이 MyBatis를 사용할때 성능을 꽤 올릴수 있는 방법들이 있다. 대량데이터를 조회하는 query 설정에 fetchSize 를 넣어주자. 결론부터 얘기하자면 테스트하는 환경마다 다르겠지만 약 만건의 데이터를 넣고 조회하는 로직을 수행했을때 fetchSize를 넣은것과 안넣은것은 성능차이는 내가 테스트해본 환경에서는 15배정도 났다. 대용량 조회를 할 경우 fetchSize를 꼭 넣어주자. visualVM 으로 구간별 속도를 측정을 해봤을때 MyBatis의 DefaultResultSetHandler.shouldProcessMoreRows() 가 거의 대부분의 시간을 차지하고 있었다. 메..
springboot 1.4.2 를 사용하다가 2.x 로 versionup을 하였다. 오 생각보다 별 이슈 없이 잘 되네? 하며 종속성 에러를 다 잡고 서버를 기동하는 순간 다음과 같은 오류가 떨어졌다. 이 익숙한듯 익숙하지않은 익숙한거같은 오류... 분명 위에서 지적하는 logback 관련 라이브러리는 물론 잘 올라와있다. 찾아보니 역시 springboot migration 이슈였다. 이건 springboot 1.5.x 를 사용할때도 나타나는 현상이라고 하는데 springboot 1.5.x 이상에서 logback 1.0.x version을 사용하면 이런 문제가 발생한다고 한다. 해결방법은 logback을 최소 1.1.3 version 이상을 사용하면 된다. 1.2.3 이렇게 바꾸고 다시 기동시켜보면 잘 ..
잘 돌아가던 springboot 1.x 기반의 웹프로젝트를 사용하다가 msa 관련 지원이 더 유연한 springboot 2.x 로 전환을 해야 했다. springboot 2.x 로 migration을 하려면 생각보다 많은 부분을 봐야 한다. 기본 spring의 버전도 4.x에서 5.x로 바뀌고 이에 따른 종속성 이슈도 잘 살펴봐야 한다. 다행히 이 웹프로젝트는 spring versions[up 에 따른 이슈는 크게 없었다. 나중에 migration 한 부분을 정리하며 자세히 설명하겠다. 기타 spring 5.x 로 바꿈에 따른 종속성 이슈들을 없애고 서버 기동을 하자 잘 되나 싶었는데 spring security 관련된 ObjectPostProcessor 를 찾지 못했고 이걸 너의 설정에 넣어줘야 한다...