Web Service-SOAP

IT 2017. 11. 28. 09:40

요즘은 REST가 대세이긴 하지만,

SOAP도 나름대로의 장점이 있다. 이 기종간 명확한 spec기반의 통신이 가능하다.


SOAP을 위해서, WSDL을 먼저 생성하는 게 좋은데

eclipse나 IDEA에서도 생성이 가능하지만


oXygen XML 에디터가 좋아보인다.



생성된 WSDL기반으로 테스트 하기에는 SOAP UI라는 툴이 좋아 보인다.  REF

다운로드는 https://www.soapui.org/  에서 Download로 들어가면 SoapUI OpenSource가 있다. 

Posted by yongary
,

login 관리

Spring 2017. 11. 20. 21:59

Login구현시에는 cookie + session을 섞어서 쓰는게 일반적이다. REF


쿠키는  날짜를 지정가능

세션은  id/비번등 주요정보 저장 가능.  단 브라우저 종료시 사라짐. 


즉,

세션이 브라우저 종료시 사라지는 문제가 있으므로, 

쿠키를 이용해 이를 보완해야 한다.  쿠키에 날짜/시간이 지정 가능하므로 이를 이용해서 세션ID등을 저장해 보완하면된다.




Posted by yongary
,

Column

Hadoop 2017. 11. 18. 20:42

 String은 ENCODING STRING으로

 숫자는   ENCODING BINARY로 하는 게 속도가 빠름.


REF

CREATE HBASE TABLE enc_str (
   ti TINYINT, si SMALLINT, i INT,
   bi BIGINT, b BOOLEAN, f FLOAT,
   d  DOUBLE, s1 STRING, s2 STRING,
   s3 STRING, s4 STRING, s5 STRING
) 
COLUMN MAPPING ( 
   KEY MAPPED BY (s1,ti,bi,i) ENCODING STRING,
   f1:a MAPPED BY (si,s2,f) ENCODING STRING, 
   f1:b MAPPED BY (d,b,s3) ENCODING STRING,
   f1:c MAPPED BY (s4,s5) ENCODING STRING
);


Posted by yongary
,

가벼운(lightweight) 확장가능한 data shippers.  data를 수집하고 shipping.

  (logstash가 무겁기 때문에 가볍게 만든 agent?)



Libbeat - 기본 라이브러리 

   Config

   Setup

   Run  - 데이타를 elasticSearch나  logstash로 전송. 

   CleanUp

   Stop  

   의 함수들을 구현(override)하면 새로운 beat을 만들 수 있음.



Packetbeat - 클라이언트에서 서버로 보내지는 데이타를 수집 

Topbeat - 시스템정보 수집

 -> 5.0부터 MetricBeat로 바뀜.


그외에도 각종 beat들이 만들어지고 있음.



  나만의 beats만들기 REF REFY



Posted by yongary
,

Pheonix

Hadoop 2017. 11. 16. 10:18

Hive가 batch오리엔티드인데 반해

Phoeix는 real-time Query도 수행하도록 만든 빠른 레이어이다.

  -query를 HBase scan으로 만들어 빠르게 수행한다. 

  -HBase API를 바로 사용도 가능. 

 ==> 그냥 jdbc 드라이버+SQL지원 정도의 용도로 많이 사용한다.



----------------------------------- 

Phoenix : RDB 레이어 over hBase.

 - Query engine + Metadata 저장소.

 - JDBC driver 제공.


 - Hive와 같이 join등 제공. 


 <Secondary index 방식 3가지>

 - write only / + append 방식 

 - global for read-heavy mutable data

 - local for write-heavy mutable or immutable


각종 join모두 지원.


 

Phoenix Calcite ? 


----View생성 from HBase 테이블:  이름  transactions, ColumnFamily:transactions일때

 CREATE VIEW "TransactionHistory" (k VARCHAR primary key, "Transactions"."transactionId" VARCHAR);. 

 =>  Select "transactionId" from "Transactions" 

      그리고 ALTER VIEW명령어로 column추가 가능.   

  

  REF


