필자는 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..
Spring을 처음 배울때 AOP 부분을 이해하기 힘들었다. 막 Spring이 본격적으로 쓰이던 시기라 설명도 다 직역으로 되어 있고 (영어를 잘 못함..) 머리도 썩 좋은 편이 아니라 어려웠던것 같다. 역시 정답은 계속 써보는것 밖에 없는것 같다. 하지만 Springboot이 나오고 이런 Spring의 기본 개념을 확실하게 모르더라도 기능들을 막강하게 제공을 해주다보니 Spring을 처음 접하는 사람도 진입장벽 없이 들어올 수 있게 만들어 놓은것 같다. 그중 하나가 오늘 다룰 내용인 @RestControllerAdvice 인것 같다. 이름에서부터 감이 올수도 있겠지만 이것은 @RestController와 @ControllerAdvice를 합쳐 놓은 것이다. 즉 Controller 단에서 쉽게 AOP를 ..
Springboot와 Redis를 연동해보고 있다. Redis가 RDBMS처럼 주로 중요한 데이터를 다루지 않고 Cache 성의 데이터를 처리하는 Key-Value store지만 그래도 중요하다. 이를테면 이전 글에서 다룬 세션 클러스터링 같은것을 하나의 Redis에서 처리를 하다가 그 Redis가 문제가 생기면 세션도 모두 죽게 된다. 이런것을 방지하기 위해 Redis도 Cluster를 구성해야 한다. 물론 이걸 사용하는 Springboot에서는 이에 대한 설정도 함께 해줘야 한다. Redis Cluster 구성 일단 Redis Cluster 구성은 좋은 글들이 정말 많이 있다. 추천할만한 글은 daddyprogrammer.org/post/1601/redis-cluster/ Redis - cluster..
Jenkins에서 SCM으로부터 소스를 가지고 오기 위한 작업을 할 때 Credentials looks fine but the repository url is invalid 오류를 심심치 않게 만나볼 수 있다. 이는 말 그대로 SCM 저장소의 URL이 잘못되었다고 나오는것이다. 분명 잘 확인하고 맞게 URL을 작성한다고 했는데 위와 같이 오류가 나면 다음과 같은 방법으로 간단히 해결이 가능하다. 이클립스에서 SCM을 붙였다면 프로젝트 우클릭 > Properties > SVN Info 로 들어가면 Resource URL에 대한 정보를 확인할 수 있다. 여기에 있는 정보가 실제 내가 소스를 가져올 수 있는 경로이므로 이것을 Jenkins에 붙여 준다. 필자의 경우는 포트까지 붙여서 가지고 와서 실패를 한 경..
Springboot + Redis 연동하는 예제 (1) 기본 지난번에 Redis 설치와 간단한 테스트를 해보았고 이번에는 설치한 Redis를 springboot와 연동하는 방법에 대해 알아보겠다. springboot의 장점 중 하나는 다른 솔루션과의 integration이 아닐까 싶다. 전에 oingdaddy.tistory.com 이 글을 통해서 Redis 설치부터 Springboot 연동까지 진행을 했었다. 이번에는 이전 포스팅에 이어서 Springboot + Redis 를 통해 Session Clustering을 하는 방법에 대해 알아보겠다. 예제는 지난번에 만든 샘플 프로젝트를 이어서 진행을 하도록 하겠다. 1. Springboot Redis Session 관련 설정 Springboot에서는 아주 ..
지난번에 Redis 설치와 간단한 테스트를 해보았고 이번에는 설치한 Redis를 springboot와 연동하는 방법에 대해 알아보겠다. springboot의 장점 중 하나는 다른 솔루션과의 integration이 아닐까 싶다. 전에 작성한 application.yml 파일에서 integration 할 수 있는 property들에 대해서 봤는데 여기에 있는 솔루션들은 모두 쉽게 springboot 환경에서 사용할 수 있다고 보면 된다. Redis도 그중 하나다. 1. 사전작업 - Redis 설치 일단 위의 링크를 따라가서 Redis를 설치하고 구동을 시켜놓자. 그리고 잘 되는지 테스트도 해보자. 일단 다음과 같이 Redis 에 값을 하나 넣어 놓았다. 잘 된다면 springboot와 연동하기 위한 다음 단..