본문 바로가기

반응형

Spring

(19)
springboot custom Pageable default annotation springboot controller parameter로 아래 샘플 코드와 같이 Pageable parameter를 받을수 있는데, 이때 Pageable 값이 안넘어 올때 기본값을 설정 할 수 있는 @PageableDefault 라는 annotation이 있다. 간단하게 해당 annotation에서 설정가능한게 무었인지 확인해 보았다. @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.PARAMETER) public @interface PageableDefault { /** * Alias for {@link #size()}. Prefer to use the {@link #size()} method as it makes the ann..
undertow upload max-file-size exception handler 아래와 같이 spring 의 upload file size를 설정을 하면 파일 업로드시 최대 파일 사이즈가 제한되고 500에러가 발생하게 되는데. 보통 서버에서 500에러는 알수 없는 에러 의도치 않은 런타임 에러를 생각하게 되고 프론트에서도 500에러는 서버 장애 또는 알수 없는 에러로 취급하고 있다. 그래서 500에러가 아닌 400 에러의 custom exception 을 리턴하고 에러메세지도 상황에 맞게 수정하고 싶은 경우에 어떻게 하면 좋을지에 대해 알아 보자. springboot의 was는 보통 tomcat , netty , undertow 이렇게 사용하고 , tomcat이나 netty는 file size exception handling을 같은방식으로 개발하면 되는데 springboot was..
3) Spring Boot API Gateway - 3부 CircuitBreaker설정 앞에 api gateway route 설정과 LB 설정을 하고 어떤식으로 작동하는지에 대해 알아 보았다. 이번에는 gateway circuitbreak 기능에 대해 공부해보자. circuitbreak란 무엇일까? - 간단하게 말하면 api가 route 하는 과정에서 해당 api의 응답이 느려져서( timeout) , 에러가 나는( exception) 중에 계속해서 해당 api 를 불러서 여러 가지 문제를 확산( 해당 api 가 DB connection을 점유한다든지 , 서버 리소스를 잠식 한다든지) 시키는 문제를 방지 하고자 . api gateway에서 특정 조건이 (호출수 대비 실패율) 만족되면 gateway에 api를 호출하지 않고 error 처리를 하는것을 말한다. 이렇게 처리를 함으로써 서버에서 ..
2) Spring Boot API Gateway - 2부 API Gateway 설정 앞에서 유레카서버의 설정과 동작 방식을 간단하게 알아봤는데 이제 유레카 서버에서 관리하는 instance정보를 api gateway에서 어떻게 사용하고 어떻게 사용되는지에 대해 알아본다. 먼저 api gateway 서비스를 하나 생성한다. 1. build.gradle plugins { id 'org.springframework.boot' version '2.5.4' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' } group = 'com.msa' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' repositories { mavenCentral() } ext { set('sp..
1) Spring Boot API Gateway - 1부 Eureka설정 시작하기에 앞서 api gateway라는게 뭘까? 하고 찾아 보았다. 어떤 기능을 하는것이 왜 사용하고 그래서 사용하면 뭐가 좋아지는것 인가? api gateway 는 말그래도 api 의 문 역활을 하는 기능을 애기한다. 서비스에 필요한 모든 api를 이 api gateway server를 통해서 요청받게 되는것이다. 요청받은 api 는 api gateway에 연결되어 있는 마이크로서비스들로 routing 하는 기능을 한다고 생각하면 된다. 이렇게 되면 Client에서는 기능별로 해당 API 가 어디에 위치해 있는지 관리할 필요 없이 api gateway만 바라보게 되고 api 서버에서도 api gateway로드밸런싱이나 응답시간 조절 또는 circuitbreak 같은 기능을 제공해 서버의 안정성을 도모..
7) QueryDsl InlineView(인라인뷰) 해결하기. 결론부터 애기를 하자면 QueryDsl로 인라인뷰는 쿼리를 현재는 구현 할 수 없다. 그럼 어떻게 인라인뷰쿼리의 효과를 만들어 낼까를 고민해 보자. 아래 간단한 인라인뷰 쿼리가 있다. select * from Product p , ( select sp.name from Product sp group by sp.name ) mp where p.name = mp.name 위와 같은 쿼리는 사실 간단히 인라인뷰를 사용하지 않고 조건절에 넣어서 해결이 된다. select * from Product p where p.name in ( ( select sp.name from Product sp group by sp.name ) 이 쿼리를 간단하게 QueryDsl로 바꿔 보자. query.selectFrom(p) ...
6) QueryDsl DB Function 사용하기 Query Dsl로 작성하다가 보면 DB에서 사용하던 DB Function을 사용해야 할때가 있다. 예를 들어 아래와 같이 order by 해야 하는데 "2021-01-01 10:10:10" 인 컬럼값을 "2021-01-01 10" 와 같이 "%Y-%m-%d %H:%i:%s" 인 형태에서 "%Y-%m-%d %H" 로만 변형으로 해서 날짜와 시간으로 정렬을 하고자 할때는 QueryDsl 기본 문법으로 적용이 안된다. 이럴때 아래와 같이 사용하면 해결이 된다. public List findContentsFunctionTest(){ QContents contents = QContents.contents; List contentsList = queryFactory.selectFrom(contents) .orde..
5) Spring Data JPA 5부 - QueryDSL Paging , Sort QueyDsl 로 Pasing 처리를 하기 위해서는 어떻게 처리를 해야 할까? 간단하게 PageRequest parameter를 이용한 방법을 알아보자 먼저 Controller 부분이다. @GetMapping("/findQueryDslPasingTest") public List findQueryDslPasingTest(String productName , String itemName , Pageable pageable) throws Exception { // PageRequest pageRequest = PageRequest.of(0, 3, Sort.by("productName").descending()); List products = userService.findProductByCustom(produc..

반응형