Spring/boot

Spring/boot

[Spring-boot] Master - Slave 구조에 따른 Read, Write 분기

서론 데이터베이스를 이용한다면 대부분 쓰기보다 읽기 의 행위가 더 많습니다. DB의 부하를 줄이기 위해 다음과 같이 Master - Slave 구조를 많이 사용하는데요. 이러한 구조를 가지고 있을 때 Transection의 속성이 readOnly = true 인 경우 Slave 데이터베이스에 Select query 가 발생하게 해야합니다. 따라서 이번 본문에서는 @Transactional(readOnly = true) 인 경우는 Slave DB 접근 @Transactional(readOnly = false) 인 경우에는 Master DB 접근 위의 조건을 만족하기 위한 방법을 Spring-boot 기준으로 소개하고자 합니다. 사전 환경설정 실습 환경은 다른 것은 필요 없고 저는 MySQL 데이터베이스를 ..

Spring/boot

[Spring boot] 여러 필드를 검사하기위한 Custom Valid Annotation 만들기

서론 스프링 컨트롤러에서 클라이언트로부터 받은 값을 검증하기 위해 Validation을 많이 사용하곤 합니다. JSR 380이 제공해주는 Bean Validation 의 종류는 다양하지만 각자의 서비스에 따라 기본적으로 제공해주는 애노테이션만으로는 검증을 모두 다 지원해주지는 못합니다. 따라서 상황에 따라 각 서비스에 맞는 커스텀한 Validation을 만들어서 활용하기도 합니다. 그렇다면 이번 글에서는 왜 커스텀 Validation을 만들었고 만드는 과정을 소개하고자 합니다. 왜 필요한가? 기존 @NotNull, @NotEmpty, @NotBlank, @Email 등의 애노테이션으로 클라이언트 요청으로 값을 검증하는 것은 필드 자체의 형식이나 값을 체크하는 용도로만 사용됩니다. 즉 필드와 필드를 비교하..

Spring/boot

[Spring-boot] ExceptionHandler

ExceptionHandler REST API 개발 시 개발자는 DB에 없는 값이나 URL에 대한 요청이 잘못되었을 때 그에 맞는 ErrorMessage를 넘겨줘야 한다. 물론 REST API 개발이 아니어도 당연히 해야 할 예외처리이다. Spring-boot에서는 요청에 대한 Exception 이 발생했을 때 그 요청을 받아 처리할 수 있는 Handler를 제공해준다. 말로 설명보다 코드로 보는 것이 이해하기 쉬우니 다음 예제 코드를 보자. 1.@ExceptionHandler(Class

Spring/boot

[Spring-boot] Thymeleaf

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] 웹MVC 2부 : 정적리소스

정적 리소스 지원 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

[Spring-boot] 웹MVC (1부) : 소개 , ViewResolver

이제 spring-boot 가 자동 설정하는 Configuration 중 WebMvcAutoConfiguration에 대해 서 알아보자. WebMvcAutoConfiguration 은 SpringMvc의 자동 설정 Configuration이며 Springboot를 사용하면서 많은 자동 설정들을 도와준다. Spring-boot를 실행하면서 자동 설정을 확장하거나 재정의 하는 방법은 다음과 같이 진행하면 된다. SpringMvc 확장 @Configuration public class WebConfig implements WebMvcConfigurer { } 하나의 설정 파일에 WebMvcConfigurer를 구현하면 된다. 여기서 WebMvcConfigurer 인터페이스가 제공하는 콜백 함수를 이용하여 사용..

Spring/boot

[Spring-boot] Test

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..

Spring/boot

[Spring-boot] Logging

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..

jay Joon
'Spring/boot' 카테고리의 글 목록