Spring

· Spring
Spring Batch 4.0에서 약 5년의 세월이 흘러 Spring Batch 5.0으로 메이저 버전이 업데이트되었다. 어떤 기능들이 개선되고, 생겼는지 알아보도록 하자. 의존성 Spring Batch5는 Spring framework 6을 의존하기 때문에 최소 Java 17이 필요하다. 그 외에 3rd Party 의존성은 다음과 같다. Spring Framework 6 Spring Integration 6 Spring Data 3 Spring AMQP 3 Spring for Apache Kafka 3 Micrometer 1.10 다양한 JobParemeter Type 드디어(?) 다양한 JobParemeter type을 제공한다. 4.x 버전까지는 4개의 Type(Long, Double, String..
· Spring
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
환경설정 필자는 gradle을 사용했고, 아래와 같이 webflux, actuator, prometheus 등의 dependency 설정이 필요하다 dependencies { implementation 'org.springframework.boot:spring-boot-starter-actuator' implementation 'org.springframework.boot:spring-boot-starter-webflux' runtimeOnly 'io.micrometer:micrometer-registry-prometheus' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementa..
· 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; 위의 쿼리를 해석해보면 최신 게시글의 ..
· Spring
위 그림은 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..
· Spring
Spring Cache 구현방식에 대해서 살펴보자. 최근 회사에서 spring-cache의 @Cacheable을 사용하게 되었다. 사용하다 보니 토비의 스프링에서 본 관심사의 분리와 AOP와 겹쳐서 머릿속의 생각을 코드와 글로 써보려 한다. 글로 다 표현하기에는 한계가 있는 듯하니 Github source와 함께 보면 좀 더 도움이 될 것 같다. 그리고 Test code도 작성하였으니, 이걸 통해서 Test를 하면 될 것 같다. (단, cache의 유무만 중요하기에 assert문은 작성하지 않고, log만 찍었다.) 요구사항은 다음과 같다. 나는 글로벌 게임을 만들고 있고, 유저들에게 웹사이트에서 랭킹을 보여주어야 한다. 단, 이용자는 100만 명을 넘기 때문에 모든 이용자를 Scan 해서 순위를 실시간..
· Spring
Apache Dubbo고성능, 가벼운 Java 기반 오픈 소스 RPC 프레임워크Interface 기반의 원격 호출(remote call)fault tolerance, load balancingService 자동 등록 및 감지 (Service Registry)RPC란?Remote Procedure Call외부 서비스를 함수나 메소드를 통해 호출하는 형태부가설명 분산서비스시 외부 서비스는 주로 HTTP를 통해 호출을 한다. 그리고 Application 레벨에서 header, body를 조작한다. 그러나 RPC는 마치 메소드를 호출하듯이 외부 서비스를 사용할 수 있는 간편함을 가지고 있다.백문이 불여일타! 직접 코드를 작성해보자. 필자는 Spring boot와 편의상 maven 멀티모듈 구조를 통해서 코드를 ..
· Spring
먼저, AOP가 뭔지에 대해 알아보자. Aspect-Oriented Programming 이란 프로그램 구조에 대해 또 다른 사고방식을 제공함으로써 Object-Oriented Programming을 보완한다. OOP 모듈성의 핵심 단위는 클래스인 반면, AOP는 모듈화 단위가 관점(Aspect)이다. @Transactional이 대표적인 예이다. 공통의 기능(트랜잭션)을 분리 및 모듈화하여 여러 코드(insertUser, selectMoney)에 쉽게 적용할 수 있게 해준다. 특정 계정의 ID와 token을 통해 유효한지 확인하는 코드가 프로젝트 전반에 산재해 있다고 가정을 해보자. 그리고 이를 비즈니스 코드와는 크게 관계없는 하나의 공통된 관점으로 판단을 하고, AOP를 적용시켜보자. 자세한 코드는 ..
AlwaysPr
'Spring' 카테고리의 글 목록