728x90
반응형

리엑티브 함수형 프로그래밍이란

동시성과 병렬성을 해결하는 프로그래밍으로 리액티브나 비동기 요구사항을 명령형 방식으로 만들었을 때 나타나는 콜백 지옥 문제를 해결하는 것이다.


즉 RxJava 를 이용한 리액티브 프로그래밍은 명령형 방식을 이용하지 않고 선언적 접근을 사용한다.


리액티브 프로그래밍이 필요한 순간마우스 움직임이나 클릭, 키보드 타이핑, GPS 신호, 자이로스코프 신호, 터치 이벤트 처리비동기성을 띠는 네트워크 등 지연 I/O 이벤트 응답이벤트나 앞서 나온 사용자 이벤트, 애플리케이션에서 발생하는 이벤트나 데이터를 다룰때


만약 단 하나의 이벤트 스트림만 처리하는 경우는 콜백 기반의 리액티브 명령형 프로그래밍도 괜찮다.

또한 수많은 이벤트 스트림이 서로 독립적인 경우에도 명령형 프로그래밍은 큰 문제는 아니다.


RxJava 는 함수형 프로그래밍과 데이터플로 프로그래밍에 영향을 받아 리액티브 프로그래밍 원칙들을 구체화한 구현이다.


RxJava는 어떻게 동작하는가

데이터나 이벤트 스트림을 나타내는 Observable 타입으로 push / reactive 방식을 선호


즉시동작이 아닌 지연실행 가능하고 비동기와 동기 방식 모두 사용가능하고 시간에 따라 많은 이벤트를 다룰 수 있다.


RxJava 가 리액티브이기 위한 핵심은 밀어내기 인데 Observable과 Observer 타입 시그니처가 이를 지원한다.


밀어내기를 지원하기 위해서는 Observable / Observer 쌍을 subscribe로 연결한다. 


Observer는 구독을 통해 3가지 유형의 이벤트를 받는다.


interface Observer<T>{

void onNext( T t )

void onError( Throwalbe t )

void onComplete()

}


onComplete 가 호출되면 Observable 스트림은 끝나고 더 이상 이벤트를 보낼 수 없다. 


Observable 이벤트 생성의 중요한 기준은 블로킹/논블로킹 여부이지 동기/비동기 여부가 아니다.


동기 방식 계산


동기 방식을 유지하는 일반적인 이유는 스트림 조합과 연산자를 통한 변환 때문이다. RxJava는 데이터를 조작하거나 결합하고 변환을 위한 map() / filter() take() flatMap() groupBy() 같은 연산자로 구성된 방대한 API이다. 이들 연산자의 대부분은 동기 방식이고, onNext 안에서 이벤트가 지나가는 동안 동기 방식으로 계산을 수행한다. 


RxJava Observable의 규약에 의하면 onNext onCompleted onError 이벤트는 동시에 방출되지 않는다. 즉 직렬화된 스레드이다. 


Observable은 lazy해서 어딘가에서 subscribe 하지 않으면 아무것도 하지 않음을 뜻한다. 이는 future와 같이 일단 생성되면 즉시 동작하는 조급한 유형과는 다르다.


이런 특성 때문에 Observable의 객체 생성은 어떤 작업을 유발하지 않고 구독했을때 해야 할 작업을 정의한다.


예제


Observable<T> someData = observable.create(s -> {

getDataFromServerWithCallback(args, data -> {

s.onNext(data);

s.onCompleted();

});

})


someData.subscribe( s -> System.out.prinltn("Subscriber 1: " + s ));

someData.onErrorResumeNext(lazyFallback).subscribe(s -> System.out.println(s));


이게 느긋함의 힘이다. 2번의 구독을 실행할 수 있으며 원하는 상황에서 원하는 데이터를 뽑아낼 수 있다. 



observable 의 특징 

" 소비자가 호출하는 next()로 데이터를 끌어오는 대신 생산자가 onNext(T) 를 통해 데이터를 밀어내고, 모든 항목을 순회하는 동안 스레드를 블로킹하는 대신 onComplete() 콜백을 통해 정상 종료 신호를 보내며 호출 스택에 예외를 던지는 대신 onError(Throwable) 콜백을 통해 오류 이벤트를 방출한다. " 



// 생산자가 소비자에게 밀어낸다 ? 


