SAXParseException은 예전에 비해 보기가 많이 힘들어졌다. 왜냐면 XML을 많이 안쓰니까.. 그래서 기억에서 가물가물 할때쯤 또 SAXParseException이 발생을 하였다. SAXParseException은 찾기 쉽다. 왜냐면 xml 파일이 잘 구성되었는지 확인만 하면 되니까! 이번에 발생한 오류의 내용은 다음과 같다. Caused by: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 33; columnNumber: 10; The end-tag for element type "plugin" must end ..
Swagger UI 로 application의 API 정보를 보고 싶은데 Unable to render this definition 오류가 나며 되지 않는다. 지난번에 기술한 [Springdoc] No mapping for GET /swagger-ui/index.html 오류와 같이 다른 Springdoc api 호출은 잘 된다. UI 쪽만 문제가 있다. 그리고 또 마찬가지로 새로 프로젝트 만들어서 Springdoc을 적용하면 문제 없다. 커스터마이징 된 부분에 문제가 있는듯 하다. 문제에 대해 딱히 오류메세지가 출력되는것이 아니라 문제를 찾기 힘들었다. 원인을 파악하기 위해 새로 프로젝트를 만들어서 Springdoc을 적용시킨 프로젝트와 문제가 있는 프로젝트를 비교했다. 잘 되는 프로젝트의 http:/..
지난번에 Springdoc 사용법 이래가지고 글도 쓰고 이렇게 쓰면 잘 된다고 했었다. 지금도 프로젝트 새로 만들어서 전에 썼던 글대로 진행을 하면 잘 된다. 하지만 이미 개발이 완료된 어떤 프로젝트가 있었는데 여기에 Springdoc을 적용하려 하니 위와 같은 문제가 발생한다. [WARN ][org.springframework.web.servlet.PageNotFound.noHandlerFound:line1275] - No mapping for GET /swagger-ui/index.html 다 안되는건 아니다. swagger-ui 관련된 기능만 안된다. http://localhost:8080/v3/api-docs/swagger-config -> 200 OK http://localhost:8080/v3..
기존에 web.xml에서 설정하던 session timeout 설정이 web.xml 파일이 없어짐에 따라 이 설정을 application.yml (or application.properties) 파일에서 해야한다. AS-IS (web.xml) 60 TO-BE (application.yml) server: servlet: session: timeout: 1800 위와 같이 매우 간단하게 적용할 수 있다. 뒤에 단위를 안붙이면 기본 시간의 단위는 초(s) 이다. (1800초면 30분) 단위를 붙여서 1800 대신 30m, 1800s 와같이 표현할수도 있다. springboot version 1.x 에서는 server.session.timeout 을 사용하고 springboot version 2.x 에서는 위..
Spring을 몇년동안 계속 써왔고 내가 잘한다고 생각되는 부분은 어느 상황에서 어느 library가 필요하고 이건 Spring의 몇 버전과 호환이 되고 설정파일(applicationContext)은 어떻게 구성을 해야 하고 등등 AA가 해야 할 일들이었다. 즉 개발 외적인 부분들에 대해서 많이 익숙한 상태였다. 하지만 Springboot가 나오면서 내가 잘하는 부분이 사라졌다. 왜냐면 이런 고민들을 하지 않게 나온것이 바로 Springboot이기 때문이다. 뭐든 좀 공부해서 잘한다 싶으면 기술이 빠르게 바뀌어 다시 초기화 상태가 되어버리는것 같다. 잡설은 그만하고 주요 차이점들에 대해 살펴보겠다. dependency 관리 위에서 언급한대로 예전에 Spring으로 프로젝트 하나 구성을 하려면 필요한 라이..
어떻게 하면 Springboot을 조금 더 빠릿빠릿하게 만들 수 있을까 찾아보았다. 지금 사용하고 있는 최신버전(2.5.4)도 만족스럽게 사용하고 있지만 찾아보면 자료가 있을것 같았다. 마침 좋은 자료가 있어서 공유하고자 한다. 이것저것 해보고 현실적이고 괜찮다고 느낀건 빨간색으로 표시를 해 놓았다. How do I make my app go faster? You are mostly going to have to drop features, so not all of these suggestions will be possible for all apps. Some are not so painful, and actually pretty natural in a container, e.g. if you are bu..
Spring을 사용하면 Controller에서 Session을 가지고 오는것은 매우 간단하다. 하지만 Util에서 쉽게 Session 정보를 가지고 오고 싶을때는 어떻게 해야 할까? 바로 RequestContextHolder를 사용하는 방법이 있다. 설정방법 일단 RequestContextHolder를 사용하기 위해서는 RequestContextListener가 필요하다. 이것을 설정하지 않으면 다음과 같은 오류가 발생하니 먼저 설정을 해주도록 하자. java.lang.IllegalStateException: No thread-bound request found 오류 XML로 설정되어 있던 spring web application context를 Java Config 로 변환하는 과정에 오류가 발생하였다..
spring version을 올렸더니 custom interceptor에서 HandlerInterceptorAdapter가 deprecated가 되었다고 나온다. spring 5.3 version 이상에서는 HandlerInterceptorAdapter 를 사용하는 대신 HandlerInterceptor를 implements 해서 사용하는 방식으로 바뀌었다고 한다. (필자는 springboot 2.3.x to 2.5.x 로 변경하니 spring version 이 5.3 이상으로 올라가서 이렇게 되었다.) 따라서 interceptor를 만들때는 위와 같이 HandlerInterceptor를 implements 해서 사용하도록 하자. 기존 방식과 차이점은 HandlerInterceptorAdapter를 사용..