독자적으로 스케쥴러에 의해 실행되는 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를 추가해서 사용하면 되는거 아니냐..
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..
Oracle 개발을 편하게 해주는 개발툴인 SQL developer는 다들 써봤을것이다. Redis에도 이처럼 redis-desktop-manager 라는 GUI 개발툴이 있다. 작년까지는 무료였던것 같은데 지금은 유료로 사용해야 한다. 그래도 "redis-desktop-manager 무료" 로 구글링을 해보면 아직 설치파일을 올려 놓으신 분들이 많아서 쉽게 구할 수 있다. 구매해서 사려면 여기를 클릭해서 구매하면 된다. 어떻게 해서든지 RDM 설치파일을 받았다 치고부터 진행을 하겠다. 필자는 가난하므로 예전부터 가지고 있던 무료버전을 사용하도록 하겠다. 설치파일을 더블클릭한다. 그러면 다음과 같이 설치화면이 나오고 설치가 진행된다. 뭐 어려울건 없다. 그냥 Next만 계속 누르면 끝나니까.. 설치가 완..
평소에는 아무런 문제 없이 잘 되었는데 어느 순간부터 로컬환경에서 로그에 exception들이 찍히기 시작했다. 모든 액션에 대해서 이런 exception이 발생을 한다. [DEBUG][org.apache.coyote.http11.Http11Processor.log:line175] - Error parsing HTTP request header java.io.EOFException: null at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1318) at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEndpoint.java..
기존에 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 에서는 위..
Javascript를 이용해 어떤 브라우저로 application에 접속했는지에 대한 정보를 확인할 수 있다. 이때 사용되는게 User-Agent이다. 개발자 도구에서도 확인해 볼 수 있다. 이런 User-Agent 정보를 이용해 Javascript에서는 클라이언트로부터 온 요청을 브라우저에 따라 처리할 수 있다. 그럼 일단 User-Agent 가 브라우저에 따라 어떤 모습인지 알아야 한다. browser User-Agent IE Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko Edge Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)..