// 생산자 Observable mouseEvent = ...;


// 소비자 mouseEvent.subscribe() 


그렇다면 왜 observable을 사용하나?


반환해야 할 목록이 작으면 성능상 아무런 문제가 없다. 주관적인 선택일 뿐이지만 목록이 크거나 다양한 데이터 소스를 끌어와 목록 요소를 채워야 한다면 Observable 을 사용했을 때 성능이나 반응 시간 측면에서 이점이 있다.


또한 컬렉션 전체가 도착할 대까지 기다리지 않고 항목을 받는 대로 처리할 수 있기 때문이다. 이는 특히 상이한 네트워크 지연이 각 항목별로 영향을 미치는 경우에 그렇다. 


Rx Observable이 다중 값 스트림을 다루기에는 좋지만 API를 설계하거나 사용할 때는 단일 값 표현이 단순해서 좋다. 


다음 예제를 확인하자


public static void Single<String> getDataA() {

return Single.<String> create( o -> {

o.onSuccess("DataA");

}).subscribeOn(Schedulers.io());

}



public static Single<String> getDataB(){

return Single.jush("DataB").subscribeOn(Schedulers.io());

}



반환값이 필요없는 Completable //


Observable<Void> c = writeToDatabase("data");


static Completable writeToDatabase(Object data){


return Completable.create( s -> {

doAsyncWrite(data,

// 성공적인 완료 시 콜백

() -> s.onCompleted(),

// Throwable을 포함하는 실패 시 콜백

error -> s.onError(error));


});


}


하드웨어 측면에서 블로킹 I/O와 논블로킹 I/O

논블로킹 I/O와 이벤트 루프 방식이 요청별로 블로킹 I/O 스레드를 사용하는 방식보다 효율적인지의 비교해보면


결과적으로 지연시간 처리량의 개선과 인프라스트럭처 비용을 낮출 수 있다. 그리고 부하에 대한 탄력성이 더 좋다. 


RxJava의 타입과 연산자는 명령형 콜백 위에 쌓아올린 추상화이다.


이 추상화로 코딩 스타일을 완전히 바꿔놓으며 비동기 혹은 논블로킹 프로그래밍을 위한 강력한 도구를 제공한다.

출처!

https://derekpark.tistory.com/m/1

RxJava 란 무엇인가

RxJava 리엑티브 자바란 무엇인가 RxJava 는 자바와 안드로이드를 위한 리엑티브 프로그래밍 구현체 함수형 프로그래밍의 영향을 받았기 때문에 함수 구성을 선호함 ( Ramda 형식 ) 전역상태나 부수��

derekpark.tistory.com

728x90
반응형
728x90
반응형


plugin : 웹 브라우저의 일부로서 쉽게 설치되고 사용될 수 있는 프로그램을 말한다. 

오버헤드 : 어떤 처리를 하기 위해 들어가는 간접적인 처리시간, 메모리 등을 말한다. A처리 실행시 10초걸림 --> 안정성 고려하여 부가적인 B라는 처리를 추가 --> 처리시간이 15초걸림 : 오버헤드는 5초가 된다.

컴포넌트 : 소프트웨어의 재사용의 중요성과 필용성을 위해 나온 기술이 컴포넌트 기술이다.  컴포넌트는 독립적인 단위모듈이다.(소프트웨어에서의 재사용 단위)
하나의 컴포넌트는 하나의 클래스로만 작성될 수도 있지만, 여러개의 클래스로도 작성될 수 있다.
컴포넌트 개념을 잘 적용한 소프트웨어란 부품(인터페이스를 구현받은 클래스)만 바꾸어 주어도 오류없이 잘 작동되는 것을 의미한다.







소프트웨어에 대한 사용자 요구사항 중 초기부터 현재에 이르기까지 가장 중요하게 생각되었던 부분은 "자동화", "재사용" 처리이다!!

소프트웨어 규모의 대형화 및 복잡화로 개발비용이 증대 되었고, 일관되지 않은 개발방식!!으로 인해 유지보수성이 악화되었으며, 새로운 기술에 대한 교육과 훈련이 부족하여 SW 개발 및 운영에 많은 문제점이 발생되게 되었다.

이러한 문제를 해결하기 위해 재사용 방식을 높일 수 있도록 다양한 형태의 기술들이 발전되었다.



