서론 데이터베이스를 이용한다면 대부분 쓰기보다 읽기 의 행위가 더 많습니다. DB의 부하를 줄이기 위해 다음과 같이 Master - Slave 구조를 많이 사용하는데요. 이러한 구조를 가지고 있을 때 Transection의 속성이 readOnly = true 인 경우 Slave 데이터베이스에 Select query 가 발생하게 해야합니다. 따라서 이번 본문에서는 @Transactional(readOnly = true) 인 경우는 Slave DB 접근 @Transactional(readOnly = false) 인 경우에는 Master DB 접근 위의 조건을 만족하기 위한 방법을 Spring-boot 기준으로 소개하고자 합니다. 사전 환경설정 실습 환경은 다른 것은 필요 없고 저는 MySQL 데이터베이스를 ..
서론 스프링 컨트롤러에서 클라이언트로부터 받은 값을 검증하기 위해 Validation을 많이 사용하곤 합니다. JSR 380이 제공해주는 Bean Validation 의 종류는 다양하지만 각자의 서비스에 따라 기본적으로 제공해주는 애노테이션만으로는 검증을 모두 다 지원해주지는 못합니다. 따라서 상황에 따라 각 서비스에 맞는 커스텀한 Validation을 만들어서 활용하기도 합니다. 그렇다면 이번 글에서는 왜 커스텀 Validation을 만들었고 만드는 과정을 소개하고자 합니다. 왜 필요한가? 기존 @NotNull, @NotEmpty, @NotBlank, @Email 등의 애노테이션으로 클라이언트 요청으로 값을 검증하는 것은 필드 자체의 형식이나 값을 체크하는 용도로만 사용됩니다. 즉 필드와 필드를 비교하..
ExceptionHandler REST API 개발 시 개발자는 DB에 없는 값이나 URL에 대한 요청이 잘못되었을 때 그에 맞는 ErrorMessage를 넘겨줘야 한다. 물론 REST API 개발이 아니어도 당연히 해야 할 예외처리이다. Spring-boot에서는 요청에 대한 Exception 이 발생했을 때 그 요청을 받아 처리할 수 있는 Handler를 제공해준다. 말로 설명보다 코드로 보는 것이 이해하기 쉬우니 다음 예제 코드를 보자. 1.@ExceptionHandler(Class
Thymeleaf 아마 WebApplication을 한 번이라도 개발해봤다면 JSP를 사용했을 것이다. thymeleaf 도 JSP와 같은 template 엔진이다. 둘의 차이점은 다름아닌 JSP는 서버를 통해 Servlet 코드로 변환되어 랜더링 하지만 thymeleaf는 servelt 코드로 변환되지 않는다. 이 차이점으로 인해 thymeleaf는 서버가 존재하지 않아도 Html을 확인할 수 있지만 JSP는 불가능하다. 또한 JSP는 위에서 말한 서버가 필수적이기 때문에 WAR 패키징을 진행해야 하고 thymeleaf는 jar 패키징이 가능하다. JAR와 WAR 차 이첨은 간단히 JRE 만 가지고 실행이 가능한 것과 아닌 것으로 말할 수 있다. 이제 Thymeleaf을 간단히 사용해보자. pom.xm..
정적 리소스 지원 spring boot는 웹브라우저에서 요청이 들어왔을 때 이미 만들어져 있는 리소스를 지원하는 기능이다. spring boot 는 다음과 같은 위치에 있는 정적 리소스들을 제공해줄 수 있다. classpath:/static classpath:/public classpath:/resources/ classpath:/META-INF/resources 정적 리소스 맵핑 은 다음과 같으며 /** 해당 경로를 얼마든지 커스텀 할 수 있다. -> apllication.properites 파일에 다음과 같이 설정하면된다. spring.mvc.static-path-pattern spring.mvc.static-path-pattern=/static/** 또한 요청에 대한 정적 리소스를 찾을 디렉터리도 ..
이제 spring-boot 가 자동 설정하는 Configuration 중 WebMvcAutoConfiguration에 대해 서 알아보자. WebMvcAutoConfiguration 은 SpringMvc의 자동 설정 Configuration이며 Springboot를 사용하면서 많은 자동 설정들을 도와준다. Spring-boot를 실행하면서 자동 설정을 확장하거나 재정의 하는 방법은 다음과 같이 진행하면 된다. SpringMvc 확장 @Configuration public class WebConfig implements WebMvcConfigurer { } 하나의 설정 파일에 WebMvcConfigurer를 구현하면 된다. 여기서 WebMvcConfigurer 인터페이스가 제공하는 콜백 함수를 이용하여 사용..
Test 우리는 Spring-boot를 사용하면 대부분 WebApplication을 개발할 것이다. WebApplication을 개발 함에 있어 또한 대부분 MVC 패턴을 이용하여 개발을 진행한다. 또한 개발을 진행함에 있어 Test 코드의 작성은 선택이 아닌 필수이다. Spring-boot는 Test를 작성함에있어 그렇게 어렵지 않으니 한번 알아보자. 자 다음과 같은 SampleContoller와 SampleService 가 있다. @RestController public class SampleController { @Autowired SampleService sampleService; @GetMapping("hello") public String helloName(){ return sampleServ..
Logging spring-boot 은 기본적으로 Logback 이 로깅에 사용된다. Logback 은 SLF4 J의 구현체이며 자바 오픈소스 로깅 프레임워크이다. LogBack을 xml configration 이용할 때 3가지의 주요 설정이 있는데 다음과 같다. Appender 로그 메시지를 출력할 대상을 결정함 (console , file, DB 등). Encoder 로그 메시지의 포맷을 지정함. Logger, root appender를 읽어 로그를 출력할 package와 log level을 설정함. 상세 설정은(http://logback.qos.ch/manual/index.html) 참고 Example %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg..