거꾸로 바라본 세상
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..

article thumbnail
1. Spring프로젝트 생성 후 초기작업 mybatis+mysql 셋팅
Spring 2015. 12. 5. 18:19

# 사전작업 eclipse에서 Spring Project-> Spring MVC Project 로 프로젝트 생성 1. 프로젝트 우클릭 -> Properties ->JavaCompiler (1) JDK Compliance에서 Use compliance from execution environment .... 체크 해제 후 (2) compiler compliance leve을 1.8로 변경. 왜냐하면 난 JDK 1.8을 사용하고있으니.. 2. 프로젝트 우클릭 -> Properties -> Project Facets Java 버전을 1.8로 변경 3. pom.xml 에서 java버전을 바꿔줌이왕이면 스프링 프레임워크 버전도 맞게 변경. 난 4.2.2를 사용하니.1.84.2.2.RELEASE1.6.101.6.6..