netty

network개발 2016. 9. 26. 13:49

netty =  Async전문 java network Library

   - UserGuide(4.0 wiki)  ,  한글번역본

 

   - 3.1 Chapter2 Architecture Overview

 

   - 4.0javadoc   5.0alpha2_javadoc

 

 

netty의 핵심 Interface

 - Channel

 - ChannelFuture

 - ChannelHandler

 - ChannelHandlerContext

 - ChannelPipeline

 - EventLoop

 

 [그 외]

 - ChannelBuffer

 기존 java nio의  ByteBuffer를 쓰지 않고, ChannleBuffer를 이용해
1. flip()호출이 필요없으며 사용자정의 buffer type이 가능하다.

2. zero-copy가 가능하다.(SG-DMA NIC필요) :  zeroCopyRef

zero-copy: disk->커널메모리->유저메모리->커널메모리->NIC  이던것을

               => disk->커널메모리->NIC 방식으로 copy. (File을 socket으로 쏠때 특히 유리)

3. StringBuffer처럼 dynamic Buffer이다.

 - ChannelFactory

NIO-TCP / OIO-TCP / OIO-UDP /Local 통신등을 ChannelFactory선택만으로 쉽게 swithcing가능.

 

기본예제: jdm.kr

 

 

Posted by yongary
,

[Netflix 블로그:  곧 open Source로 공개 예정]

http://techblog.netflix.com/2016/09/zuul-2-netflix-journey-to-asynchronous.html?m=1 

 

 

Posted by yongary
,

Git advanced.

springBoot gradle 2016. 9. 12. 15:21

git기본은: http://yongary.tistory.com/151




http://learngitbranching.js.org/   graphical 공부site


  - git의 commit은 매우 가볍다. 이전버전과 차이점 delta만 관리. 

  - local 관리버전을 master라고 부름.. (remote가 origin 인 듯)

  - branch는 단지 commit으로의 pointer이다. (storage/memory overhead없음)

git branch branchName해서 만들고 + git checkout branchName 한 다음에 git commit해야 함. 

: or  git checkout -b branchName 하면 branch를 만들면서 checkOut도 같이 함.

  - git merge 방법:

: git branch bugFix

:    git checkout bugFix

:    수정후 git commit

: git checkout master

:    git commit  (이 단계가 왜 필요한지?? 연구 중)

:    git merge bugFix

   

  - git rebase : 패러랠 branch작업을 sequential한 history로 변환시켜 줌. (대단하네요)

              현재 bugFix* checkout된 상태에서, 

: git rebase master 하면 sequential로 되고 그 후,  (현재 bugFix*가 계속유지됨.)

: git rebase bugFix   (master*가 current로 바뀜. sequential상에서의 merge효과가 생김. ) 

      


           

<기억할 명령어>

git checkout FileName  : 파일 하나 Revert

git checkout -- FileName  :  파일 하나 Revert from -- branch. (need test)  REF



git branch -v :  branch상태 확인가능.. 로컬이 앞서가면(commit 이 많으면 ahead 2 이런식으로 나옴)  : REF

==>  $ git fetch --all; git branch -w   이렇게 사용해야 최신 정보가 비교가 됨.



Posted by yongary
,

<동작구조>


Request --->  DispatcherServlet  ---------------------------> Haldlermapping

                                     ----------------------------> Controller

                                     <--Model & view name--

                                     ---------------------------->ViewResolver

                                     ----------------------------> View

      response <--------------------------------------------



