Speaker. Moon-Hak-I
Prologue!본 발표는 아래와 같은 내용으로 진행되며, 모듈의 내부적인코드 리뷰는 생략한다.      구조       상세      예제
Overview!ž    비동기 네트워크 관련 API 제공ž    서버와 클라이언트 모두 포함
Structure!           Server           EventEmitter   Socket                           Stream Wrapper   Utility
Detail!net.createServer([options], [connectionListener]): TCP 서버를 생성하며, ‘connectionListener’ 매개 변수는 자동으로‘connection’ 이벤트의 ...
Detail!net.connect(options, [connectionListener])net.connect(port, [host], [connectionListener])net.connect(path, [connect...
Detail!server.listen(port, [host], [backlog], [callback])server.listen(path, [callback])server.listen(handle, [callback]):...
Detail!server.close([callback]): 새로운 커넥션 연결을 중단하고 기존의 커넥션만 유지한다. 그리고 모든 커넥션이 종료되었을 때 서버를 닫는다. 서버는 ‘close’ 이벤트를 발생시키고 선택적으로...
Detail!server.address(): IP 주소와 포트 번호와 같은 서버 정보를 운영체제로부터 가져온다. 참고로‘listening’ 이벤트가 발생한 후에만 메소드 호출이 가능하다.                  ...
Detail!server.maxConnections: 서버에 연결되는 커넥션의 최대 수를 정하는 프로퍼티                                 Server!
Detail!server.connections: 서버에 동시에 연결된 커넥션 수를 가지는 프로퍼티                                Server!
Detail!server.on(event, listener)Event           Descriptionlistening       server.listen 메소드가 호출되었을 경우connection      새로운...
Detail!socket.connect(port, [host], [connectListener])socket.connect(path, [connectListener]): 일반적으로 net.connect 래핑 함수를 호출...
Detail!socket.bufferSize: 현재 쓰여질 버퍼의 문자 수를 나타내는 프로퍼티                               Socket!
Detail!socket.setEncoding([encoding]): 읽을 스트림으로 소켓에 대한 인코딩을 설정한다.                                 Socket!
Detail!socket.write(data, [encoding], [callback]): 소켓에 데이터를 보낼 수 있는 메소드이며, 데이터의 기본 인코딩은 UTF8이다. 버퍼에 쌓인 데이터가 성공적으로 전송되었다면 t...
Detail!socket.end([data], [encoding]): write 메소드와 기능은 같지만 일부 스트림만 종료하며 FIN 패킷을 보낸다. 이때 서버가 일부 데이터를 보낼 수 있다. (TCP Half-clos...
Detail!socket.destroy(): 소켓의 I/O 활동을 발생하지 않게 하는 메소드이며, 에러가 발생했을 경우에필요하다.                                      Socket!
Detail!socket.pause(): 데이터 읽기를 중지하며, ‘data’ 이벤트는 발생되지 않는다.                                        Socket!
Detail!socket.resume(): 데이터 읽기를 재개한다.                  Socket!
Detail!socket.setTimeout(timeout, [callback]): 소켓에 설정된 초과 시간이 지나면 ’timeout’ 이벤트가 발생하며, ‘callback’ 매개 변수는 ‘timeout’ 이벤트의 리스...
Detail!socket.setNoDelay([noDelay]): Nagle 알고리즘을 비활성화하고, 기본적으로 TCP 연결은 Nagle 알고리즘을사용하므로 데이터를 보내기 전에 이를 버퍼에 저장한다. ‘noDelay’...
Detail!socket.setKeepAlive([enable], [initialDelay]): Keep-Alive 기능의 활성화 유무를 설정하는 메소드이다. 기본적으로 비활성화 되어있으며 지연 시간을 설정할 수 있다....
Detail!socket.address(): IP 주소와 포트 번호와 같은 서버 정보를 운영체제로부터 가져온다.                                     Socket!
Detail!socket.remoteAdress: 원격 IP 주소를 가지는 프로퍼티                       Socket!
Detail!socket.remotePort: 원격 포트를 가지는 프로퍼티                    Socket!
Detail!socket.bytesRead: 소켓이 받은 총 바이트 수를 가지는 프로퍼티                             Socket!
Detail!socket.bytesWritten: 소켓에 보낸 총 바이트 수를 가지는 프로퍼티                             Socket!
Detail!socket.on(event, listener)Event          Descriptionconnect        소켓 커넥션이 설정되었을 경우data           데이터를 받았을 경우end   ...
Detail!net.isIP(input): 입력된 IP의 버전을 반환한다.                      Utility!
Detail!net.isIPv4(input): 입력된 IP의 버전이 4일 경우, true를 반환한다.                                   Utility!
Detail!net.isIPv6(input): 입력된 IP의 버전이 6일 경우, true를 반환한다.                                   Utility!
Example!ž    간단한 웹 서버 만들기ž    사용 모듈 (NET + MIME)ž    데모 (http://inpost.kr:7777)
Example!
Thank you!
Upcoming SlideShare
Loading in …5
×

[NodeJS] - NET 모듈 소개

5,098 views
4,790 views

Published on

OctoberSkyJs 스터디에서 발표한 프레젠테이션 문서입니다.
NodeJS의 NET 모듈에 대한 소개이며, 관련 예제 링크도 공유드립니다.

[데모] - http://inpost.kr:7777/
[코드] - http://test.youngman.kr/node/ws/ws.js

Published in: Technology
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,098
On SlideShare
0
From Embeds
0
Number of Embeds
338
Actions
Shares
0
Downloads
23
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide
  • 안녕하세요.NET모듈 발표자 홍재석입니다.본의아니게 지난 주에 발표임에도 불구하고 개인사정으로 불참하여 이 자리를 빌어 죄송하단 말씀을 드리겠습니다.그럼, 시작하겠습니다.
  • 발표하기에 앞서 제가 TCP에 대한 지식이 다소 부족하여 발표가 미흡하더라도 양해 부탁드리겠으며,진행 순서는 코드의 양이 많고 깊게 분석하면 네이티브 영역까지 설명해야 되기때문에 발표 컨셉을 코드 리뷰가 아닌 넷 모듈의 구조와 API 설명 그리고 넷 모듈을 활용한 예제 시연 순으로 진행하겠습니다.
  • 넷 모듈은 서버와 클라이언트 모두를 포함한 비동기 네트워크 관련 API를 제공합니다.
  • 넷 모듈은 크게 두 개의 클래스와 이를 내부적으로 객체를 생성하여 리턴하는 래핑함수 그리고 아이피 버전 체크와 같은 기능을 제공하는 유틸 함수로 구성되어 있습니다. 참고로 서버 클래스는 이벤트 클래스를 상속받고, 소켓 클래스는 스트림 클래스를 상속 받습니다. 그리고 스트림 클래스는 이벤트 클래스를 상속받습니다. 결국 서버와 소켓 클래스는 이벤트 클래스의 특징을 갖고 있습니다.
  • 참고로 동일한 기능을 하는 createConnection메소드도 있습니다.
  • connect == createConnection
  • FIN Packet이란 세션을 종료시키는데 사용되며 보낸 사람이 더 이상 보낸 데이터가 없음을 보여준다.TCP Half-close는 두 개의 스트림 중 하나만 종료하는 것을 말한다.(완전한 커넥션 종료가 아님)
  • Nagle 알고리즘이란 네트워크에서 “가능하면 조금씩 여러 번 보내지말고 한번에 많이 보내라”라는 원칙을 기반으로 만들어진 알고리즘입니다. 참고로 반응 속도가 중요한 온라인 게임에서는 오히려 문제가 될 수 있으며, 이를 해결하기 위해 서버는 Nagle 알고리즘을 활성화하고 클라이언트는 비활성화 하는 방법을 사용하기도 합니다. 쉽게 말해서 버퍼라고 생각하시면 되고 TCP소켓은 디폴트로 Nagle 알고리즘을 적용하고 있습니다.
  • 발표를 준비하면서 어떤 예제를 만들어야지 여러분들이 공감을 할까라는 고민을 했었습니다.고민 중에 전성균님께서 예전에 발표하신 HTTP 관련 PPT의 끝자락에 자바로 구현된 간단한 웹 서버 예제가 있어서…그것을 넷 모듈을 사용하여 노드 버전으로 만들어보면 좋겠다라는 생각이들어 이렇게 만들어 보았습니다.코드는 50라인 정도의 매우 간단하게 구현되어있으며 HTTP 프로토콜에 대한 지식만 있다면 쉽게 이해하실 수 있습니다.참고로 MIME이라는 커스텀 모듈을 사용하였는데, 이 모듈은 파일 명을 입력하면 어떤 마임 타입인지 반환해주는 함수를 제공합니다.
  • [NodeJS] - NET 모듈 소개

    1. 1. Speaker. Moon-Hak-I
    2. 2. Prologue!본 발표는 아래와 같은 내용으로 진행되며, 모듈의 내부적인코드 리뷰는 생략한다. 구조 상세 예제
    3. 3. Overview!ž  비동기 네트워크 관련 API 제공ž  서버와 클라이언트 모두 포함
    4. 4. Structure! Server EventEmitter Socket Stream Wrapper Utility
    5. 5. Detail!net.createServer([options], [connectionListener]): TCP 서버를 생성하며, ‘connectionListener’ 매개 변수는 자동으로‘connection’ 이벤트의 리스너로 추가된다. Wrapper!
    6. 6. Detail!net.connect(options, [connectionListener])net.connect(port, [host], [connectionListener])net.connect(path, [connectionListener]): 새로운 소켓 객체를 생성하고 해당 위치로 소켓을 연다. 소켓이 설정되면‘connection’ 이벤트가 발생되고, ‘connectionListener’ 매개 변수는‘connection’ 이벤트에 대한 리스너로서 추가된다. Wrapper!
    7. 7. Detail!server.listen(port, [host], [backlog], [callback])server.listen(path, [callback])server.listen(handle, [callback]): 지정된 서버(port, host, path, …)의 커넥션 연결을 시작한다. 서버가 실행되면 ‘listening’ 이벤트가 발생되고, ‘callback’ 매개 변수는 ‘listening’ 이벤트에 대한 리스너로서 추가된다. Server!
    8. 8. Detail!server.close([callback]): 새로운 커넥션 연결을 중단하고 기존의 커넥션만 유지한다. 그리고 모든 커넥션이 종료되었을 때 서버를 닫는다. 서버는 ‘close’ 이벤트를 발생시키고 선택적으로 ‘close’ 이벤트를 받을 수 있는 콜백을 매개 변수로 정할 수 있다. Server!
    9. 9. Detail!server.address(): IP 주소와 포트 번호와 같은 서버 정보를 운영체제로부터 가져온다. 참고로‘listening’ 이벤트가 발생한 후에만 메소드 호출이 가능하다. Server!
    10. 10. Detail!server.maxConnections: 서버에 연결되는 커넥션의 최대 수를 정하는 프로퍼티 Server!
    11. 11. Detail!server.connections: 서버에 동시에 연결된 커넥션 수를 가지는 프로퍼티 Server!
    12. 12. Detail!server.on(event, listener)Event Descriptionlistening server.listen 메소드가 호출되었을 경우connection 새로운 커넥션이 만들어질 경우close 서버가 닫힐 경우error 에러가 발생할 경우 Server!
    13. 13. Detail!socket.connect(port, [host], [connectListener])socket.connect(path, [connectListener]): 일반적으로 net.connect 래핑 함수를 호출하여 소켓을 열기 때문에 사용자 정의 소켓을 구현해야 할 경우에만 사용한다. 그리고 ‘connectListener’ 매개 변수는 ‘connect’ 이벤트에 대한 리스너로서 추가된다. Socket!
    14. 14. Detail!socket.bufferSize: 현재 쓰여질 버퍼의 문자 수를 나타내는 프로퍼티 Socket!
    15. 15. Detail!socket.setEncoding([encoding]): 읽을 스트림으로 소켓에 대한 인코딩을 설정한다. Socket!
    16. 16. Detail!socket.write(data, [encoding], [callback]): 소켓에 데이터를 보낼 수 있는 메소드이며, 데이터의 기본 인코딩은 UTF8이다. 버퍼에 쌓인 데이터가 성공적으로 전송되었다면 true를 반환한다. 버퍼가모두 비워졌을 경우에 ‘drain’ 이벤트가 발생한다. Socket!
    17. 17. Detail!socket.end([data], [encoding]): write 메소드와 기능은 같지만 일부 스트림만 종료하며 FIN 패킷을 보낸다. 이때 서버가 일부 데이터를 보낼 수 있다. (TCP Half-close) Socket!
    18. 18. Detail!socket.destroy(): 소켓의 I/O 활동을 발생하지 않게 하는 메소드이며, 에러가 발생했을 경우에필요하다. Socket!
    19. 19. Detail!socket.pause(): 데이터 읽기를 중지하며, ‘data’ 이벤트는 발생되지 않는다. Socket!
    20. 20. Detail!socket.resume(): 데이터 읽기를 재개한다. Socket!
    21. 21. Detail!socket.setTimeout(timeout, [callback]): 소켓에 설정된 초과 시간이 지나면 ’timeout’ 이벤트가 발생하며, ‘callback’ 매개 변수는 ‘timeout’ 이벤트의 리스너로서 추가된다. 참고로 ‘timeout’ 이벤트가발생하여도 커넥션은 유지된다. 커넥션을 끊기 위해서는 사용자가 end 메소드나 destroy 메소드를 호출해야 한다. Socket!
    22. 22. Detail!socket.setNoDelay([noDelay]): Nagle 알고리즘을 비활성화하고, 기본적으로 TCP 연결은 Nagle 알고리즘을사용하므로 데이터를 보내기 전에 이를 버퍼에 저장한다. ‘noDelay’ 매개 변수를 설정하면 write 메소드가 호출될 때마다 곧바로 데이터를 전송한다. Socket!
    23. 23. Detail!socket.setKeepAlive([enable], [initialDelay]): Keep-Alive 기능의 활성화 유무를 설정하는 메소드이다. 기본적으로 비활성화 되어있으며 지연 시간을 설정할 수 있다. Socket!
    24. 24. Detail!socket.address(): IP 주소와 포트 번호와 같은 서버 정보를 운영체제로부터 가져온다. Socket!
    25. 25. Detail!socket.remoteAdress: 원격 IP 주소를 가지는 프로퍼티 Socket!
    26. 26. Detail!socket.remotePort: 원격 포트를 가지는 프로퍼티 Socket!
    27. 27. Detail!socket.bytesRead: 소켓이 받은 총 바이트 수를 가지는 프로퍼티 Socket!
    28. 28. Detail!socket.bytesWritten: 소켓에 보낸 총 바이트 수를 가지는 프로퍼티 Socket!
    29. 29. Detail!socket.on(event, listener)Event Descriptionconnect 소켓 커넥션이 설정되었을 경우data 데이터를 받았을 경우end 소켓이 FIN 패킷을 보냈을 경우timeout 시간이 초과되었을 경우error 에리가 발생할 경우close 소켓이 닫힌 경우 Socket!
    30. 30. Detail!net.isIP(input): 입력된 IP의 버전을 반환한다. Utility!
    31. 31. Detail!net.isIPv4(input): 입력된 IP의 버전이 4일 경우, true를 반환한다. Utility!
    32. 32. Detail!net.isIPv6(input): 입력된 IP의 버전이 6일 경우, true를 반환한다. Utility!
    33. 33. Example!ž  간단한 웹 서버 만들기ž  사용 모듈 (NET + MIME)ž  데모 (http://inpost.kr:7777)
    34. 34. Example!
    35. 35. Thank you!

    ×