======Sqlline 사용한 shell 이용 방법====

   $cd /usr/hdp/current/phoenix-client/bin/

   $./sqlline.py  

  pnix> !tables

  pnix> select * from MY.MY_TABLE


0: jdbc:phoenix:> help

!all                Execute the specified SQL against all the current connections

!autocommit         Set autocommit mode on or off

!batch              Start or execute a batch of statements

!brief              Set verbose mode off

!call               Execute a callable statement

!close              Close the current connection to the database

!closeall           Close all current open connections

!columns            List all the columns for the specified table

!commit             Commit the current transaction (if autocommit is off)

!connect            Open a new connection to the database.

!dbinfo             Give metadata information about the database

!describe           Describe a table

!dropall            Drop all tables in the current database

!exportedkeys       List all the exported keys for the specified table

!go                 Select the current connection

!help               Print a summary of command usage

!history            Display the command history

!importedkeys       List all the imported keys for the specified table

!indexes            List all the indexes for the specified table

!isolation          Set the transaction isolation for this connection

!list               List the current connections

!manual             Display the SQLLine manual

!metadata           Obtain metadata information

!nativesql          Show the native SQL for the specified statement

!outputformat       Set the output format for displaying results

                    (table,vertical,csv,tsv,xmlattrs,xmlelements)

!primarykeys        List all the primary keys for the specified table

!procedures         List all the procedures

!properties         Connect to the database specified in the properties file(s)

!quit               Exits the program

!reconnect          Reconnect to the database

!record             Record all output to the specified file

!rehash             Fetch table and column names for command completion

!rollback           Roll back the current transaction (if autocommit is off)

!run                Run a script from the specified file

!save               Save the current variabes and aliases

!scan               Scan for installed JDBC drivers

!script             Start saving a script to a file

!set                Set a sqlline variable

  => !set maxWitdh 200    :  Terminal 가로 출력 길이 세팅.


!sql                Execute a SQL command
!tables             List all the tables in the database
!typeinfo           Display the type map for the current connection
!verbose            Set verbose mode on


Posted by yongary
,

HBase & Hive

Hadoop 2017. 11. 14. 17:35

HBase는 ByteArray 베이스의 NoSQL이면서 [Columnal DBMS임]    RefY

  - MemStore와 HFile에 저장. 

  - Bloom Filter라는게 HFile마지막에 저장되면서 속도를 냄. (옵셔널)

  - ColumnFamily라는 개념이 존재. (prefix맞춰서 columnFamily로 만들면.., 자동으로 timestamp같은게 기록된다고라)

         sameID:  (cf:name  timestamp value=kim)
         sameID:  (cf:score timestamp value=50)    내부적으론 이런식으로 dup해서 기록된다고 하네요.. 흠. REFY

     ColumnFamily는 저장소 분리 및 압축에 사용됨. (유사한 type들을 모아놓아야 columnFam단위로 압축이 되거나 안되거나 함)

  

  - extremely Low Latency & Low time delay.. 

  - MapReduce와는 별도로 실행도 가능하고, 동시에 실행도 가능하다. (not mutually exclusive)


  실행) $sudo /etc/init.d/hadoop-hbase-master start

 

 ====hbase shell=============

         $hbase shell

           hbase> list   (ALL hbase Table listing)

           hbase> desc 'MY:TABLE' 

           hbase> scan 'MY:TABLE'   ( log라는 테이블 전체 조회)

           hbase> 


         

설계 룰: 

  - 가능한 적은 table을 만든다

  - up front디자인에 많은 시간 투자!

  - data loading은 최소한으로 한다.(모아서)   


(Java API 지원)

   Put = new Put()

   Get = new Get()




---------------

Hive 은 ETL(Extract, Transform, Load) 툴.-> query타임이 중요치 않을때 사용

Hbase 는 온라인 access가 가능한 DB. -> query타임이 중요할 때 사용.


hive 예제. $hive 이후에   REFY

         hive> add jar file:///usr/lib/hive-0.13.1-bin/lib/hive-contrib-0.13.1.jar;

         hive> load data inpath 'hdfs:/wiki-access.log'

         hive> select * from access;


                   ㅁ hBase/hive mapping된 테이블 생성

         

                                                          hive에는 hbase_table_access테이블을,  hbase에는 log테이블을 생성. 

