SlideShare a Scribd company logo
Speaker. Moon-Hak-I
Prologue!
본 발표는 아래와 같은 내용으로 진행되며, 모듈의 내부적인
코드 리뷰는 생략한다.




      구조       상세      예제
Overview!
ž    비동기 네트워크 관련 API 제공
ž    서버와 클라이언트 모두 포함
Structure!

           Server
           EventEmitter   Socket
                           Stream




 Wrapper   Utility
Detail!
net.createServer([options], [connectionListener])
: TCP 서버를 생성하며, ‘connectionListener’ 매개 변수는 자동으로
‘connection’ 이벤트의 리스너로 추가된다.




                                            Wrapper!
Detail!
net.connect(options, [connectionListener])
net.connect(port, [host], [connectionListener])
net.connect(path, [connectionListener])
: 새로운 소켓 객체를 생성하고 해당 위치로 소켓을 연다. 소켓이 설정되면
‘connection’ 이벤트가 발생되고, ‘connectionListener’ 매개 변수는
‘connection’ 이벤트에 대한 리스너로서 추가된다.




                                           Wrapper!
Detail!
server.listen(port, [host], [backlog], [callback])
server.listen(path, [callback])
server.listen(handle, [callback])
: 지정된 서버(port, host, path, …)의 커넥션 연결을 시작한다. 서버가 실행되
면 ‘listening’ 이벤트가 발생되고, ‘callback’ 매개 변수는 ‘listening’ 이벤트에 대
한 리스너로서 추가된다.




                                                   Server!
Detail!
server.close([callback])
: 새로운 커넥션 연결을 중단하고 기존의 커넥션만 유지한다. 그리고 모든 커넥
션이 종료되었을 때 서버를 닫는다. 서버는 ‘close’ 이벤트를 발생시키고 선택적
으로 ‘close’ 이벤트를 받을 수 있는 콜백을 매개 변수로 정할 수 있다.




                                      Server!
Detail!
server.address()
: IP 주소와 포트 번호와 같은 서버 정보를 운영체제로부터 가져온다. 참고로
‘listening’ 이벤트가 발생한 후에만 메소드 호출이 가능하다.




                                     Server!
Detail!
server.maxConnections
: 서버에 연결되는 커넥션의 최대 수를 정하는 프로퍼티




                                 Server!
Detail!
server.connections
: 서버에 동시에 연결된 커넥션 수를 가지는 프로퍼티




                                Server!
Detail!
server.on(event, listener)
Event           Description
listening       server.listen 메소드가 호출되었을 경우
connection      새로운 커넥션이 만들어질 경우
close           서버가 닫힐 경우
error           에러가 발생할 경우




                                              Server!
Detail!
socket.connect(port, [host], [connectListener])
socket.connect(path, [connectListener])
: 일반적으로 net.connect 래핑 함수를 호출하여 소켓을 열기 때문에 사용자 정
의 소켓을 구현해야 할 경우에만 사용한다. 그리고 ‘connectListener’ 매개 변수
는 ‘connect’ 이벤트에 대한 리스너로서 추가된다.




                                             Socket!
Detail!
socket.bufferSize
: 현재 쓰여질 버퍼의 문자 수를 나타내는 프로퍼티




                               Socket!
Detail!
socket.setEncoding([encoding])
: 읽을 스트림으로 소켓에 대한 인코딩을 설정한다.




                                 Socket!
Detail!
socket.write(data, [encoding], [callback])
: 소켓에 데이터를 보낼 수 있는 메소드이며, 데이터의 기본 인코딩은 UTF8이
다. 버퍼에 쌓인 데이터가 성공적으로 전송되었다면 true를 반환한다. 버퍼가
모두 비워졌을 경우에 ‘drain’ 이벤트가 발생한다.




                                             Socket!
Detail!
socket.end([data], [encoding])
: write 메소드와 기능은 같지만 일부 스트림만 종료하며 FIN 패킷을 보낸다. 이
때 서버가 일부 데이터를 보낼 수 있다. (TCP Half-close)




                                        Socket!
Detail!
socket.destroy()
: 소켓의 I/O 활동을 발생하지 않게 하는 메소드이며, 에러가 발생했을 경우에
필요하다.




                                      Socket!
Detail!
socket.pause()
: 데이터 읽기를 중지하며, ‘data’ 이벤트는 발생되지 않는다.




                                        Socket!
Detail!
socket.resume()
: 데이터 읽기를 재개한다.




                  Socket!
Detail!
socket.setTimeout(timeout, [callback])
: 소켓에 설정된 초과 시간이 지나면 ’timeout’ 이벤트가 발생하며, ‘callback’ 매
개 변수는 ‘timeout’ 이벤트의 리스너로서 추가된다. 참고로 ‘timeout’ 이벤트가
발생하여도 커넥션은 유지된다. 커넥션을 끊기 위해서는 사용자가 end 메소드
나 destroy 메소드를 호출해야 한다.




                                             Socket!
