Spring AOP를 활용하여 CircuitBreaker를 구현해 보자. Annotation 기반의 AOP를 활용하기 위해 Annotation과 Aspect를 다음과 같이 만들어주자. @Target({ ElementType.METHOD, ElementType.TYPE }) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface CircuitBreaker {} @Aspect @Component public class CircuitBreakerAspect { @Around("@annotation(com.ms.circuitbreaker.CircuitBreaker)") public Object round(ProceedingJoinPoint joinP..
Spring
언젠가부터 무한 스크롤을 이용한 페이징 방식이 우리들에 스며들기 시작했다. 이는 과거의 1, 2, 3... 의 페이지를 클릭하여 다음 콘텐츠를 보는 것이 아니라, 페이스북처럼 마지막 콘텐츠를 보게 되면 다음 페이지가 로딩되어 보이는 것을 의미한다. 그러나 SNS에서는 일반적으로 사용하는 Offset 기반의 페이징을 사용하게 되면 문제가 생길 수 있다. Offset Based Pagination SELECT * FROM BOARDS ORDER BY ID DESC LIMIT 0, 10; SELECT * FROM BOARDS ORDER BY ID DESC LIMIT 10, 10; SELECT * FROM BOARDS ORDER BY ID DESC LIMIT 20, 10; 위의 쿼리를 해석해보면 최신 게시글의 ..
위 그림은 DZone 게시글 중 하나인 Spring WebFlux를 이용한 Boot2와 Spring MVC를 이용한 Boot1을 비교한 그래프이다. 해당 그래프에서는 두 가지 특징을 볼 수 있다. 첫 번째로는 유저가 적을 때에는 성능에 별반 차이가 없다. 두 번째로는 유저가 늘어나면 늘어날수록 극명한 성능 차이를 보여주고 있다. 어떻게 이런 차이가 일어날 수 있을까? 본글은 아래의 구성을 가지고 있다. I/O Event-Driven Spring Framework 먼저, 1과 2를 통해서 원리를 알아본 다음 3에서 이를 접목시켜서 위의 그래프가 나올수 있는 이유를 설명할 것이다. I / O Why was Spring WebFlux created? Part of the answer is the need f..