재사용 방식의 발전

1) 소스 재사용 : 초보적인 재사용 방식으로 과거에 유사한 문제를 코딩한 적이 있거나 비슷한 예제를 다른 코드에서 복사해서 사용하는 방법

2) 재사용 메소드 : 복사/붙이기 방식과 동일한 코드가 여러 클래스에서 나오는 것을 지양하기 위한 방법으로 C언어에서 하던 것처럼 자주 이용하는 기능을 라이브러리로 만들어 재사용하는 방식

3) 재사용 객체 : 기존의 재사용방식(소스 재사용, 재사용 메소드) 들은 자바뿐만 아니라 다른 언어를 사용할 때도 가능한 방식이나, 확장이 쉽지 않은 방식이었다면,
 자바 언어에서는 클래스를 설계하고 상속/확장하는 방식으로 재사용을 진행한다.

4) 디자인패턴 : 클래스의 재사용방식이 객체의 수직적인 재사용 방식이었다면 디자인 패턴은 상황적인 문제를 해결해주는 재사용 방식이다. 공통적인 로직 문제에 대한 일반화된 해결 방법으로 클래스의 재사용이 아니라 메커니즘의 재사용으로 진행되는 방식이다.

5) SW 프레임워크 : 디자인패턴은 상황에 대한 해결은 가능하였지만, 시스템 전체에 대해서는 건건이 직접 패턴을 적용하여 문제를 해결해야 되었다. 이러한 문제점을 해결하기 위해 전체 시스템적 관점에서 표준화된 디자인 패턴을 적용한 설계 및 구현체가 SW 프레임워크이다.




SW프레임워크의 정의 : "무엇을 이루는 뼈대 혹은 기반 구조" --> 사전적 정의..

소프트웨어 개발위기에서 특정한 소프트웨어 개발 영역에서 자주 발생하는 문제점들을 해결하기 위해 경험적으로 축적된 설계 패턴들로써, Best Practice의 모음인 디자인패턴은 해결을 위한 많은 도음울 주었다.
그러나, 디자인 패턴은 실체가 아닌 개념적인 방법만을 제시하고 있는 점에 그 한계가 있다. 반면 프레임워크는 이러한 디자인 패턴을 실체로 구현한 일종의 솔루션이라고 할 수 있다.
최근에는 여기에 다양한 개발 가이드와 개발 도구 등도 함께 제공하여 프레임워크로 볼 수 있다.





전자정부 표준프레임워크의 개요

--> 표준 프레임워크 개발 이전 대부분의 공공정보화 사업에서 대기업의 SW 프레임워크가 도입, 활용되었다. 대기업 SW 프레임워크를 활용했을 때 발생되는 문제점으로는 폐쇄적인 정책으로 인해 자사 SW 프레임워크를 공개하지도 판매하지도 않기 때문에 상호 호환성을 보장하기가 매우 어렵다는 점이다. 즉, A사가 구축한 응용시스템에 대한 구조를 다른 B사가 파악하기 매우 어렵기 때문에 연속사업 혹은 유지보수사업의 사업자 변경을 원천적으로 어렵게 한다는 문제가 있었다. 또한 이미 특정 SW 프레임워크를 활용하여 구축된 소스코드를 다른 SW 프레임워크로 변경은 불가능하기 때문에 SW 프레임워크의 적용은 불가피하게 소스코드의 종속성 문제를 가지게 되었다. SW 프레임워크는 건축물의 철골과 같아서 SW 프레임워크를 교체한다는 것은 기존 건축물을 모두 허물고 철골부터 새로 만드는 것과 같다.


정보시스템이 특정 SW 프레임워크 사용으로 인해 사업자 및 기술 종속성을 가지는 문제점을 해결하기 위해,

개방형 표준을 채택하여 공동으로 활용할 수 있는 SW 프레임워크를 필요로 하게 되었다.

--> 전자정부 표준프레임워크 등장











전자정부 표준프레임워크는 공공사업에 적용되는 SW 프레임워크의 표준을 정립하고, 응용 SW 표준화, 품질 및 재사용성을 높일 수 있는 기반을 제공한다. 

표준프레임워크는   실행,    개발,     관리,     운영    등  4개의 환경과  모바일 표준프레임워크, 그리고 공통컴포넌트로 구성되며,

