decode와 netty전체적인 질문입니다.

1,521 views
Skip to first unread message

공원배

unread,
Jul 14, 2016, 10:05:34 PM7/14/16
to Netty Korean User Group
안녕하세요 저는 netty(서버) -- 안드로이드(TCP 클라이언트) 를 구성중인 학부생 입니다.
처음 프레임워크라는걸 사용해보면서 혼자 고생중입니다.

2주동안 네티에 대하여 공부를 해봤는데 우선적으로 제가 공부하면서 이 내용이 맞는지 확인하고자 이렇게 질문을 올립니다.

1. Netty 부트스트랩으로 서버를 열면, 클라이언트가 접속할때만다 channel이 생성되고, 생성된 채널에는 각각 파이프라인을 
가지고있으며, 그 파이프라인에 등록된 핸들러를 통해 이벤트 발생시 구성한 핸들러로직을 수행한다.

2. ChannelInboundHandlerAdapter을 상속받은 핸들러의 각 이벤트에 해당하는 메소드를 작성하는데, 
    클라이언트가 메시지(abc)를 보낼때, channelRead라는 이벤트가 발생하고, 해당 매소드가 실행된다.
    이때 이벤트 발생은 한번 이루어지며 이것을 다음 핸들러로 넘겨주기 위해서는 fire*과 같은(여기서는 fireChannelRead)
   매소드를 호출하여 다음 핸들러로 넘겨서 다른 처리를 한다.

3. netty는 기본적으로 bytebuf를 사용하는데, 이를 적절하게 사용하기 위해서는 decode, encode 매소드를 사용하여 원하는
 포맷으로 변경하여 처리해야 한다. 사용하기 위해서는 ByteTomessageDecoder와같은 클래스를 상속 받아 decode메소드를 재정의 하는데,
 decode 메소드는 channelRead와 같은(?)/비슷한(?) 이벤트가 발생하여 들어온 데이터를 원하는 형식의 데이터로 변경하여 자동으로 
다음 인바운드 핸들러로 전달하게 된다.

4. 여러명의 접속이 있을때 여러개의 채널이 생성되고,  각각의 채널은 현재 클라이언트의 각각 다른 요청에 대하여 다른 채널에 독립적으로
   이벤트에 따른 핸들러 로직을 수행하고, 개발자는 기능의 추가나, 변경시 단순히 핸들러의 추가,변경만 하면 되므로 개발에 용이하다고 할수 있다.


우선 제가 이해한건 이정도 입니다. 혹시 제가 다른 방향으로 이해를 하거나 잘못 해석한 부분이 있으면 코멘트 부탁드립니다.
하고자 하는 프로젝트에 앞서 네티를 적용하기위해 우선적으로 간단한 로그인 기능만 구현해보려고 합니다

5. 서버는 클라이언트로부터 id와 pw를 담은 json 형식의 데이터를 받고 서버는 받은 Json형식을 파싱해 DB테이블과 비교하여
간단하게 True False값을 클라이언트에게 넘겨주는 아주 기본적인걸 해보고 있습니다.

그런데 클라이언트에서 보내주는 데이터를 찍어보는데 만약 "123" 을 보내면 서버에서 찍어볼때 123 앞에 이상한 값들이 존재하는것을 확인했습니다.
또 연결할때도 클라이언트가 보내는 데이터는 없는데 서버쪽에서 읽을수있는 데이터(?)가 있는지 연결하자마자 이상한 값들을 찍어주고있습니다.
제가 decode 부분에대한 이해와 처리가 제대로 안되는거 같습니다. 조언부탁드립니다 ㅠㅠ 


 
  

 

이희승 (Trustin Lee)

unread,
Jul 14, 2016, 10:24:43 PM7/14/16
to nett...@googlegroups.com
On Fri, Jul 15, 2016, at 11:05 AM, 공원배 wrote:
안녕하세요 저는 netty(서버) -- 안드로이드(TCP 클라이언트) 를 구성중인 학부생 입니다.
처음 프레임워크라는걸 사용해보면서 혼자 고생중입니다.
 
