Frameworks/Node.js

[Node.js 강좌] 8-1. Node.js 외장 모듈 - Socket.io

양디 2016. 1. 10. 17:03




Socket.io ?



네트워크에 대해 공부했다면, 소켓 이라는 단어를 들어본 적이 있을 것입니다.

혹은, 전구를 갈아본 적이 있다면, 혹은 설치해본 적 이있다면 소켓이란 말을 들어보았을 것입니다.

전구와 전선의 연결 부분이 바로 전구 소켓입니다.


네트워크 상에서도 동일한 역할을 합니다.

서로 다른 종류의 구동 환경에서, 서로를 연결해주고 데이터를 주고 받을 수 있도록 도와주는 것이 통신에서 말하는 소켓입니다.


이 Socket.io 모듈을 통해서 웹 서버는 웹 브라우저와 실시간 통신이 가능하게 됩니다.


그러기 위해서는 웹 서버, 즉 HTTP 서버를 구성할 때에 socket.io가 서버에 들어오는 소켓 통신을 받을 수 있도록 설정해주어야 합니다.


포스팅에서는 socket.io를 이용하여 간단한 채팅 웹 어플리케이션을 제작하는 것을 연습해 보겠습니다.

개발 환경 세팅


간단한 채팅방 웹페이지를 만들기 위하여 사용할 모듈은 express와 socket.io 모듈입니다.

express 에서는 템플릿 엔진으로 ejs를 사용할 계획입니다.

따라서 먼저 폴더를 생성 후에 다음과 같이 입력합니다.


express --ejs


그럼 기본 폴더와 파일들이 생성되고, 다음 명령어를 통하여 외부 모듈들을 설치합니다.


npm install


express를 위한 세팅은 끝났고, 이제 socket.io 모듈은 다운로드 받습니다.


npm install socket.io --save


그럼 모든 기본 준비는 마쳤습니다. 

Socket.io 서버 설정


위에서 socket.io가 서버에 들어오는 소켓 통신을 받을 수 있도록 설정하기 위하여 HTTP 서버를 구성할 때 설정을 해주어야 한다고 했습니다.


express 포스트에 나와 있듯이 http 서버 구성은 ./bin/www.js 파일에 되어 있습니다.


따라서 해당 파일을 열어서 socket.io 서버를 설정하여야 합니다.






아래 빨간 박스의 server 객체가 우리가 필요한 객체입니다.


socket.io 서버를 설정하기 위해서는 여러가지 방법이 있습니다.


그냥 간단하게 이 파일 내부에서 설정하는 방법이 있습니다. 

그럴 경우에 다음과 같이 코드 한줄을 추가시켜주면 됩니다.


1
2
var server = http.createServer(app);
var io = require('socket.io')(server);
cs


이렇게 설정해주는 것이 가장 기본적인 방법입니다.


그러나 이후에 io 객체를 이용하여서 수많은 코드를 작성하여야 할 텐데, 그 내용들이 다 www.js 파일에 있으면 보기에도 좋지 않고 관리하기에도 좋지 않습니다.


각각의 지정된 파일이 지정된 영역의 코드를 관리하는 것이 가장 관리하기 편한 방식이므로, 조금 다른 방식을 선택하여야 합니다.


위에 보면 알 수 있듯이 socket.io 객체를 선언하기 위해서는 server 객체를 인자로 전달해주어야 합니다.

따라서 두가지 방식의 파일 분리가 가능합니다.


첫번째, io.js 파일을 만든 후에, server 객체를 내보내서 io.js 파일 내부에서 사용한다. 이때에는 실행파일이 www.js에서 io.js로 바뀌어야합니다.


두번째, io.js 파일을 만든 후에, 모듈화 된 객체를 내보낸 후에 이를 www.js 파일에서 받아들여서 메서드를 실행시킨다.


여기에서는 두번째 방법을 사용하도록 하겠습니다.



먼저 io.js 파일을 새로 만들어서 위와 같이 선언합니다.

모듈을 만들어서, 함수의 인자 객체 server 를 통해서 io 객체를 만들도록 선언합니다.



그 후에 위와 같이 www.js 파일에서는 require 한 후에 server 객체를 넘겨주면 됩니다.


오늘 포스팅은 여기까지입니다. 다음 포스팅에서는 socket.io를 브라우저에서 연결하는 방법과,


연결 후에 어떤 방식으로 통신하는지에 대해 작성하도록 하겠습니다.





Point !

Socket.io 모듈은 실시간 통신을 위한 모듈이다.

HTTP 서버 객체를 통해 실행시킬 수 있다.




댓글