Posted by yongary
,

hortonworks sandbox

Hadoop 2017. 11. 8. 17:31


실습REF   REF

===> hadoopexam.com 에 가면 각종 예제 많이 있음.

        아, 그리고 windows의 경우 BIOS셋업에서 Virtual Technology를 Enable시켜야 하는 경우 있음. 



hortonworks의 sandbox는  HDP(hortonworks Data Platform) 및 관련된 sw들이 모두 다 설치되어 있는 VM으로서

다운로드 받아서 VirtualBox같은 환경에서 실행만 하면  HDP의 모든 서비스를 바로 사용할 수 있다.


(용도는 test용일까, 상용일까?   상용도 가능하겠지요.. 이부분 공부 중.)



centOS환경으로 제공되며, 실행후에는

localHost와 여러 포트가 portMapping이 되어 있으므로


http://localhost:8888  or 8080(Ambari)  (maria_dev/maria_dev) 등으로 바로 실행가능하고, 

ssh root@localhost -p 2222  (root/hadoop)  로 접속도 가능하다.





Posted by yongary
,

Spring web Reactive

Spring 2017. 10. 30. 22:52

(spring에서 reactive 가능한 방식들)


1.  DeferredResult +  RxJava  + CompleteFuture   Ref


2. webFlux  using Mono or Flux 


===================================================

infoQ_lecture Ref1

  

  - WebFlux에서 사용하는 reactor프로젝트의 

    Mono는 backPressure도 지원한다.     (RxJava의 single은 지원하지 않음)


    Flux는 RxJava의 observable과 비슷.. 무한개의 데이타를 지원함..(메모리 안쓰니까..)



그리고, RxJava는 foundation Level이고

WebFlux는 Functional Level이라서 당연히 섞어서 쓸 수 있을 것 같다.(아직 미테스트)


spring-boot-start-webflux를 사용하면 웹서버가 tomcat이 아니고 netty네요. (async를 더 잘지원하기 때문)




utube-REF


(16:00)



(26:00)


                                                                                                                                   or Netty or UnderTow





Spring Web Flux - utubeRef




Posted by yongary
,

microService의 장단점

IT 2017. 10. 30. 22:25

REF


서비스를 잘게 쪼개서 별도의 서비스들로 만들고

서비스들간에 REST등의 방식으로 통신을 하게 하는 방식인데


이로인한, 장단점이 명확하다.



Posted by yongary
,

일반적으로 recursion(재귀함수)가 stack를 많이 사용하므로, 

tail recursion을 통해 stack을 적게 사용하는 방법이 좋다. 


간단한 factorial을 예로 든다면.. REF


int Factorial(int n)

{

return FactorialTail(n, 1);

}

int FactorialTail(int n, int acc)    // acc : accumulator의 약자

{

if (n == 1) return acc;

return FactorialTail(n - 1, acc * n);    //  일반 재귀에서의 n * Factorial(n-1)와 달리 반환값에서 추가 연산을 필요로 하지 않음

}




출처: http://bozeury.tistory.com/entry/꼬리-재귀-최적화Tail-Recursion [따..딱히 공부하려고 포스팅하는 건 아니니까..!]



하지만 java에서는 아직 tail recursion Optimization이 지원되지 않는다.

이유는 security등 각종 jdk코드에서 stack을 count한다던지,

 하는 이유때문이라고 하는데

자세한 내용은 여기: REF

Posted by yongary
,

Akka & actor

network개발 2017. 10. 17. 16:46

actor : ref

 

   -actor는 독립적인 경량프로세스이다. (메시지는 큐를 이용해 처리한다)

   -서로 독립적이고 actor간 통신은 비동기로 이루어지기 때문에 multi-thread환경에서 락등이 발생하지 않는다.

   ( scala로 개발되어 있으며, java용 API도 제공한다. )

  


akka

  - actor모델을 통해서 병렬처리를 할 수 있게 해준다.

  - RPC이므로, remote에 있는 actor를 local actor처럼 사용할 수 있다.

  


