이번 글에선 이론적으로 WebFlux가 Spring MVC에 대비해 어떤 이점이 있는지 분석하고, 외부의 performance Test를 이러한 이론을 증명하겠습니다. WebFlux를 사용하는 이유는? - aync & Non-blocking방식으로 인해 cpu, Thread, memory등의 리소스 낭비 없이 효율적으로 동작한다. - 서비스간 호출이 많은 MSA에 적합하다. spring webmvc vs webflux webmvc - Blocking & sync - 사용자의 요청이 들어올 때 마다 Thread를 생성하여 처리(multi thread) - Thread Pool에서 미리 스레드를 일정 갯수 생성하고 사용(스레드 생성, 삭제 비용의 절감) - 요청이 들어오면 Queue 에 쌓고 순서에 따라서 ..
Spring에서 Reactive Stack과 Servlet Stack의 차이점과 장단점은 다음과 같다. Servlet Stack: Servlet Stack은 전통적인 방식으로 웹 애플리케이션을 처리하는 기술 스택이다. Servlet 컨테이너를 기반으로 동작하며, 요청마다 쓰레드를 생성하여 처리한다. 각 쓰레드는 독립적으로 요청을 처리하고 응답을 반환한다. 장점: - 잘 알려진 기술 스택: Servlet은 오랜 기간 동안 사용되어온 기술로, 많은 개발자들이 익숙하다. - 간편한 개발: Servlet API를 사용하여 간단한 웹 애플리케이션을 구축할 수 있다. - 기존 라이브러리와의 호환성: 많은 서드파티 라이브러리들이 Servlet 기반으로 개발되어 있으며, 기존에 작성된 코드를 쉽게 통합할 수 있다. 단..
이번 글에선, 간단하게 성능 지표관련된 지표 2가지를 알아보겠다. Throughput: 시간당 처리량을 의미한다 흔히 TPS라고도 불리며, 초당 처리하는 단위 작업, 혹은 HTTP 요청들으로 해석할 수 도 있다. TPS: 초당 완료되는 트랜잭션의 수. 많은 작업을 동시에 처리할 수 있는 동시성에 관한 성능을 나타낸다. Latency 하나의 패킷이 출발지에서 도착지까지 걸리는 시간이다. 사용자의 체감 시간과 관련되어있다. 각 지표가 실제 성능에 미치는 영향 ThroughPut 위와 같이, DB, WAS의 성능을 개선하더라도, 웹서버의 ThroughPut이 그대로라면, 여전히 500이라는 TPS에 제한이 걸리는 병목현상이 발생한다. 따라서 맹목적인 성능 향상도 좋지만, 이와 같은 Critical Path를 ..
이번 글에선 스프링 AOP를 실제로 사용할 때, 주의해야할 사항들에 대해 살펴보자. 스프링 AOP를 프록시 방식의 AOP를 사용하기에 다음과 같은 문제점들이 있다. 1) 내부 호출시 실제 객체를 사용하여 프록시 적용이 안되는 문제 2)프록시 기술 자체의 한계 프록시와 내부 호출 - 문제 스프링은 프록시 방식의 AOP를 사용한다. 따라서 AOP를 적용하려면 항상 프록시를 통해서 대상 객체(Target)을 호출해야 한다. 이렇게 해야 프록시에서 먼저 어드바이스를 호출하고, 이후에 대상 객체를 호출한다. 만약 프록시를 거치지 않고 대상 객체를 직접 호출하게 되면 AOP가 적용되지 않고, 어드바이스도 호출되지 않는다. AOP를 적용하면 스프링은 대상 객체 대신에 프록시를 스프링 빈으로 등록한다. 따라서 스프링은..
어노테이션 기반 개발의 예제를 몇가지 만들어보자. @Trace: 로그 출력 @Retry: 예외 발생해도 일정 횟수 재시도. 과 같은 유용한 AOP를 만들어보자. 우선, AOP를 적용할 예제를 만들어보자. Repository 5번에 1번은 실패하는 Repository를 구성한다. @Repository public class ExamRepository { private static int seq = 0; /** * 5번에 1번 실패하는 요청 */ public String save(String itemId) { seq++; if (seq % 5 == 0) { throw new IllegalStateException("예외 발생"); } return "ok"; } } Service 단순히 Repository를 ..
https://codenme.tistory.com/115 스프링 핵심원리-고급편 6 [@Aspect AOP] https://codenme.tistory.com/114 스프링 핵심원리-고급편 6 [빈 후처리기] https://codenme.tistory.com/113 스프링 핵심원리-고급편 5 [스프링에서의 프록시: beanFactory] https://codenme.tistory.com/111 스프링 핵심원리-고 codenme.tistory.com 위의 글과 이어지는 내용입니다. AOP 소개 - 핵심 기능과 부가 기능 핵심 기능과 부가 기능 애플리케이션 로직은 크게 핵심 기능과 부가 기능으로 나눌 수 있다. 핵심 기능은 해당 객체가 제공하는 고유의 기능이다. 예를 들어서 OrderService 의 핵심 ..