참조프레임워크로 대표적인 오픈소스 SW프레임워크인 스프링 프레임워크를 채택하였으며!!!!, 이외에도 다양한 OSS를 적용/활용하여 구성되었다.

표준프레임워크는 정보시스템 개발을 위해 필요한 기능 및 아키텍처를 미리 만들어 제공함으로써 효율적인 어플리케이션 구축을 지원한다.









궁극적인 목적 :: "전자정부 표준프레임워크"는 공공사업에 적용되는 개발프레임워크의 표준 정립으로 응용 SW 표준화, 품질 및 재사용성 향상을 목표로 하며,

  이를 통해 "전자정부 서비스의 품질향상" 및 "정보화 투자 효율성 향상"을 달성하고, 대.중소기업이 동일한 개발기반 위에서 공정한 경쟁이 가능하게 된다.


표준프레임워크는 기존 다양한 플랫폼(.NET, php 등)환경을 대체하기 위한 표준은 아니며, java 기반의 정보시스템 구축에 활용하실 수 있는 개발.운영 표준 환경을 제공하기 위한 것이다.


전자정부 표준프레임워크는 자바기반의 정보시스템 개발과 운영 시에 필요한 기본기능들을 표준화하여 미리 구현해 둔 것으로 개발자는 이를 활용하여 업무 기능을 구현한 후 조립함으로써 전체 시스템을 완성할 수 있다.





JDK1.7 을 쓰네..




- 표준프레임워크는 표준으로써 목적을 만족하기 위하여 아래의 규칙을 준수하여 적용하여야 한다.
1. 실행환경은 원칙적으로 변경 없이 활용해야 함.
2. 개발환경은 기능의 변경과 추가에 제약사항 없음.
3. 공통컴포넌트는 변경 가능하나, 표준프레임워크 아키텍처 준수 필요



















728x90
반응형

'STUDY > 프로그래밍언어' 카테고리의 다른 글

cmd : pc정보확인  (0) 2020.09.07
RxJava 란?  (0) 2020.08.18
마이플랫폼(MiFlatform)이란?  (0) 2020.08.18
웹스퀘어(Websquare)란?  (0) 2020.08.18
스칼라(SCALA) 란?  (0) 2020.08.18
728x90
반응형





다른 국내 X-인터넷 솔루션들이 웹 브라우저(IE)를 기반으로 하고 있는데 비해

투비소프트에서 자체 개발한 비즈니스 전용 브라우저를 기반으로 하고 있는

마이플랫폼 3.1은 특히 신속한 데이터 조회를 필요로 하는 금융권에 적합하다.

또한 직원들의 모바일을 통한 적재적시의 업무처리와 이용자(고객)들에게

다양한 모바일 서비스를 지원하고자 하는 물류, 통신, 제조, 의료, 대학 및

공공 기관으로 다양하게 도입돼 이용되고 있다.

자체 개발한 비즈니스 전용 브라우저를 기반으로 한 마이플랫폼은 소스 코드가 윈도우 OS에 독립적이기 때문에 다양한

OS로의 이식이 가능하다. 따라서 한 번의 개발로 웹과 클라이언트 서버는 물론 동시에 다양한 모바일 서비스를 지원하는

국내 유일한 X-인터넷 솔루션이라 게 마이플랫폼의 특장점이다.

투비소프트 부설연구소 이우철 팀장은 “웹 브라우저를 기반으로 한 다른 솔루션들의 경우 웹 브라우저에 독립적이지 못하다.

예를 들면 웹 내에 버그가 생길 경우 웹이 고쳐져야만 해결되는 것처럼 웹이 제공 못하는 기능도 있는데, 마이플랫폼은 기본

OS에 독립적이란 게 다른 솔루션과의 가장 큰 차별점”이라고 설명한다.

마이플랫폼 3.1은 자체 개발한 X-인터넷 개발툴인 PID(Presentation Interface Developer)툴을 지원함으로써

비주얼 베이직, 델파이, 파워빌더와 유사한 인터페이스 및 기능을 제공한다.

특히 PID툴은 개발자들이 소스 코드에 대한 개발 단계별 결과 값을 확인할 수 있어 개발 과정에서의 잘못된 부분을 찾는 데