Detail!
socket.setNoDelay([noDelay])
: Nagle 알고리즘을 비활성화하고, 기본적으로 TCP 연결은 Nagle 알고리즘을
사용하므로 데이터를 보내기 전에 이를 버퍼에 저장한다. ‘noDelay’ 매개 변수
를 설정하면 write 메소드가 호출될 때마다 곧바로 데이터를 전송한다.




                                       Socket!
Detail!
socket.setKeepAlive([enable], [initialDelay])
: Keep-Alive 기능의 활성화 유무를 설정하는 메소드이다. 기본적으로 비활성
화 되어있으며 지연 시간을 설정할 수 있다.




                                                Socket!
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          Description
connect        소켓 커넥션이 설정되었을 경우
data           데이터를 받았을 경우
end            소켓이 FIN 패킷을 보냈을 경우
timeout        시간이 초과되었을 경우
error          에리가 발생할 경우
close          소켓이 닫힌 경우




                                    Socket!
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!

More Related Content

PPT
Android Audio System
Yi-Hsiang Huang
 
PDF
The ideal and reality of NVDIMM RAS
Yasunori Goto
 
PDF
Integração do Zabbix com Grafana
Aécio Pires
 
PDF
2019.06.27 Intro to Ceph
Ceph Community
 
PPTX
Masked Occlusion Culling
Intel® Software
 
PDF
Trabalho de Sistemas Distribuídos
Juliana Cindra
 
ODP
oVirt and OpenStack
Dave Neary
 
PDF
10分で分かるLinuxブロックレイヤ
Takashi Hoshino
 
Android Audio System
Yi-Hsiang Huang
 
The ideal and reality of NVDIMM RAS
Yasunori Goto
 
Integração do Zabbix com Grafana
Aécio Pires
 
2019.06.27 Intro to Ceph
Ceph Community
 
Masked Occlusion Culling
Intel® Software
 
Trabalho de Sistemas Distribuídos
Juliana Cindra
 
oVirt and OpenStack
Dave Neary
 
10分で分かるLinuxブロックレイヤ
Takashi Hoshino
 

What's hot (20)

PDF
Fibre Channel 基礎講座
Brocade
 
PDF
Embedded Android : System Development - Part II (Linux device drivers)
Emertxe Information Technologies Pvt Ltd
 
PPTX
Using Rook to Manage Kubernetes Storage with Ceph
CloudOps2005
 
PDF
Understanding the Android System Server
Opersys inc.
 
PPTX
Android audio system(audioflinger)
fefe7270
 
PDF
Embedded Android : System Development - Part IV
Emertxe Information Technologies Pvt Ltd
 
PDF
Audio Drivers
Anil Kumar Pugalia
 
PDF
Kerbernetes Robotics Distributed System Deep Dive
Tomoya Fujita
 
PDF
Apache Archiva を試す
bouzuya
 
PDF
組み込みLinuxでのGolangのススメ(Go con版)
Tetsuyuki Kobayashi
 
PDF
Intro to Flutter
Eason Pai
 
PPTX
Oracle VM 3.4.1 Installation
Simo Vilmunen
 
PDF
CONFidence 2017: Hacking embedded with OpenWrt (Vladimir Mitiouchev)
PROIDEA
 
PPTX
U-Boot Porting on New Hardware
RuggedBoardGroup
 
PPTX
Spy hard, challenges of 100G deep packet inspection on x86 platform
Redge Technologies
 
PDF
What is an IoT Agent
Fernando Lopez Aguilar
 
PDF
5G時代のアプリケーションとは 〜 5G+MECを活用した低遅延アプリの実現へ 〜
VirtualTech Japan Inc.
 
PDF
Serf / Consul 入門 ~仕事を楽しくしよう~
Masahito Zembutsu
 
PDF
XPDDS19: [ARM] OP-TEE Mediator in Xen - Volodymyr Babchuk, EPAM Systems
The Linux Foundation
 
PDF
pfSense, OpenSource Firewall
Erik Kirschner
 
Fibre Channel 基礎講座
Brocade
 
Embedded Android : System Development - Part II (Linux device drivers)
Emertxe Information Technologies Pvt Ltd
 
Using Rook to Manage Kubernetes Storage with Ceph
CloudOps2005
 
Understanding the Android System Server
Opersys inc.
 
Android audio system(audioflinger)
fefe7270
 
Embedded Android : System Development - Part IV
Emertxe Information Technologies Pvt Ltd
 
Audio Drivers
Anil Kumar Pugalia
 
Kerbernetes Robotics Distributed System Deep Dive
Tomoya Fujita
 
Apache Archiva を試す
bouzuya
 
組み込みLinuxでのGolangのススメ(Go con版)
Tetsuyuki Kobayashi
 
Intro to Flutter
Eason Pai
 
Oracle VM 3.4.1 Installation
Simo Vilmunen
 
CONFidence 2017: Hacking embedded with OpenWrt (Vladimir Mitiouchev)
PROIDEA
 
U-Boot Porting on New Hardware
RuggedBoardGroup
 