UntypedActor를 상속받을 경우   onReceive함수를 구현해야 한다.

Actor생성은 Actors.actorOf()로 생성.  

Posted by yongary
,

AWS Redshift

SDN,cloud,Puppet 2017. 10. 17. 16:18

REF


AWS에서 제공하는 대용량 관계형 data-warehouse 서비스.



Posted by yongary
,

ELK Stack

ElasticSearch 2017. 10. 17. 16:16

공식사이트: elastic.co

REF


기본적으로 elasticSearch가 근간인데

elasticSearch를  DB와 비교해서 가장 큰 차이점을 생각해 보면


   1. 속도가 빠르다.. DB는 B-tree인데 elastic은 hash를 사용.
       (물론 No-SQL DB중에는 redis등과 같이 hash사용하는 애들 있죠..)


   2. Fuzzy개념이 있다.
       (DB에서는 정확하게 입력한 query에 대한 결과가 나오지만,  

        elastic은 검색엔진 기반이다 보니,   Fuzzy하게 혹은 가중치있게 검색할 수 있다.. 적당히 알아서 유사한 것들이 검색된다) 



==============================================


elasticSearch에 data를 넣고,

kibana를 통해 그래프 형태로 조회 한다.


Logstash는 elasticSearch에 data를 대용량으로 넣을때 주로 사용한다.



<ElasticSearch>