용이한 라인 디버깅(Line Debugging) 기능과 다양한 프로젝트 폼의 조합을 지원하는 MDI(Multi Documents Interface) 등을

지원함으로써 개발자들의 손쉬운 업무 실현을 돕는다.

실제로 중앙대병원은 다양한 의료 장비와 기존 시스템 자원(컴포넌트)과의 연동을 목적으로 마이플랫폼을 도입해

종합의료정보시스템을 운영중인데, 중앙대병원의 개발자들은 MDI를 이용해 손쉬운 개발과 다양한 응용을 함으로써

개발 생산성을 극대화하고 있다.

투비소프트 이우철 팀장은 “개발 생산성의 핵심은 버그를 찾아내는 속도인데, PID 툴에서 디버깅에 대해서도 추적할 수 있는

라인디버깅 기능을 지원하기 때문에 개발 생산성을 높이는 데 효과적”이라며, “마이플랫폼은 코드 시작과 끝을 찾아내는 기능을

지원하는 국내 유일한 X-인터넷 솔루션” 이라고 강조한다.

 
 
네트워크 트래픽 ‘최소화’로 모바일 환경에서도 ‘탁월’
마이플랫폼 3.1은 최대 80% 데이터 압축으로 네트워크 부하를 감소하고 캐싱 기능을 통해 네트워크 트래픽을 최소화한다.

또 자체 개발한 브라우저를 기반으로 하고 있기 때문에 개발자가 구현한 화면 산출물에 대한 최적화가 가능하다는 게 이우철

팀장의 설명.

현재 조흥은행은 유무선 통합 뱅킹 서비스인 ‘원클릭’ 서비스에 마이플랫폼을 도입해 이용중이다. 기존에 인터넷 뱅킹 시

데이터 조회 속도가 느려 업무를 보는데 고객들이 불편을 겪었지만, 현재 마이플랫폼의 캐싱 기능으로 화면에 부하가 없고,

기존에 비해 데이터 패킷 양이 7배 정도 줄어들어 인터넷 환경이 좋지 않거나 원격지에서도 쾌적하게 사용할 수 있다.

조흥은행 관계자는 “투비소프트의 마이플랫폼을 이용해 인터넷 뱅킹 애플리케이션을 개발했는데, 속도가 빠른 편이다.

남극에 파견돼 있는 연구소에서도 인터넷 뱅킹으로 편리하고 빠르게 계좌 데이터 조회 등 인터넷으로 뱅킹 서비스를 제공받고

있다”고 전했다.

또한 SK텔레콤은 기업전용 모바일 플랫폼인 BCP(Business Common Platform)에 마이플랫폼을 도입했다. 마이플랫폼은

네트워크로 보내지는 데이터를 압축, 전송함으로써 트래픽을 최소화하기 때문에 기업들은 마이플랫폼을 이용해 개발한

데스크톱이나 서버용 애플리케이션을 다시 PDA용으로 전환할 필요 없이 기존에 개발한 애플리케이션을 그대로 모바일

환경에서 사용할 수 있어 시간과 비용, 안정성 측면에서 효과적이다.

대출영업 모바일 시스템에 마이플랫폼을 적용한 한미은행 역시 직원들에게 PDA를 지급, 고객들에게 직접 화면을 보여주면서

설명, 계약 업무를 수행하고 있으며 기업은행, 제일화재, 대한생명 등도 투비소프트의 마이플랫폼으로 유무선을 연동해 타

업체와 차별화된 모바일 서비스로 경쟁력을 강화하고 있다.

마이플랫폼은 암호화해 데이터를 주고받는 강력한 보안인 SSL을 기본 지원함은 물론, 멀티 모니터와 다양한 벤더의 보안

모듈과 연동할 수 있도록 지원한다. 강력한 보안 기능은 투비소프트 마이플랫폼이 금융권 고객을 다수 확보하고 있다는

데서도 알 수 있는 것.

 
 
 
다양한 기기와 연동 가능한 오픈 아키텍처
버추얼 엔진을 기반으로 하는 마이플랫폼은 통신과 일부 컴포넌트를 고객 환경에 맞게 커스터마이징할 수 있다. 모바일 기기를

비롯한 외부기기들과 연동이 가능하며 통신 모듈을 따로 구축할 수 있어 기업들은 통신 부문을 제외하고 애플리케이션을

