여러국가에 적용되는 시스템을 구현해야 하는 상황이라 timezone에 대해 고민하고 있었는데 생각지도 못한 Summer Time 에 대한 이야기가 흘러나왔다. 이것도 고려가 되어야 한다고 한다. 우리나라도 이 Summer Time을 시행한적이 있었다고 한 사실을 알고 놀랐다. 우리나라에서 Summer Time을 겪은 사람은.. 많이 고참들이시다. (라떼 주의) Summer Time에 대해 궁금하면 이 글을 참조하도록 하자. Summer Time이 어려운점은 이게 기업의 로비같은걸로도 바뀔수 있을만큼 동적이라는 것이다. 예를 들자면 어느 나라에서는 2020년에는 4월 14일부터 시작하고 2021년에는 4월 30일에 시작할수도 있다. 따라서 이걸 library 형태로 만들어서 계속 쓰는건 불가능에 가깝다. ..
JAVA app을 기동시 콘솔 최상단에 다음과 같은 로그가 뜨는 경우가 있다. Picked up JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true 이건 ip 표현방식을 기본으로 되어 있는 ip6방식을 사용하지 않고 ip4방식을 사용하겠다는 것이다. 음.. 나는 jvm 옵션으로 아무것도 주지 않았는데... 이거는 어디서 어떻게 설정이 되어서 로그에 찍히는것일까.. 답은 시스템에 존재하는 모든 jvm에 대한 전역 설정이 되어 있어서 그렇다. 이건 시스템 환경변수 설정에서 할 수 있다. 아무것도 설정하지 않았는데 Picked up JAVA_TOOL_OPTIONS 어쩌고 저쩌고 뜨는건 환경변수 세팅하는 곳(내컴퓨터 - 고급시스템 설정 - 고급 - 환경변수)에 가보면 답이..
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..
linux와 달리 windows에서는 tail 명령어가 없다. 아니 있기는 한데 이것을 직관적으로 사용을 할 수가 없다. 하지만 간단한 스크립트를 하나 만들어서 간단히 사용을 할 수 있다. 방법은 다음과 같다. tail bat 파일 만들기 (eg. win_tail.bat) @echo off PowerShell Get-Content -Path "%1" -Wait -Tail "%2" -Encoding UTF8 메모장을 열어서 위와 같은 내용을 작성하고 win_tail.bat 파일을 만든다. 첫번째 인자값으로는 파일의 경로 두번째 인자값으로는 출력할 라인 수를 지정을 했다. 물론 이 bat 파일을 만들지 않고 그냥 이 명령어를 사용해서 바로 원하는 동작을 할수 있다. 하지만 추후에도 tail을 많이 사용해야 ..
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를 사용..
Apache와 Tomcat을 AJP를 통해 정상적으로 연동시켰음에도 다음과 같이 오류가 발생한다. [main] org.apache.catalina.util.LifecycleBase.handleSubClassException 구성요소 [Connector[AJP/1.3-8009]]을(를) 시작하지 못했습니다. org.apache.catalina.LifecycleException: 프로토콜 핸들러 시작 실패 at org.apache.catalina.connector.Connector.startInternal(Connector.java:1038) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalin..