거꾸로 바라본 세상
article thumbnail
[Srping] Webflux
Spring 2023. 5. 2. 09:43

WebFlux Webflux는 Reactive system을 개발하기 위하여 Spring에서 제공하는 라이브러리이다. Spring Framework는 원래 Servlet API, 컨테이너용을 간단하고 편리하게 사용하기 위해 개발된 프레임워크였다(spring-webmvc를 제공). 그리고 근본은 Blocking, Synchronous(동기)방식이다. 추후 Servlet 3.1에서 비동기 처리 방식을 지원했지만, 서블릿은 응답을 기다리는 동안 Pool안에 있는 스레드를 지연시킬 수 있어서 Reactive해야 하는 요구를 충족하지 못햇다. 그래서 스프링 5.x 버전부터 Spring WebFlux가 추가되었고 웹 요청 처리를 Reactive하게 다루고 Non-Blocking을 구현할 수 있도록 초점을 맞추고 있..

[Srping Reactor] 리액티브 오퍼레이션
Spring 2023. 5. 2. 09:29

리액티브 오퍼레이션 Flux와 Mono는 리액터가 제공하는 가장 핵심적인 구성요소이며, 이 오퍼레이션들은 두 타입을 함께 결합하여 데이터가 전달될 수 있는 파이프라인을 생성한다. Flux와 Mono에는 500개 이상의 오퍼레이션이 있으며 각 오퍼레이션은 다음과 같이 분류된다. 생성(Creation) 오퍼레이션 조합(Combination) 오퍼레이션 변환(Transformation) 오퍼레이션 로직(Logic) 오퍼레이션 마블 다이어그램을 보려면 해당 사이트에 가면 볼 수 있다. (https://rxmarbles.com/#from) 1. 생성(Creation) 오퍼레이션 데이터를 생성하여 방출할 때 사용. 객체로부터 생성 Flux나 Mono로 하나 이상의 객체를 생성하려면 just() 메서드를 사용한다....

Spring Reactor 시작하기
Spring 2023. 5. 2. 09:27

Spring Reactor 리액티브 프로그래밍은 일련의 작업 단계를 기술하는 것이 아니라 데이터가 전달될 파이프라인을 구성하여 데이터가 전달되는 동안 어떤 형태로든 변경 또는 사용되는 것. 사람의 이름을 가져와 대문자로 변경 후 출력 String name = "devPaik"; String capitalName = name.toUpperCase(); String greeting = "Hello, "+ capitalName + "!"; System.out.println(greeting); Mono.just("devPaik") .map(n -> n.toUpperCase()) .map(cn -> "Hello," + cn + "!") .subscribe(System.out::println); 위와 같이 리엑티브..

[Spring] Reactive Stream 개요
Spring 2023. 5. 2. 09:22

리엑터 개요 애플리케이션 코드를 개발할 때 명령형(Imperative)과 리엑티브(Reactive) 두 가지 형태로 코드를 작성할 수 있다. 명령형 : 순차적으로 연속되는 작업이고, 각 작업은 한 번에 하나씩 그리고 이전 작업 다음에 실행한다. 데이터는 모아서 처리되고 이전 작업 데이터 처리를 끝낸 후에 다음 작업으로 넘어갈 수 있다. 리엑티브(반응형) : 데이터 처리를 위해 일련의 작업이 병렬로 실행될 수 있으며, 각 작업은 부분집합의 데이터를 처리할 수 있고, 처리가 끝난 데이터는 다음 작업에 남겨주고 다른 부분집합의 데이터로 계속 작업할 수 있다. 이런 리액터 프로젝트는 비동기 파이프라인을 구축할 때 콜백 지옥과 깊게 중첩된 코드를 생략하는 목적으로 설계되었다. 리액터 1.x는 배압조절 기능이 없다..

article thumbnail
@EventListener를 사용한 발행-구독 패턴
Spring 2023. 5. 2. 09:15

@EventListener를 사용한 발행-구독 패턴 스프링 프레임워크는 @EventListener 어노테이션과 이벤트 발행을 위한 ApplicationEventPublisher 클래스를 제공한다. Observer Pattern과 달리 발행-구독 패턴을 이용하면 게시자와 구독자는 서로 알 필요가 없다. 그리고 게시자와 구독자 간에 간접적인 계층을 제공하고 구독자는 브로드캐스트하는 이벤트 채널로부터 받고, 게시자는 누군지 신경쓰지 않는다. 이벤트 채널은 동시에 몇 명의 게시자가 있는지 알 수 있으며, 수신 메시지를 구독자에게 배포하기 전에 필터링 작업을 할 수도 있고, 필터링 및 라우팅은 메시지 내용이나 메시지 주제, 때로는 둘 다 발생할 수 있다. 따라서 토픽 기반 시스템(Topic-Based System..

AOP(Aspect Oriented Programming)
Spring 2023. 3. 31. 01:55

AOP(Aspect Oriented Programming) AOP는 '관점 지향 프로그래밍'이라 불리며, 객체 지향 프로그래밍(OOP)의 부족한 부분을 보완하기 위해 등장한 프로그래밍 패러다임이다. AOP는 OOP와 달리 횡단적 관심사(cross-cutting concern)를 분리하여 모듈화하고, 이를 필요한 부분에 적용하는 방식으로 동작합니다. 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나눈 후 나눈 관점으로 분리한 기준들을 모듈화(공통된 로직) 핵심적인 관점: 개발자가 적용 하고자 하는 비지니스 로직 부가적인 관점: 핵심 로직을 수행하기 위한 로깅, 보안, 트랜잭션 처리 등 관심사는 'Aspect'라는 단위로 추상화하며, 이 Aspect를 프로그램 코드에 적용하는 방식으로 동작한다. A..

[Spring Framework] IOC/DI
Spring 2023. 3. 29. 23:47

IOC/DI 제어의 역전(IoC) / 의존성 주입(DI) 은 객체 지향 프로그래밍에서 오브젝트의 생명주기와 의존관계를 외부에서 관리하는 프로그래밍 모델을 말한다. 1. IOC Inversion of Control이라는 용어로 제어의 역전이라고 한다. 개발자가 객체의 생성 또는 생명주기를 직접 제어하는 하지 않고 외부에서 객체를 생성하고 제어 및 관리하여 객체간의 의존성을 해결하한다. 즉, 제어권한을 다른 대상에게 위임하는 것을 말한다. (Bean을 관리해주는 Container) 이를 통해 객체 간의 결합도를 낮추고 유연성과 확장성을 높일 수 있다. 스프링 프레임워크 에서는 IOC Container가 존재하며 ApplicationContext와 Bean Factory라는 핵심 컨테이너가 있다. Bean을 ..

[스프링] 자동으로 빈 와이어링하기(Bean Auto Wiring)
Spring 2018. 11. 19. 10:53

[스프링] 자동으로 빈 와이어링하기(Bean Auto Wiring) 빈 와이어링 설정하는 방법은 2가지가 있다. 1. Component Scanning : Spring Application Context에서 생성되는 빈을 자동으로 설정2. Auto Wiring : 스프링이 자동으로 빈 의존성을 충족시키는 것. 1. Component Scanning (1) XML을 이용한 방법 (2) 클래스에서 @ComponentScan을 이용한 방법 (2) XML을 이용한 방법 - 을 이용하면된다. (2) 클래스에서 @ComponentScan을 이용한 방법- @ComponentScan(basePackages="패키지명") 을 사용하면된다. @Configuration //@ComponentScan("com.spring.s..

스프링 목적과 DI 정의
Spring 2018. 11. 16. 16:45

스프링의목적 - 자바개발의 간소화(1) POJO를 이용한 가볍고(lightweight) 비 침투적(non-invasive) 개발(2) DI와 인터페이스 지향(interface orientation)을 통한 느슨한 결합도(loose coupling)(3) 애스펙트와 공통 규약을 통한 선언적(declarative) 프로그래밍(4) 애스팩트와 탬플릿(template)을 통한 반복적인 코드 제거 - 스프링은 API를 이용하여 애플리케이션 코드의 분산을 가능한 한 막는다.- 스프링에 특화된 인터페이스 구현이나 스프링 자체에 의존성이 높은 클래스 확장을 거의 요구하지 않는다.(최악의 경우 Annotation이 붙음) DI(Dependency Injection) : 의존성 주입- 구성요소간 의존관계가 소스코드 내부가..

FactoryBean을 사용해야하는 경우와 사용예제(link)
Spring 2016. 5. 26. 17:18

http://www.javajigi.net/pages/viewpage.action?pageId=1044