Spring locale의 가장 기본이라고 할 수 있는 AcceptHeaderLocaleResolver에 대해 알아보겠다. 사실 Spring에서 locale에 대한 설정을 하지 않는다면 자동으로 이 AcceptHeaderLocaleResolver를 적용을 해서 이에 대해 설정을 할 필요는 없다. 하지만 정작 이것이 어떻게 동작을 하는지 모를수 있기에 글을 써본다. 설정을 안해도 되지만 굳이 설정을 하자면 다음과 같이 한다. @Bean public AcceptHeaderLocaleResolver localeResolver() { return new AcceptHeaderLocaleResolver(); } 이것이 적용되면 웹브라우저의 locale 정보(Accept Language)에 따라 applicatio..
Springboot에서 어플리케이션을 빌드한 jar를 실행하는 방법은 매우 간단하다. $ java -jar some-application.jar 이렇게 실행하면 된다. 하지만 이렇게 했을때 foreground에서 동작을 해서 실행시킨 창을 항상 열어놔야 하는 단점이 있다. Jenkins 같은 곳에서 배포된 jar파일을 실행했을때 문제가 되기도 한다. 그래서 만약 some-application.jar 라는것을 background에서 실행도 가능해야하며 어플리케이션이 돌고 있는지 체크를 해서 죽이고 다시 시작하고 하는 로직도 필요하고 jvm 아규먼트도 항상 넣어줘야 하는 등의 행위를 편하게 하기 위해 실행 스크립트를 만들어서 사용을 한다. 또한 이렇게 스크립트로 만들어서 실행을 하면 실수를 방지할수도 있다...
springboot의 version을 2.1.x에서 2.3.x로 변경을 하는 작업을 하였다. 역시 version up에 따른 migration 작업은 호락호락하지 않다. 필자는 다른 곳에서는 아무런 문제도 없었지만 아래 코드부분에서 문제가 발생하였다. @Bean public RequestMappingHandlerMapping requestMappingHandlerMapping() { RequestMappingHandlerMapping handlerMapping = createRequestMappingHandlerMapping(); handlerMapping.setUseSuffixPatternMatch(true); handlerMapping.setAlwaysUseFullPath(true); handlerM..
솔루션에 사용되는 OSS version up을 하는데 만만치 않은 작업이다. 재수좋게 pom.xml 의 버전만 띡 올리고 잘 돌아가면 다행이지만 잘 되던 기능들이 안되는 경우도 종종 발생한다. 버전만 변경했을때 잘 되던게 안된다면 가장 먼저 취해야 할 액션은 migration guide를 보는 것이다. Springboot 2.1 > 2.2 migration 2.2 version을 간략히 설명하자면 Spring, Spring security의 version이 5.2로 올랐고 성능을 향상시켰으며 lazy init이 가능하고 JDK13 지원 정도 될것 같다. 자세한 설명은 아래를 참조하자. Dependency upgrades Spring Boot 2.2 moves to new versions of severa..
spring에서 사용할 수 있는 paging 방식은 여러개가 있다. JPA를 사용한다면 Pageable를 사용하여 간단하게 paging을 할 수도 있지만 JPA는 필자는 많이 사용하고 있지 않고 대부분이 MyBatis를 사용하므로 그에 맞는 Paging 방식인 PageHelpler를 사용하는 방식에 대해 소개를 하도록 하겠다. PageHelpler는 중국인이 개발했는지 소스를 보면 중국말로 주석이 작성되어 있다. 이것빼고는 다 괜찮은것 같다. 설정 및 구조 샘플은 springboot 2.1.1.RELEASE, java 1.8, h2database 기반으로 작성되었다. 구조 PageHelper 샘플을 구현한 프로젝트젝의 구조이다. 일반적인 springboot + maven 프로젝트의 모습이다. pom.xm..
필자는 xml로 설정하는 방식이 익숙한 사람이었는데 점점 이런 xml 파일로 설정하는 부분들이 없어지고 이는 다른 부분으로 대체가 되고 있다. java config라던지 application.yml 파일에 기존에 xml로 설정하던 부분들을 대체할 수 있게 되었고 사용하다보니 이것도 매우 편리했다. 얼마전에 MyBatis 관련된 설정도 application.yml 파일에서 설정을 했는데 이와 마찬가지 맥락으로 logback.xml (or logback-spring.xml) 파일에 대해서도 application.yml 파일에서 설정이 가능하다. AS-IS (logback-spring.xml) [%d{HH:mm:ss.SSS}][%-5level][%logger{36}.%method:line%line] - %ms..
Springboot 2.3 이상의 버전에서는 Graceful Shutdown을 아주 손쉽게 사용할 수 있다. Graceful Shutdown이란? 말 그대로 우아한 종료이다. 처리중인 쓰레드(Thread)를 강제로 종료하지 않고 작업이 끝날때까지 기다린 다음 종료를 하는 방법이다. 정상 종료 프로세스라고 생각하면 된다. Springboot 2.3 미만의 버전은 이런 기능을 사용하기 위해 HandlerWrapper, ApplicationListener 등을 구현하여 직접 사용해야 했지만 2.3 이상에서는 단 한줄의 설정으로 끝난다. application.properties server.shutdown=graceful Springboot에서 지원하는 embedded was인 Tomcat, Jetty, Und..
Spring Starter Project를 Maven으로 생성하면 아래와 같이 mvnw, mvnw.cmd 파일도 같이 생성이 되어 있다. 열어보면 mvnw 파일은 다음과 같은 내용들이 들어가 있다. #!/bin/sh # ---------------------------------------------------------------------------- # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyrig..