호스팅 매뉴얼
Home > 호스팅 > 컨테이너호스팅 > Node.js 사용하기 > 채팅 서버 만들기
이 문서에서는 Node.js와 Socket.IO를 이용하여 기본적인 채팅 애플리케이션을 만듭니다.
그리고 Redis Pub/Sub 메세징 기능을 적용하여 Clustering 모드로 애플리케이션을 확장해 봅니다.
이 프로젝트 Socket.IO 공식 홈페이지의 데모 프로젝트를 기반으로 진행됩니다.
1. Socket.IO Demo Project 받기
[guser@nodejs ~]$ git clone https://github.com/socketio/socket.io
Socket.IO 공식 데모 프로젝트를 git clone합니다.
2. WORK_DIR 변경 (Gabia Node.js 호스팅 아닌 경우 생략)
[guser@nodejs ~]$ vi .bashrc
• 변경 전
export WORK_DIR="/web"
• 변경 후
export WORK_DIR="/web/socket.io/examples/chat"
WORK_DIR에 프로젝트 경로를 설정합니다.
3. Project Directory로 이동
[guser@nodejs ~]$ cd socket.io
4. NPM 설치
[guser@nodejs socket.io]$ npm install
/socket.io/package.json에 명시한 dependencies 목록을 설치합니다.
5. Chatt 예제 프로젝트로 이동
[guser@nodejs socket.io]$ cd examples/chat/
6. NPM 설치
[guser@nodejs chat]$ npm install
/socket.io/examples/chat/package.json에 명시한 dependencies 목록을 설치합니다.
7. Socket.IO 코드 리뷰
/socket.io/examples/chat/index.js
var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('../..')(server);
io.on('connection', (socket) => {
socket.on('new message', (data) => {
socket.broadcast.emit('new message', data);
});
});
Socket.IO를 사용하는 기본적인 서버 사이드 코드입니다.
• line 1~4: Express 모듈을 통해 HTTP 서버를 생성하고 Socket.IO 서버와 연결합니다. (line 4 의 '../..' 는 'socket.io' 모듈을 로드합니다.)
• line 6: Client의 Connection 이벤트 발생시 Client Socket 파라미터와 함께 Callback을 받습니다.
• line 7: Client로 부터 “new message”라는 이벤트를 수신시 data 파라미터와 함께 Callback을 받습니다.
• line 8: “new message”라는 이벤트로 Broadcasting(자신을 제외한 모든 Client에게 전송)을 합니다.
/socket.io/examples/chat/public/main.js
var socket = io();
const sendMessage = () => {
var message = $inputMessage.val();
message = cleanInput(message);
if (message && connected) {
$inputMessage.val('');
addChatMessage({
username: username,
message: message
});
socket.emit('new message', message);
}
}
socket.on('new message', (data) => {
addChatMessage(data);
});
Socket.IO를 사용하는 기본적인 클라이언트 사이드 코드입니다. View에 관련된 코드는 다루지 않습니다.
• line: 1: Socket.IO 서버에 Connection 요청을 하여 Client socket을 생성합니다.
• line: 3: View에서 메세지를 전송시 호출할 함수
• line: 12: Server로 “new message”라는 이벤트를 message 파라미터와 함께 전송합니다.
• line: 16: Server로 부터 “new message”라는 이벤트를 수신시 data 파라미터와 함께 Callback을 받습니다.
8. PM2(프로세스 매니저) 설치
[guser@nodejs chat]$ npm install pm2 -g
• PM2 관리 명령어
app_name 대신 all 또는 애플리케이션 id로 변경하여 사용 가능합니다.
9. npm start 스크립트 변경
[guser@nodejs chat]$ vi package.json
/socket.io/examples/chat/package.json
• 변경 전
"scripts": {
"start": "node index.js"
}
• 변경 후
"scripts": {
"start": "pm2 start index.js"
}
애플리케이션을 pm2(프로세스 매니저)로 실행하도록 start 스크립트를 변경합니다.
10. 웹 애플리케이션 실행
[guser@nodejs chat]$ npm start
11. 웹 애플리케이션 사이트 접속
가비아 Node.js 호스팅: https://{접속 ID}.gabia.io
로컬: http://localhost:3000/
컨테이너호스팅 시작하기
DNS 설정하기
SFTP/SSH 접속하기
DB 접속하기
phpPgAdmin 접속 설정하기
관리 콘솔
관리 콘솔 알아보기
자원 현황
사용량 현황 보기
트래픽 당겨쓰기
웹 용량 추가하기
트래픽 추가/충전하기
웹 용량 차단 해제하기
용량 초과 알림 설정하기
메모리 용량 추가하기
기본 정보
서비스 시작일/만기일 보기
소유자/관리자 정보 보기
타입 변경하기
주간운영리포트 수신 설정하기
장애 알림 받기
도메인
대표 도메인 변경하기
도메인 연결/해지하기
보안 설정
웹 서버(SFTP/SSH) 접속 설정하기
웹 서버(SFTP/SSH) 비밀번호 변경하기
웹사이트 접근 IP 관리하기
SSH/SFTP 접속 차단 IP 해제하기
DB 서버 비밀번호 변경하기
웹 서버 접속 허용 IP 등록하기
웹쉘 탐지 관리하기
웹 서버
웹 서버 환경 변경하기
웹 서버 초기화하기
웹 서버 접속 허용 IP 등록하기
웹 서버(SFTP/SSH) 비밀번호 변경하기
웹 로그 보기
DB 서버
DB 서버 비밀번호 변경하기
phpPgAdmin 접속 설정하기
DB 접속하기
MySQL 서버 접속/백업/복원하기
DB 서버 환경 변경하기
DB 서버 초기화하기
백업/복원
백업하기
복원하기
모니터링
서버 현황 보기
웹/DB 현황 보기
사이트 웹 로그 분석하기
슬로우 쿼리 확인하기
트래픽 현황 보기
이력 관리하기
메일
메일 관리하기
서비스 계약 관리
결제 알림 설정하기
담당자 정보 변경하기
서비스 해지하기
Node.js 사용하기
Node.js 환경 확인하기
프로세스 관리 도구 사용하기
기본 웹 애플리케이션 만들기
Express로 웹 애플리케이션 만들기
NVM으로 버전 관리하기
SSL 인증서 설치 후 HTTPS 통신 강제 적용하기
채팅 서버 만들기
MySQL 모듈 기본 사용 방법
Python 사용하기
Python 환경 확인하기
패키지 관리 도구 사용하기
Flask로 기본 웹 애플리케이션 만들기
Django로 웹 애플리케이션 만들기
Gunicorn으로 정적 파일 서비스하기
미디어 파일을 실시간으로 서비스하기 위한 Django 설정법
SSL 인증서 설치 후 HTTPS 통신 강제 적용하기
Java 사용하기
Java 환경 확인하기
Spring Boot CLI로 프로젝트 생성하기
Spring Boot CLI로 Groovy 웹 프로젝트 실행하기
Maven으로 SpringBoot 웹 프로젝트 실행하기
Gradle로 SpringBoot 웹 프로젝트 실행하기
빌드한 웹 프로젝트 실행하기
SSL 인증서 설치 후 HTTPS 통신 강제 적용하기
Redis 사용하기
Node.js와 Redis 연동하기