앞서 Springboot + JSP 프로젝트를 jar로 배포하기 를 하며 META-INF를 사용하는 방법에 대해 알아보았다. 이번 글의 목적은 src>main>webapp>WEB-INF 이런 구조 대신 src/main/resources/META-INF/resources/WEB-INF 이 구조를 사용하고 war 빌드를 했을때 정상적으로 동작하게 하기 위함이다. 어떤때는 jar로 다른 프로젝트 안으로 들어가서 동작을 해야 하고 어떤때는 war로 독자적으로 실행을 하기 위해서 구조를 src/main/resources/META-INF/resources/WEB-INF 구조로 통일을 하려 한다. 위와 같은 경로에 jsp 파일을 위치시켰다. IDE 환경에서는 그냥 이렇게 하고 써도 잘 된다. 하지만 이걸 war 빌드..
Template Engine으로 JSP를 사용한 springboot 프로젝트가 있다. springboot에서 공식으로 지원을 하지 않는 Template Engine이다보니 JSP를 사용할때 여러가지 불편한 점들이 있다. 하지만 SI에서는 쉽게 기술을 휙휙 바꾸기 힘든 점들이 많다. SI는 참 힘들다... Springboot + JSP 프로젝트가 여러개 있고 이것을 각각 띄워서 사용을 할수도 있어야 하고 경우에 따라서는 여러개의 프로젝트가 main project에 dependency 형태로 붙을수도 있어야 한다. dependency 형태로 붙으려면 war가 아닌 jar 형식의 파일로 빌드가 되어야 한다. 이 방법에 대해 기술해보고자 한다. 어떻게 JSP 프로젝트를 war가 아닌 jar로 배포할 수 있을까?..
다음과 같은 요구사항이 있다. 두개의 springboot 어플리케이션이 있는데 이 두개의 app은 각각 실행도 되어야 하고 app2는 app1에 참조되어서 동작도 되어야 한다. 간단하게 그림으로 나타내보겠다. case1. 두개의 springboot app이 각각 실행되고 동작하는 경우 case2. app2가 app1에 dependency로 들어가서 하나의 app으로 동작해야 하는 경우 app2를 app1에 dependency 추가를 해주면 간단하게 끝날것 같았는데 그렇지 않았다. 인생은 실전이다. 혹시 IDE에서는 그냥 참조를 해도 된다고 해도 build를 해서 IDE가 아닌 환경에서 돌려보면 안될것이다. 일단 기능이 거의 없는 springboot app2를 빌드해 본다. 자체적으로도 실행 가능한 spr..
이 어플리케이션에는 몇개의 bean이 생성이 되었고 이것들은 어떤 이름을 가지고 있으며 실제 클래스는 무엇인지에 대한 정보를 원하는 경우가 있다. Spring 기동시 로그를 살펴보면 이것에 대한 정보를 얻을수도 있지만 생성된 bean의 정보를 이용하여 간단하게 구할 수 있다. @Autowired DefaultListableBeanFactory beanFactory; Bean에 대한 정보를 가지고 있는 beanFactory의 구현체인 DefaultListableBeanFactory를 주입받는다. 그럼 이 beanFactory로부터 bean에 대한 이런 저런 정보들을 가지고 올 수 있다. public void beanInfo() { System.out.println("#### total bean count ..
Springboot를 성능개선하는 방법에 대해 지난번에 글을 쓴 적이 있었다. Springboot 속도 개선 방법 어떻게 하면 Springboot을 조금 더 빠릿빠릿하게 만들 수 있을까 찾아보았다. 지금 사용하고 있는 최신버전(2.5.4)도 만족스럽게 사용하고 있지만 찾아보면 자료가 있을것 같았다. 마침 좋은 자료가 oingdaddy.tistory.com 그중 Lazy Initialization을 하는 방법과 효과에 대해 테스트를 해봤다. 일단 Lazy Init이라고 하는건 bean을 기동시점에 생성하는것이 아닌 실제 사용시에 호출을 하는 방법이다. 그렇기 때문에 당연히 기동시간은 단축된다. 그리고 최초 호출 시점에는 느리다. 어떻게 보면 조삼모사같지만 그래도 bean의 개수가 늘어나면 늘어날수록 기동시..
예전에 Spring Batch 사용하면서 jobParameters를 주입받으려면 이렇게 하세요 하고 글을 쓴적이 있다. Spring Batch jobParameters 사용하는 방법 (with @JobScope, @StepScope) Spring Batch에서 실행할때 넘겨주는 Parameter 값을 받아서 동적으로 처리를 하고 싶은 경우가 있다. Springboot Batch에서는 이렇게 Program Arguments를 이용해 jobParameters를 전달한다. 바로 이 값을 어떻.. oingdaddy.tistory.com 이 글은 @JobScope와 @StepScope를 적절하게 사용해야 한다는 내용이 주된 내용이었다. 하지만 어느 프로젝트에서는 위와 같은 규칙을 잘 지켰는데도 불구하고 주입을 받..
기존에는 jndi를 사용해서 tomcat에서 datasource 관련 설정을 할때는 tomcat 가이드에 있는대로 설정을 하면 되었다. 하지만 이제는 springboot 사용이 보편화됨에 따라 embedded tomcat을 사용하므로 application 단에서 datasource 관련설정을 모두 해야 한다. application 단에서 datasource 관련설정을 어떻게 하는지, 그중에서도 대표적인 Connection Pool 설정 방법에 대해서 알아보겠다. 참고로 필자의 환경은 springboot 2.5.x 이다. 1. spring default datasource 사용 시 (application.yml) spring: datasource: driver-class-name: oracle.jdbc.O..
독자적으로 스케쥴러에 의해 실행되는 Spring Batch Job이 있다. 결과물이 jar로 빌드되어져 나오고 스케쥴러가 그 jar를 실행시켜 우리가 만든 Batch Job이 수행된다. 하지만 이렇게 스케쥴러에 의해 돌아가는 Batch 외에 Web (Online)에서 Batch를 실행시키고 싶다는 요구사항이 있다. 이렇게 요구만 있으면 언제든지 실행시키는 Batch 방식을 On Demand Batch라 한다. 기본적으로 프로젝트를 하면 Online이 있고 Batch가 있다. 그래서 Online은 Online대로 돌고 Batch는 Batch대로 돈다. 그런데 Batch에서 수행하는 일을 Online에서도 원할 때가 있다. Online에도 Batch에서 사용한 Service를 추가해서 사용하면 되는거 아니냐..