키워드 : doc1, doc2 이러한 식으로 저장이 됨.  O(1)의 HashTable이라고 생각하면 됨. 

     ==> 따라서 search가 매우 빠름. (redis와 


Index - db (RDB용어)

Type - table

document - row

Mapping -scema


(실습)

$curl -XGET http://localhost:9200/classes
                                                         +  /class/1 -d  someData

$curl -XPUT localhost:9200/classes    (Update명령이지만, index생성시에는 PUT을 사용함)

                      

$curl -XPOST localhost:9200/classes/class/1 -d  @json파일          (INSERT) 
                                                             document생성은 POST로 하면 index와 함께 생성되기도 함.


?pretty : 이쁘게 출력해 줌.


    - geo_point같은 data를 type 매핑해주면 geo data로 관리가 되서, kibana 지도에서 쉽게 표시 가능.
    - 


<Kibana>

Discover메뉴 - 필드별 조회/검색 등.

Visualize에서 x 축 y축 고르면 쉽게 그래프로 표시할 수 있으며, 해당 링크만 이용할 수 있음.



<logstash>

 - (CSV)file, mySql, mongoDB, ActiveMQ등 data들을 포맷을 바꿔 elasticSearch에 넣을 수 있음.

 - .conf 파일을 이용함.  $sudo ./logstash -f logstash.conf 
          ( input  / filter / output을 지정. output을 주로 elasticSearch로 함 -  유투브 ELK스택 강의 18강 참고.



               


 






Posted by yongary
,

Q 1개를 main으로 하고, 임시 Q 하나를 더 이용해서

stack을 구현. 항상 Q를 다 비우고 꺼꾸로 즉(stack pop 대비순서)로 넣어 놓음.

REF

 

Queue<Integer> q = new LinkedList<Integer>();
Queue<Integer> tmp = new LinkedList<Integer>();


public void push(int d) {
    if (q.size() == 0) {
        q.add(d);
    }else {
        //deque q->tmp
        while (q.size() > 0) {
            tmp.add( q.poll() );
        }

        q.add(d);

        //tmp->q
        while (tmp.size() > 0 ){
            q.add(tmp.poll());
        }

    }
}

public Integer pop(){
    return q.poll();   //poll returns null,  while remove throws exception.
}

 

Posted by yongary
,

java 9 특징

java8~ 2017. 10. 12. 22:22

 REF1(KOR)     REF2(ENG)



AoT (Ahead of Time)컴파일러 도입.  안드로이드에선 이미  ART라는 이름으로 사용되고 있었으나 JDK에선 처음도입

  - application의 startup time 감소.


알파베틱 String을 1byte로 처리해서 메모리효율 + GC문제 감소


Modularity (Jigsaw프로젝트)

  - 키워드 module 을 package처럼 사용.. package 보단 밑.

  - 참고: 이 기능 때문에 기존코드 migration을 위해, java9에서만 한시적으로 illegal reflective access를 제공.


JShell (REPL : Real-Eval-Print-Loop) 제공.. shell에서 바로 문법테스트 등 가능



immutable Map/List/Set용 .of 함수 제공  (Guava좀 들 쓰겠군요)

Flow class (for Reactive) 제공 + CompletableFuture에 delayedExecute추가  (RxJava좀 들 쓰겠군요)


Stream API에  4개 API 추가

  -  takeWhile

  -  dropWhile

  

CodeCache 향상 - code cache가 segment단위로 되도록 함

JavaScript 서포트 향상 - Project Nashorn의 ECMAScript parser API추가


Optional::stream 추가.  

ProcessHandle class추가

Try with Resource 향상





----기타----  

Applet 제거

Http2 Client

Html5 Unicode지원 향상

Java platform Logging API & Service ?

Javadoc search? 


Posted by yongary
,

IP로 country판별

IT 2017. 8. 28. 10:27

 MaxMind의 Geolocation DB를 이용하면 된다.

GeoIP2-Country DB를 이용하는 게 좋고,  DB의 path를 "GeoIP2-Country.mmdb" 로 잡는다. REF

Posted by yongary
,


$ lsof -i :8080   (8080포트를 사용하고 있는 process id를 알려줌)



Posted by yongary
,

gulp & webpack & lodash

javascript 2017. 8. 21. 16:21

<gulp>

gulp는 빌드 및  dependency관리 툴이다. Node.js의 스트림기능을 이용한 streaming build System을 표방한다.  REF

 - gulp.task
 - gulp.src
 - gulp.dest
 - gulp.watch 

gulpfile.js 을 작성해서, plugin사용을 통해 html/css/js/image 등을 minify 한다.

sass 를 css로 컴파일 하는 기능도 수행.



<webpack> 

모듈쪼개기(번들러) 툴이다. 모듈간 import/include를 지원한다.   (javascript ES6에도 모듈이 있어 약간 쪼개기 가능) 
                                                                                                - REF:      import './style.sass';

webpack.config.js를 통해서 설정을 함. REF
  - entry 
  - CommonChunkPlugin을 통해 split함..
  (+inline  function)

- webpack-dev-server : 간단한 webserver 제공. REF

- webpack-stream: 주로 babel인데 gulp랑 함께 사용? (need to study)
  
  

- webpack-dev-middleware  (webpack-dev-server내부에서 사용)

- webpack Watch Mode : js가 하나라도 바뀌면 재컴파일.



<lodash>

그냥 js 라이브러리이다.  arrays, collections,  numbers, objects, strings 등을 유려하게 처리한다.  REF

_.every
_.filter
_.find  
_.forEach
_.includes
_.map 
_.reduce 






Posted by yongary
,

package.json안에서 사용되는 dependency js들 정리. 


<Babel>

ES6등으로 된 javascript를 현재 브라우저에서도 동작하게 낮은버전(ES5)등으로 변환해주는 도구

.babelrc파일만 작성하면 된다.

{
"presets": [
[ "env", { "modules": false } ]
]
}


<underscore> - lamda or function program과 유사한 함수들을 지원.  (음, lodash와 차이는?)

_.map
_.each 

_.filter

_.isEqual (A, B) : 두 Object간 동일한지 비교한다. 



<Tether> 

javascript로 webpage생성시,

포지션을 해주는 library이다.   REF


Attathment,

Offset,

pin,

to

등의 javascript tag 를 이용해 자유롭게 포지셔닝이 가능하다. 



====개발/Test용 js===========


chai : BDD, TDD assertion Library

cross-env :  bash/window등에 상관없이 환경제공. 주로 webpack.config.js안에서 사용.

del : 삭제용 js - 주로 gulpfile.js 안에서  gulp.task('clean')에 사용.


karma: karma.conf.js를 이용해서 test용  task를 생성시 사용.  

  karma-chai : 위의 chai와 결합
  karma-mocha : mocha (async한 test) 와 결합.. 주로 describe("blabla text", function() ) 형태를 많이 사용.


  karma-phantomJS:  phantomJs( Dom핸들링, CSS, JSON등 처리) 와 결합해서 브라우저 흉내를 제공.


requireJs : (AMD구현체  이해와 개발 글 참고- REF
   주로 js의 제일앞에 require()를 많이 사용했으나, function과 결합해 사용가능


runsequence : gulpfile.js안에서 default실행순서를 정의.
  



Posted by yongary
,

Futures transform

network개발 2017. 8. 8. 10:01


import static com.spotify.futures.FuturesExtra.syncTransform;


syncTransform:

ListenableFuture<A>를 ListenableFuture<B>로 변환한다. (참고: ListenableFuture는 guava: completion Listener와 executor를 가질 수 있음.)


syncTransform2: 

  ListenableFuture<A>, <B>2개를 하나의 ListenableFuture<C>로 변환한다.




Futures.transform():

이것도 ListenableFuture를 ListenableFuture로 변환하는데... executor를 파라미터로제공.


rxjava.FutureRxInterop.toSingle(): or toMaybe()

각종 Future -> Single로.




Posted by yongary
,

Kerberos는 하데스의 지옥문을 지키는 머리셋달린 개인데

MIT에서 제 3의 서버를 통한 인증을 하는 시스템을 만들면서 이 이름을 붙였다고 한다.


자료출처: REF http://slideplayer.com/slide/4791382/



Kerberos서버와 TGS서버가 따로 있는 것이 특징이다.

  - 서버접속시에는 TGS서버에서 티켓만 받으면 접속이 가능하다 





Posted by yongary
,

Form의 Validation을 체크할 때, 주로 spring의 validator기능을 사용해 왔지만,


jQuery에서도 Form-validation기능이 있다는 걸 알게되었다.

잘만 쓴다면, 서버까지 갔다오지 않고 바로 javascript에서 처리가 되니 장점이 존재한다.


REF

기본적으로는 rules: 와 messages:를 정해주면 자동으로 체크 및 에러메시지가 출력된다.



예)

$("#basicForm").validate({ rules: { validForCheck : 'validForCheck',

rankingWeightCheck: 'rankingWeightCheck'

} messages: 또는 메시지를 아래 addMethod에 적을 수 있음. }); $.validator.addMethod("rankingWeightCheck", function(value) { return ($('#className').val() < 100 );

}, 'Please enter a Value under 100<br>');


Posted by yongary
,

mongo-java-driver

mongoDB, redis 2017. 7. 23. 23:16

javadoc_REF (많이쓸 클래스: async.client.mongoCollection)

             - 부속: async-driver

             <최근 dependency>

                'org.mongodb:mongo-java-driver:3.4.2'

       'org.mongodb:mongodb-driver-async:3.4.2'   



이중화: https://nextus.tistory.com/26


aggregate사용법:  기초 REF ,  프로그래밍 중에 사용법 REF

   aggretate상세설명: REF



Async Code예제:REF



JAVA (Spring에서 aggregation 사용예제)


Criteria criteria = new Criteria("producerNo").is(producerNo);

MatchOperation match = Aggregation.match(criteria);
SortOperation sort = Aggregation.sort(Sort.Direction.DESC, "deliverStart");
Aggregation agg = Aggregation.newAggregation(match, sort);

AggregationResults<DeliverProduct> results = mongoTemplate.aggregate(agg, "deliverProduct", DeliverProduct.class);
List<DeliverProduct> productList = results.getMappedResults();


  group의 경우

//SQL: db.xx.aggregate([{$group:{_id:{iotId:"$iotId", producerNo:"$producerNo"},
// deliverStart:{ $max:"$time"}}} ]

//RUN "group" Aggregation.//max(deliverStart)->deliverStart로
GroupOperation group = Aggregation.group("iotId", "producerNo").max("time").as("time");
Aggregation agg = Aggregation.newAggregation(group);



- 좀더 간단히 사용하려면 : REF (but, 추천은 아님)

Posted by yongary
,


<AssertJ의 javadoc_REF 기초REF>


import static org.assertj.core.api.Assertions.assertThat


.isEqualTo

.contains

.startWith

.endsWith


등 기존 junit assertTrue보다 유연하게 사용가능.





JUnit JavaDoc


JavaDoc : Assert class




@Parameters - 음 javadoc에서 잘 안보이네요.

@Test
@Parameters({
"10000, 8, 32",
"100000, 12, 128",
})
public void realUsage(int numSerials, int numDigits, int hashKeySize)


@DataPoints + @Theory 

 @DataPoints
 public static String[] dataPoints = new String[] { ... };
 
 @DataPoints
 public static String[] generatedDataPoints() {
     return new String[] { ... };
 }
 
 @Theory
 public void theoryMethod(String param) {
     ...
 }


Posted by yongary
,

RxJava

network개발 2017. 7. 21. 11:48

(RxJava는  비동기multi-thread 주목적이므로 network개발로 분류)  기초:REF


javadoc 



데이타\처리

CompletableMaybeSingleObservable

Subject(외부에서 데이타주입가능)

NothingO
OneOOOO
MoreOO
UnlimitedOO


<Observable과 Maybe 많이쓸만한 함수: 주로 양쪽에 다 존재>

Observable.subscribe (  Observer 또는 Consumer ) 
                                      Observer는 { onComplete(), onError(),   + onNext(), onSubscribe()  } 

Observable.subscribeOn (데이터주입 Schedule쓰레드)

Observable.observeOn (데이터처리 Schedule쓰레드)

                  .onSubscribe (Cosumer<Disposable {dispose()} >

       (static).defer (Callable supplier )  : .create대신의 공급자.  REF


Flowable.doOnSubscribe ( Consumer<Subscription {cancel(),request(r)   } }   org.reactivestreams?.Subscription

        FlowableOnSubscribe  inteface도 존재.    



Maybe.doOnSuccess( Consumer 

           .doOnComplete ( Action )  ,   .doOnSubscribe( Action

           .doOnError (Consumer 

           .onErrorComplete ( Predicate 
           .timeout ( , , Scheduler  )

(static) .defer ( Callable supplier)  : 공급자  (in study)       

(static) .just ( T )
(static) .error(E) 





Scheduler  & Scheduler.Worker(하나의 thread에서 순차적으로 처리하는 Scheduler)

 ExecutorService exec = Executors.newSingleThreadedExecutor();
                                 .newFixedThreadPool(5)//cpu+1 
 try {
     Scheduler scheduler = Schedulers.from(exec);//parallelization에 최적.
                                     .computation();//cpu+1 계산에적합
                                     .io(); //cache도 해줌.cpu+1
                                     .newThread()//간단
     Flowable.just(1)
        .subscribeOn(scheduler)
        .observeOn(Schedulers.computation())
        .map(v -> v + 1)
        .subscribe(System.out::println); //blockingSubscribe(System.out::println);
 } finally {
     exec.shutdown();
 }


Maybe와 Single의 차이는 complete의 존재여부?   (from REF)

Flowable :  item emit속도( reactive dataflow)가 조절 가능. 



Flowable -> Single<List<T>>  :  toList() 도 좋음.

Posted by yongary
,

ES6, class let ${}....

javascript 2017. 7. 20. 18:17

ES6_turorial.pdf  

ES6 javascript 는 지원되는 브라우저가 많지 않아서 그 사용용도가 제한적이지만.. 

   1. node.js를 이용한 서버개발

  2. 관리자 페이지 (브라우저를 제한 가능)

등에서 사용이 가능하다.

Babel을 사용하면 es6파일을 es5로 변환시켜 준다.  REF


기존 javascript대비 특이한 점들은....


1. class & extends 지원  ref

    - class constructor에( options 사용가능: json 형식)
    

2. let , const 지원  
    - let은 함수도 지정이 가능한 var로서
      let add = (a,b) => a+b    ref      (lambda도 지원)   =>이다. (java는 ->임) 

    -let은 block scoping이 된다. (가능하면 let을 써야겠군요)   REF (이하 3~5))

3. Promise   (java의 Future느낌) , 그리고     tutorial.pdf에 의하면 Map,Set도 지원. 
    - .resolve()  .reject()  .all() 등 

4. import  / export  : Babel등과 함께 사용: ref

5. template  :  ${변수}       let message = `Hello ${name}!`;  

6. module 지원: REF  (webpack의 기능을 일부 담당가능)


 배열을 파라미터로 전달. 
   - 
var data = [1,2]; function Test1(a,b)...; ==> Test1(...data) : (이경우 ...을 spread라고 부른다 REF)

   -  기존 parameter들은  지정하지 않아도, arguments변수에 자동으로 넘어갔지만
       (...args) => { console.log(args); }  지원.     (이경우 ...을 REST 파라미터 라고 부른다) 

Posted by yongary
,

Armeria with Thrift

network개발 2017. 7. 20. 16:46

REF  /server-thrift  /client-thrift      (기타  /client-decorator   /server-decorator  /client-custom-http-headers    )




<주요 class 들>  javadoc    pkg:  common.thrift,  server.thrift, client.thrift 


THttpService  :  (Thrift Http Service)


ThriftCompletableFuture  (extends CompletableFuture<java> implements AsyncMethodCallback<thrift> )




Posted by yongary
,

CompletableFuture implements Future, CompletableStage. (그래서 CompletableStage공부도 필요)



<CompleteFuture의 기본 함수들>

.complete(returnValue)

.completeExceptionally(exception)


.thenApply (Func)  : 결과값에 적용

.thenCompose (Func) : future에 적용?  - 이것 자체도 Task가 됨 (333p)

.thenCombine (Func)  :   A task결과와 B task결과를 이용한 연산가능.


.thenAccept(Consumer)



(static) .supplyAsync (  Supplier<R> )   R:ReturnType

첫번째 stream에서 CompletableFuture<String>의 List를 가지고 있지만,

List<String>을 원한다면 기다린 후, Future들에서 값을 가져와야 하는데, 이 일을 해주는게 join이다.

별도의 stream 루프로 처리해야 Parallel처리가 된다.. 안그러면 supplier->join->supplier->join 순차적처리가 됨. 


Posted by yongary
,

Mac북 사용시

Mac 2017. 7. 19. 23:40

$  top   -> 모니터링 화면이 뜨는데,   이 때 o를 입력하고 cpu라고 입력하면.. cpu많이쓰는 순서대로 정렬된다.



Posted by yongary
,

한글 REF성능개요    REF


  - angular과 달리, 단방향 data-binding임.


  


new Vue {     :html element를 하나 물고 있는 느낌의 객체.(물론 el없이 js ES6 class처럼 사용도 가능)

  el:  ,

   - template: ,

   

  props:  data전달 -  REF:vuejs.org  - $emit하고나서 props:로 데이타를 받음.

  data: ,

  created:  ,    //instance가 생성되고 나서 호출되는 hook.  REF'

    - mounted:
    - updated:
    - destroyed:  이런 hook들도 존재. 


  watch: 

  computed:  sort나 filter들을 적용해서 보여줄 수 있음.

   

  methods:

  validations:     ($v로 인용가능)


  components:    REF

}



- ajax요청시에는 axios 를 사용. REF

- vuelidate :  vue component의 validations: 을 check:  REF


- vue-loader : webpack에서 사용하는 loader로서, css후처리등도 가능하다고 하는데...   REF

- vee-validator 로 각종 html input등의 type/regex 체크 가능.   REF


(plugin) - plugin제작가이드 

- vue-router : 해당 component를  화면에 그려줌.     
- vuex : 전역변수                     routre/vuex REF



$router, $v (이하/위 참조),  $emit(현재 instance에 event trigger) 

========  API-list  =====================================================

:is <component :is="componentId"> <component v-bind:is="currentView">


v-for  REF

v-show

v-if

v-on:click   =>    @on(click) 으로 이벤트 감지. 
                           v-on:click="$router.push('/detail')":서브페이지로 이동.ps://router.vuejs.org

                  원복: $router.push('/')   REF:rotuter.vuejs.orghtt           

v-model   양방향 바인딩 지원.  angular.js 처럼  .sync 키워드 필요.  

v-bind

v-cloak

Posted by yongary
,