개발한 후, 추후 마이플랫폼의 통신 모듈을 연동시키면 된다. 때문에 개발자들의 업무 집중 효과도 높다는 설명이다.

또한 보통 웹 애플리케이션에서는 액티브X를 기반으로 그리드, 에디트 박스 등 컨트럴 패널이나 메뉴를 교체하기 위해서는

소스를 바꿔야 하지만, 컴포넌트 방식인 마이플랫폼은 화면 소스를 바꾸지 않고도 컨트롤 메뉴 교체가 가능하다.

그 밖에도 마이플랫폼 3.1은 개발자들에게 4GL 수준의 다양한 UI 컴포넌트를 제공함으로써 개발자들이 손쉬운 애플리케이션을

개발하도록 해 개발 생산성을 향상시킬 수 있다. 또 차트와 OLAP, 리포팅 툴이 내장돼 있어서 각 나라별, 연도별 대화방식으로

데이터를 보고 분석할 수 있고 편리한 프리젠테이션과 보고서 기능 등을 제공하고 있다.

이우철 팀장은 “X-인터넷 솔루션의 중요한 경쟁력은 그리드 기능이다. 마이플랫폼은 고객들이 원하는 그리드 안에서의 기본적인

엑셀 기능은 모두 지원하며 멀티헤더 구현이 가능하다는 점에서 다른 솔루션들과 차별점을 지닌다” 고 전한다.

차트는 별도로 구매해 연동시키면 데이터 바인딩이 가능하지만, 리포팅 툴은 다른 제품이 별도 판매를 하는데 반해 마이플랫폼은

기본으로 내장하고 있어 비용상 경제적이라고 이우철 팀장은 덧붙인다.

또 마이플랫폼은 ‘마이푸쉬 서버’와의 통신 기능이 기본 제공되는데, 이는 비즈니스 서비스에서 생성된 데이터를 클라이언트에

메시지 형태로 신속하게 전송해준다. 예를 들어 증권사에서 주식 시세가 바뀔 때마다 사용자의 클라이언트 화면에 신속하게

알려줄 수 있는 것이 마이푸쉬 서버로, 이 제품은 별도 판매된다.

이우철 팀장은 “마이플랫폼은 ‘클라이언트 툴’ 이므로 서버가 무엇이든 다 접목시킬 수 있다. 마이푸쉬 서버처럼 패키지 형태로

구축하면 개발 기간이 줄고, 비용도 감소해 훨씬 효과적”이라고 강조한다.

또 RFID가 화두인 제조나 물류, 유통업체에서는 마이플랫폼이 내장돼 있는 ‘마이 RFID’를 도입함으로써 마이플랫폼과 RFID를

동시에 구현할 수 있다.
투비소프트는 올해 마이플랫폼이 어떤 환경에서도 신속하게 구축될 수 있도록 하기 위해 마이크로소프트 환경에 독립적인

개발 방향을 강화한다는 방침이다.

투비소프트 마이플랫폼 3.1모바일을 비롯한 외부기기들과의 연동이 가능하고, 데이터 압축으로 네트워크 트래픽을 최소화함으로써 한 번 개발된 애플리케이션을 변환 없이 모바일에서도 사용할 수 있다. PID툴, 라인디버깅 기능, 다양한 UI 컴포넌트를 제공한다.

+ 유무선 연동 및 모바일 서비스 지원; 자체 개발한 PID툴 지원; 라인 디버깅 기능 및 MDI 제공; 네트워크 트래픽 최소화; 4GL 수준의 다양한 UI 컴포넌트 제공; 리포팅툴 기본 탑재

- 윈도우 OS에 대한 종속성을 벗어난다는 취지에서 사용하고 있는 전용 브라우저가 기업 고객들에게는 또다른 구속이 될 수도 있다

비교 대상 쉬프트정보통신 가우스 닷넷 4.0


728x90
반응형

'STUDY > 프로그래밍언어' 카테고리의 다른 글

RxJava 란?  (0) 2020.08.18
전자정부프레임워크 란?  (0) 2020.08.18
웹스퀘어(Websquare)란?  (0) 2020.08.18
스칼라(SCALA) 란?  (0) 2020.08.18
AXI 란?  (0) 2020.08.18

+ Recent posts