MaxMind의 Geolocation DB를 이용하면 된다.
GeoIP2-Country DB를 이용하는 게 좋고, DB의 path를 "GeoIP2-Country.mmdb" 로 잡는다. REF
MaxMind의 Geolocation DB를 이용하면 된다.
GeoIP2-Country DB를 이용하는 게 좋고, DB의 path를 "GeoIP2-Country.mmdb" 로 잡는다. REF
$ lsof -i :8080 (8080포트를 사용하고 있는 process id를 알려줌)
<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
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실행순서를 정의.
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로.
Kerberos는 하데스의 지옥문을 지키는 머리셋달린 개인데
MIT에서 제 3의 서버를 통한 인증을 하는 시스템을 만들면서 이 이름을 붙였다고 한다.
자료출처: REF http://slideplayer.com/slide/4791382/
Kerberos서버와 TGS서버가 따로 있는 것이 특징이다.
- 서버접속시에는 TGS서버에서 티켓만 받으면 접속이 가능하다
Form의 Validation을 체크할 때, 주로 spring의 validator기능을 사용해 왔지만,
jQuery에서도 Form-validation기능이 있다는 걸 알게되었다.
잘만 쓴다면, 서버까지 갔다오지 않고 바로 javascript에서 처리가 되니 장점이 존재한다.
기본적으로는 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>');
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의 경우
- 좀더 간단히 사용하려면 : REF (but, 추천은 아님)
<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) { ... }
(RxJava는 비동기와 multi-thread 주목적이므로 network개발로 분류) 기초:REF
데이타\처리 | Completable | Maybe | Single | Observable | Subject(외부에서 데이타주입가능) |
---|---|---|---|---|---|
Nothing | O | ||||
One | O | O | O | O | |
More | O | O | |||
Unlimited | O | O |
<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() 도 좋음.