본문 바로가기

반응형

전체 글

(63)
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..
4) Spring Data JPA 4부 - QueryDSL Predicate 활용 앞에서 간단히 QueryDsl 사용법에 대해 알아 봤는데 . 요기서 조금더 실무에서 자주 쓰이는 방법에 공부해 보자. Predicate 를 직역하면 "서술어" 라고 하는데 즉 where 에 들어가는 조건문을 나타낸다고 생각하면 된다. Predicate 는 보통 where 문을 작성할때 Parameter의 Type 및 값 유무에 따라 조건을 다르게 하고 싶을 사용하게 된다. 아래 샘플 Predicate 를 참조. package com.devracoon.jpa.repository; import com.devracoon.jpa.entity.QItem; import com.devracoon.jpa.entity.QProduct; import com.querydsl.core.BooleanBuilder; import..
2) Spring Redis Cache적용하기 - 2부 Redis CacheEvict allEntries=true 문제해결 1부에 간단하게 Redis cache 를 이용하는 방법과 설정 방법에 대해 알아 보았다. 1부에서 보면 cacheable 된 데이터를 cacheEvict 하는 옵션중에 allEntries= true 라고 되어 있는데 실제 운영 Redis에서는 성능상의 문제로 allEntries=true 했을때 실행되는 Redis Command 가 사용하지 못하게 막혀있기 때문에 대부분의 운영서비스에서는 사용하지 못한다. 그러면 어떻게 해당 cache value에 대한것들을 다 지울수 있을까 하는 고민이 생기게 된다. 먼저 allEntries=true를 사용하지 못할때 어떤 문제가 생기는지 확인해 보자. 1) findAll로 List 데이터를 조회 한다. 2) 조회한 list중 하나를 삭제한다. 3)다시 findAll 로..
1) Spring Redis Cache적용하기 - 1부 Springboot 설정 cache 종류는 여러가지 있겠지만 주로 많이 쓰는 cache중 하나가 바로 Redis 이다. 여기서는 Redis서버의 설치와 설정은 다루지 않고 Springboot 설정을 어떻게 하고 어떻게 사용을 하는지에 대해 공부해 본다. 먼저 로컬에 Redis서버를 설치해야 되나? 아니다. Springboot 에 로컬에서 사용하기 위해 임베디드 Redis 를 지원하는 라이브러리가 있다. 이것을 이용해서 간단히 로컬서버를 띄울때 Redis 서버를 띄우고 연결하는 방법을 알아 본다. 1) build.gradle 에 redis dependency추가 2) redis server에 필요한 설정 application.yml 에 추가 3) redis configuration 추가 4) 서버 실행 및 테스트 코드 작성후 테스..
2) Springboot OncePerRequestFilter 와 GenericFilterBean의 차이 앞에 1부에서 간단히 springboot에서 Filter 등록하고 사용하는 방법에 대해 알아 봤다. 앞의 예제에서 보면 아래와 같은 흐름으로 동작을 하는것을 알 수있다. 1) api 1 호출 request 2) first , second filter 3) api1 controller 요청받음. 요청 처리 후 , api2로 sendRedirct 함. 4) 다시 first , second filter를 탐 5) api2 controller 요청받음. 요청 처리후 response 이런 흐름을 보여주고 있다. 여기서 문제점은 실제 요청자는 요청을 한번만 했을뿐인데 흐름상 요청을 두번한것과 같은 형태가 되어 있다. first 와 second 의 필터가 어떤것이냐 하는 상황에 따라 다르겠지만 간단히 인증처리를 하는..

반응형