<어노테이션>  annotation-Driven.   @Component로 하고,  component-scan으로 자동으로 Bean으로 등록. 

  @Controller

  @RequestMapping( { "/", "/homepage" } )   =>  controller에서 이 String array를 통해 여러 request 수용가능.

  public class myController {....


 

  -param 처리  /show?my_id=12345 URL처리하려면

   public String show( @RequestParam("my_id") long myId, Model model) {
   }

  - URL방식 param처리

   @RequestMapping(value="/{my_id}", method=RequestMethod.GET)
   public String show( @PathVariable("my_id") long myId, Model model) {

   }





<Spring's MockMVC>

  myRepository mockRepository =

     mock (myRepository.class);

   when (mockRepository.findData())

     .thenReturn(expectedData);


     .setSingleView  .build  .perform  .andExpect 등.   



<Web controller에>

 @Autowired 생성자. 가능.    #146 



  Model: View로 전달할 key,value Map.이며 아래와같이 사용함.

   <c:forEach  items="${modelName}" var="oneData">

<c:out value="${oneData.kv1}" />

   </c:forEach>

   => spring에서 만든 sf (spring form) tag library도 존재.
    sf:input 이런식으로 사용하며 Model과 연동이 잘된다. 

   => srping에서 만든 s tag library도 존재

    s:message   리소스 파일등에서 읽어서 메시지 출력.




<ViewResolver>

  InternalResourceViewResolver를 기본적으로 쓰는데, 그 외 UrlBasedViewResolver, XmlViewResolver, 

  TilesViewResolver (Apache Tiles를 이용해 Web페이지 구성, tiles는 t tagLib 사용.),

  ThymeleafViewRelolsver ( Tyhymeleaf = jsp 사용성 개선한 범용 template-th tag 사용하며 html처럼 막 편집가능
        즉, jsp안에 <> <c:> 이런거 섞어쓰면서 오는 <>개수 혼란 등을 피할 수 있음.)
  
  등 10개 이상의 용도에 따른 ViewResolver가 존재한다.

 

 

<기타 & Advanced>

WebApplicationInitializer

- DispatcherServlet 외에 추가적인 servlet나 filter를 등록해서 사용가능.

- onStartup & getServletFilters 메쏘드 override .   (#7.1)

 

multipart는 보통 StandardServletMultipartResolver 를 사용.

 

 

flash attribute: redirect시 Object전달 같은 일회성 data전달을 model을 이용해 지원.

-사용법: model.addFlashAttribute("spitter", spitter);

 


 Web Flow:  spring MVC확장 framework로 flow를 관리한다.

     - status, transitions, flow_Data 의 3개 요소로 구성됨.



Posted by yongary
,

AsyncFileChannel

java core 2016. 8. 28. 21:24

[오늘의 Tip] Java는 call by value이다. (Object의 경우는 reference주소=Pointer주소 가 전달된다)

c++은 call by reference가 있는데, 이 것은 실제로는 reference of reference가 전달된다.



[본론]


jdk 1.7 에 AsynchronousFileChannel class가 있다.  REF


그냥 java 의  NIO를 사용해도 될텐데.. 차이점이 무언인지 분석을 해보자.



..




Posted by yongary
,

Message Digest

IT 2016. 8. 16. 17:08

Message Digest는 간단히 말하면 Message Hashing이다.

- 단방향으로만 동작하고 역방향 유추는 불가.

- 암호 저장, file이 동일한 파일인지 비교하는데 쓰인다.

 

Java Ref - java.security.MessageDigest 존재.

 

 

좀 더 복잡하게 하기 위해서  Ref

Salting- 메시지 앞에 특수값을 삽입. (사용자별로 다르게 할 수도 있음)

Key Stretching-  Digest하고 그 값을 또 Digest하는 multi-chain형태의 Digest.

=> 위 둘을 잘 섞어서 Adaptive Key Derivation Functions 이라고 부른다.

대표적인 게 PBKDF2랑 bcrypt, scrypt가 있다.

이 존재한다.

 

 

Posted by yongary
,

HTTP 2.0

IT 2016. 8. 15. 16:54

REFwiki

 

HTTP1.1이 현재까진 대세인데

HTTP2.0은 2015년 5월에 spec이 발표되었고, 대부분의 브라우저에서 2015년 말부터 지원한다.

  - web site들은 10%미만이 이를 지원.

 

주요 특징.

 - HTTP2.0 서버 Push

: 기존에는 index.html을 파싱하고 나사 style.css, javascript.js를 받지만, HTTP 2.0에서는 서버가 index.html 을 내려주면서 같이 css와 js도 내려줄 수 있다.

 

 - HTTPS over TLS

:원래 https는 SSL기반인데,   2.0에서는 https가  TLS기반(SSL의 브랜치)으로 동작한다.

 

 (SSL vs TLS: REF1,  )

-같은 말이다. 네스케이프에 의해서 SSL이 발명되었고, 이것이 점차 폭넓게 사용되다가 표준화 기구인 IETF의 관리로 변경되면서 TLS라는 이름으로 바뀌었다. TLS 1.0은 SSL 3.0을 계승한다. 하지만 TLS라는 이름보다 SSL이라는 이름이 훨씬 많이 사용되고 있다.

( REF2-의심감)

 SSL - 7.Application Layer 와 4.Transport Layer 간에서의 보안.

 TLS -  서버인증은 선택사항, 반드시 공개키만 사용.

 

 - SPDY (pronounced like "speedy") : TCP pipe는 쓰면서도 TCP와 다른프로토콜을 사용하는데 HTTP2.0 초기에는 SPDY방식으로 HTTP가 바뀔 것으로 제안 되다가 몇가지 문제가 있어 빠진 것으로 보임.

 

Posted by yongary
,

유니코드

IT 2016. 8. 10. 18:02

<UnicCode> REFWiki  REF2

UTF 8  - 가변길이의 유니코드이다.   ASCII영역은 1Byte로 표현되고, 일반적으론 한글은 3Byte로 표현된다.. 드물게 4byte로 표현되는 언어도 있다.

 

UTF 16 - ASCII영역도 2Byte로 표현된다.

 

 

<다른 encoding>


EUC-KR (MS의 CP949는 EUC-KR을 확장) :  한글OS에서만 제대로 보이는 문제 존재. 영문-1Byte, 한글-2Byte 로 고정Length

Posted by yongary
,

SOLID라고 부르며: 굿 REF

 

경험적으론 이미 다 아는 내용이긴 하지만, 

다음과 같이 객체지향 5원칙을 정리한 사람들이 있다.. 글로 보니 새롭군요..

 

REF: 

S- single responsibility principle

O- open-closed principle  :

 - 확장에는 open, 변경에는 close

 

L- Liskov Substitution principle 

  - 어떤 함수 m(p)에서 P클래스의 p instance가 잘 동작하면,  그를 상속받은 C클래스의 c instance도 잘 동작해야 한다 m(c)
 (일반적으로 잘 동작함.   하위 클래스에 부모에게 있는 method가 없거나 다른일을 하거나 하면 문제..)

 

I- interface segregation principle 

 - I/F는 가능한한 기능별로 세분화해서 구현해야 한다.

 

D- dependency Inversion principe

  - 하위레벨 모듈의 변경이 상위레벨 모듈의 변경을 요구하던 관계를 끊음.

 - 상위 클래스에서는 하위클래스 일들을 전혀 할 필요가 없다.

 

 

 

Posted by yongary
,

OSI 7 Layer

IT 2016. 8. 1. 15:47

OSI 7계층을 아주 간단히 정리하면 다음과 같다.

REF

 

7: Application Layer (응용 계층)

- 텔넷 등

 

6: Presentation Layer

- Encoding/Decoding 압축/암호화 등이 이루어지는 Layer이다.

 

5: Session Layer

- 운용 체제에서 다루어주는 TCP/IP 세션 생성 및 해제.

 

4: Transport Layer(트랜스포트 계층)

- 쉽게 TCP를 이용하는 계층이라고 보면 된다.

- End-to-End간 통신을 다루는 최하위 계층이다.

- 오류검출, 흐름제어, 중복검사 등이 이루어진다.

 

3: Network Layer

- IP와 라우팅 기반으로 데이타 통신이 이루어진다.

- 패킷 생성이 이루어지며, QoS관리 등이 이루어진다.

 

2: Data Link Layer (데이터 링크 계층)

- MAC Address 기반으로 통신을 하는 계층.

- CRC 체크등 에러체크 가 이루어 진다.  (+재전송/흐름제어)

 

1: Physical Layer(물리계층)

- H/W Layer로서 가장 복잡한 계층이다.

Posted by yongary
,