Spy hard, challenges of 100G deep packet inspection on x86 platform
Redge Technologies
 
What is an IoT Agent
Fernando Lopez Aguilar
 
5G時代のアプリケーションとは 〜 5G+MECを活用した低遅延アプリの実現へ 〜
VirtualTech Japan Inc.
 
Serf / Consul 入門 ~仕事を楽しくしよう~
Masahito Zembutsu
 
XPDDS19: [ARM] OP-TEE Mediator in Xen - Volodymyr Babchuk, EPAM Systems
The Linux Foundation
 
pfSense, OpenSource Firewall
Erik Kirschner
 
Ad

Viewers also liked (7)

PPTX
[IGC 2016] Photon 운영사무국 - 실시간 게임의 빠른 개발을 위한 솔루션 「Photon」
강 민우
 
PDF
[111217 아꿈사연말모임] 웹소켓과온라인게임
sung ki choi
 
PDF
[122]네이버의모던웹라이브러리 박재성
NAVER D2
 
PPTX
bamboo 로 PHP 프로젝트 지속적인 배포
KwangSeob Jeong
 
PPTX
Node.js의 도입과 활용
Jin wook
 
PDF
NodeJS for Beginner
Apaichon Punopas
 
PDF
코드품질 개선을 위한 GS SHOP 고군분투기
Darion Kim
 
[IGC 2016] Photon 운영사무국 - 실시간 게임의 빠른 개발을 위한 솔루션 「Photon」
강 민우
 
[111217 아꿈사연말모임] 웹소켓과온라인게임
sung ki choi
 
[122]네이버의모던웹라이브러리 박재성
NAVER D2
 
bamboo 로 PHP 프로젝트 지속적인 배포
KwangSeob Jeong
 
Node.js의 도입과 활용
Jin wook
 
NodeJS for Beginner
Apaichon Punopas
 
코드품질 개선을 위한 GS SHOP 고군분투기
Darion Kim
 
Ad

Similar to [NodeJS] - NET 모듈 소개 (20)

PDF
Nodejs_chapter3
Yoon Hee Hwang
 
PPTX
Tcp server / client
문익 장
 
PDF
소켓프로그래밍 기초요약
세빈 정
 
PPTX
TCP echo 서버 및 클라이언트 예제 스터디
quxn6
 
PPTX
파이썬+네트워크 20160210
Yong Joon Moon
 
PDF
(C#,네트워크강좌)간단한 TCP 클라이언트/서버 구현, 멀티쓰레드 기반 에코우 클라이언트/서버_C추천#/WPF/자마린실무교육학원
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
TCP/IP Protocol - JAVA
cooddy
 
PDF
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
흥배 최
 
PDF
리눅스 소켓 프로그래밍 기초
Yu Yongwoo
 
PDF
Python socket programming
Tae Young Lee
 
PDF
Ryu with OpenFlow 1.3, REST API
jieun kim
 
PPTX
Implementing remote procedure calls rev2
Sung-jae Park
 
PPTX
Wire shark 사용법 및 네트워크 개론 살짝 설명
진우 이
 
PDF
Network programming report
Jongwon
 
PPTX
고급시스템프로그래밍
kimkiweon
 
PPTX
TCP/IP 발표자료 - 김연수
Yeon Soo Kim
 
PDF
Netty 세미나
Jang Hoon
 
PDF
Python으로 채팅 구현하기
Tae Young Lee
 
PPTX
소켓 주소 구조체 다루기(윈도우 네트워크 프로그래밍)
문익 장
 
PDF
오픈 소스 클라우드 플랫폼 분석
Jennifer Noh
 
Nodejs_chapter3
Yoon Hee Hwang
 
Tcp server / client
문익 장
 
소켓프로그래밍 기초요약
세빈 정
 
TCP echo 서버 및 클라이언트 예제 스터디
quxn6
 
파이썬+네트워크 20160210
Yong Joon Moon
 
(C#,네트워크강좌)간단한 TCP 클라이언트/서버 구현, 멀티쓰레드 기반 에코우 클라이언트/서버_C추천#/WPF/자마린실무교육학원
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
TCP/IP Protocol - JAVA
cooddy
 
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
흥배 최
 
리눅스 소켓 프로그래밍 기초
Yu Yongwoo
 
Python socket programming
Tae Young Lee
 
Ryu with OpenFlow 1.3, REST API
jieun kim
 
Implementing remote procedure calls rev2
Sung-jae Park
 
Wire shark 사용법 및 네트워크 개론 살짝 설명
진우 이
 
Network programming report
Jongwon
 
고급시스템프로그래밍
kimkiweon
 
TCP/IP 발표자료 - 김연수
Yeon Soo Kim
 
Netty 세미나
Jang Hoon
 
Python으로 채팅 구현하기
Tae Young Lee
 
소켓 주소 구조체 다루기(윈도우 네트워크 프로그래밍)
문익 장
 
오픈 소스 클라우드 플랫폼 분석
Jennifer Noh
 

[NodeJS] - NET 모듈 소개

Editor's Notes

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