티스토리 뷰
소켓을 통해 프로세스들은 IP 주소와 포트를 통해 통신할 수 있다. 소켓을 이용한 프로세스 간 통신(IPC)은 동일한 서버에 존재하는 프로세스 간 통신뿐만 아니라 다른 서버에 존재하는 프로세스 간 통신에도 사용할 수 있다.
Node.js는 net 모듈을 제공해 소켓 서버와 클라이언트 생성을 지원한다.
네트워크 소켓 이해
네트워크 소켓은 컴퓨터 네트워크를 통한 통신의 종단에 위치한다. 소켓은 HTTP 계층 아래에 존재하고, 서버 간의 지점 대 지점 point to point 통신을 제공한다. 인터넷 통신은 인터넷 소켓에 바탕을 두고 있다.
소켓은 IP 주소와 포트의 조합으로 구성된 소켓 주소를 사용해 동작한다. 소켓 연결은 두 가지 형태(서버, 클라이언트)로 존재하며 서버는 연결을 수신하고, 클라이언트는 서버에 연결을 진행한다. 이때 서버와 클라이언트는 유일한 IP주소와 포트 조합을 가져야 한다.
Node.js 의 net 모듈 소켓은 전송 제어 프로토콜 TCP 를 사용해 원시 데이터를 전송한다. TCP 프로토콜은 데이터를 패키징하고 지점 간 데이터 전송 성공 여부를 보장한다. net 모듈은 요청을 처리할 TCP 서버 및 요청을 만들 TCP 소켓 클라이언트를 위한 Framework를 제공한다.
소켓 서버 상에서 socket 객체는 클라이언트가 서버에 연결하는 시점이나 연결 이벤트 핸들러에 전달되는 시점에 생성한다.
Client
var net = require('net');
var client = net.connect({port: 8107, host:'localhost'},function(){
//net모듈의 소켓 객체를 사용
console.log('Client connected');
client.write('Some Data\r\n');
});
client.on('data',function(data){//data 이벤트 발생시 callback
console.log(data.toString());
client.end();
});
client.on('end',function(){//end 이벤트 발생시 callback
console.log('Client disconnected');
});
Server
//server객체는 net.createServer() 호출 시 내부적으로 생성된다.
//소켓 서버는 연결을 위한 수신 처리 후 서버 연결을 통한 데이터 송신/수신을 한다.
var net = require('net');
var server = net.createServer(function(client){
console.log('Client connected');
client.on('data', function(data){
console.log('Client sent ' + data.toString());
});
client.on('end',function(){
console.log('Client disconnected');
}
);
client.write('Hello');
});
server.listen(8107, function(){
console.log('Server listening for connections');
});
TCP - Transmission Control Protocol 전송 과정을 컨트롤 하는 프로토콜, 호스트간 신뢰성
있는 데이터 전달과 흐름제어 및 혼잡제어 등을 제공하는 전송계층의 연결 지향형 프로토콜
UDP - User Datagram Protocol 사용자 데이터그램 프로토콜, 전송계층에서 제공해야할
최소한의 서비스, 즉 호스트간 데이터 전달과 오류검출만을 제공하는 비연결형 전송 프로토콜
동작TLS 서버와 TLS 클라이언트 Transprot Layer Security/Secure Sockets Layer
인터넷에서 안전하게 통신하도록 하는 암호화 프로토콜
통신하는 소켓 서버의 적합성 여부를 판단하기 위해 세션 키와 x.509 인증서를 사용한다.
장기간 사용하는 공개 키와 개인 키를 사용해 송/수신 데이터 암호화를 위해 단기간 사용하는
세션 키를 교환한다. 인증 역할도 수행하기 때문에 의도 하지 않은 서버로 재 라우팅이 수행되는
중간자 공격을 방어할 수 있다.
'node.js' 카테고리의 다른 글
(express) 8. 폼 처리 (0) | 2016.01.18 |
---|---|
7. HTTP 서비스를 Node.js로 구현 (0) | 2016.01.12 |
(express) 3. express로 시간 절약 (0) | 2016.01.11 |
6. Node.js에서 파일시스템 접근 (0) | 2016.01.04 |
5. Node.js의 데이터 입출력 처리 (0) | 2015.12.29 |