2주동안 네티에 대하여 공부를 해봤는데 우선적으로 제가 공부하면서 이 내용이 맞는지 확인하고자 이렇게 질문을 올립니다.
 
1. Netty 부트스트랩으로 서버를 열면, 클라이언트가 접속할때만다 channel이 생성되고, 생성된 채널에는 각각 파이프라인을 
가지고있으며, 그 파이프라인에 등록된 핸들러를 통해 이벤트 발생시 구성한 핸들러로직을 수행한다.
 
맞습니다.
 
2. ChannelInboundHandlerAdapter을 상속받은 핸들러의 각 이벤트에 해당하는 메소드를 작성하는데, 
    클라이언트가 메시지(abc)를 보낼때, channelRead라는 이벤트가 발생하고, 해당 매소드가 실행된다.
    이때 이벤트 발생은 한번 이루어지며 이것을 다음 핸들러로 넘겨주기 위해서는 fire*과 같은(여기서는 fireChannelRead)
   매소드를 호출하여 다음 핸들러로 넘겨서 다른 처리를 한다.
 
맞습니다.
 
3. netty는 기본적으로 bytebuf를 사용하는데, 이를 적절하게 사용하기 위해서는 decode, encode 매소드를 사용하여 원하는
 포맷으로 변경하여 처리해야 한다. 사용하기 위해서는 ByteTomessageDecoder와같은 클래스를 상속 받아 decode메소드를 재정의 하는데,
 decode 메소드는 channelRead와 같은(?)/비슷한(?) 이벤트가 발생하여 들어온 데이터를 원하는 형식의 데이터로 변경하여 자동으로 
다음 인바운드 핸들러로 전달하게 된다.
 
맞습니다.
 
4. 여러명의 접속이 있을때 여러개의 채널이 생성되고,  각각의 채널은 현재 클라이언트의 각각 다른 요청에 대하여 다른 채널에 독립적으로
   이벤트에 따른 핸들러 로직을 수행하고, 개발자는 기능의 추가나, 변경시 단순히 핸들러의 추가,변경만 하면 되므로 개발에 용이하다고 할수 있다.
 
맞습니다.
 
우선 제가 이해한건 이정도 입니다. 혹시 제가 다른 방향으로 이해를 하거나 잘못 해석한 부분이 있으면 코멘트 부탁드립니다.
하고자 하는 프로젝트에 앞서 네티를 적용하기위해 우선적으로 간단한 로그인 기능만 구현해보려고 합니다
 
5. 서버는 클라이언트로부터 id와 pw를 담은 json 형식의 데이터를 받고 서버는 받은 Json형식을 파싱해 DB테이블과 비교하여
간단하게 True False값을 클라이언트에게 넘겨주는 아주 기본적인걸 해보고 있습니다.
 
그런데 클라이언트에서 보내주는 데이터를 찍어보는데 만약 "123" 을 보내면 서버에서 찍어볼때 123 앞에 이상한 값들이 존재하는것을 확인했습니다.
또 연결할때도 클라이언트가 보내는 데이터는 없는데 서버쪽에서 읽을수있는 데이터(?)가 있는지 연결하자마자 이상한 값들을 찍어주고있습니다.
제가 decode 부분에대한 이해와 처리가 제대로 안되는거 같습니다. 조언부탁드립니다 ㅠㅠ 


 
파이프라인 맨 앞쪽에 LoggingHandler 를 붙여 보시면 실제로 클라이언트와 서버가 무엇을 주고 받는지 확인할 수 있습니다. 123 앞에 뭔가 다른 것, 예를 들어 문자열의 길이, 을 보내고 있지는 않은가요?
 
이희승 드림 
 

공원배

unread,
Jul 15, 2016, 1:53:20 AM7/15/16
to Netty Korean User Group
감사합니다. 
확인해보니 말씀처럼 길이가 앞에 붙어서 전송되고 있었습니다!.
아직 이벤트루프나, 바이트버퍼에 대해 완벅하게 이해하지 못했지만, 
더 공부해보겠습니다!
Reply all
Reply to author
Forward
0 new messages