content is not allowed in prolog 는 찾아보니 여러 이유로 발생을 한다. xml parsing 관련된 문제가 가장 많은것 같고 mybatis 설정이 잘못되어도 발생하기도 하고.. 여러가지 이유가 있지만 거의 대부분이 xml 관련된 문제였다. 하지만 필자의 경우는 클래스 안에서 package를 정의하였는데 package 정의 부분에 content is not allowed in prolog 오류가 발생하였다. xml과 전혀 상관없는 java class인데도 말이다. 오류가 발생했는데 기능은 정상적으로 동작한다. 이클립스의 버그라고 생각이 된다. 무시하고 그냥 해도 되지만 빨간색 x가 떠 있으면 계속 찝찝함이 있는건 사실이다. 이클립스를 껐다가 켜도 똑같이 오류가 남아있다. 해결책 ..
앞서 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..
Freemaker로 프로젝트를 시작하려고 할 때 ftl 파일을 생성해보면 다음과 같은 모습이다. 이클립스에서 아무 설정을 하지 않으면 ftl 파일은 그냥 text로 인식을 해서 위와 같이 표현이 된다. 이렇게 되어 있으면 아무래도 개발을 하는데 조금이라도 생산성이 저하될것 같다. 그래서 ftl을 jsp로 표현해 주는것처럼 바꿀 수 있다. 이클립스 상단의 Window > Preferences > 검색창에 file associations 입력 *.ftl 이 목록에 없다면 Add를 눌러서 추가해준다. 생성된 *.ftl 을 누르고 아래의 Associated editors에서 Add를 눌러준다. 그리고 Editor Selection 에서 jsp로 검색 후 JSP Editor를 선택하고 OK를 눌러준다. 그리고 A..
언제부턴가 JSP를 사용하면 노후화된 시스템이라는 딱지가 붙게 되었다. 10년을 넘게 JSP를 사용하며 영원할것 같았던 이 기술은 어느샌가 고인물의 영역이 되어가고 있는것 같다. JSP는 Spring 진영에서 정식 template engine으로 지원하지 않고 JavaEE에 종속적인 한계가 명확한것이 사람들이 점차 안쓰는데 가장 큰 이유가 아닐까 싶다. 하지만 여전히 JSP의 성능은 뛰어나다. Java template engine을 비교한 자료인데 성능은 JSP+JSTL이 최고고 그다음이 freemarker이다. 그래서 성능의 차이는 최소로 하며 현재 트랜드에 맞는 구조로 가기 위해서 freemarker로 프로젝트를 진행하기로 하였다. 이번에는 프로젝트를 만들고 HelloWorld만 찍어보는 프로젝트를 ..
hs_err_pid 파일은 JVM이 어떤 이유에 의해 강제로 종료되면서 왜 종료되었는지 단서를 남긴 파일이다. [13:50:05.414][INFO ]19108[org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.prepareWebApplicationContext:line290] - Root WebApplicationContext: initialization completed in 655 ms OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000093b00000, 4005# # There is insufficient memory for the Jav..
이 어플리케이션에는 몇개의 bean이 생성이 되었고 이것들은 어떤 이름을 가지고 있으며 실제 클래스는 무엇인지에 대한 정보를 원하는 경우가 있다. Spring 기동시 로그를 살펴보면 이것에 대한 정보를 얻을수도 있지만 생성된 bean의 정보를 이용하여 간단하게 구할 수 있다. @Autowired DefaultListableBeanFactory beanFactory; Bean에 대한 정보를 가지고 있는 beanFactory의 구현체인 DefaultListableBeanFactory를 주입받는다. 그럼 이 beanFactory로부터 bean에 대한 이런 저런 정보들을 가지고 올 수 있다. public void beanInfo() { System.out.println("#### total bean count ..