JavaScript È°¿ëÆÁ
2018.06.18 / 15:05

½Ç½Ã°£ ¸ÖƼäÆà ±¸ÇöÇϱâ! - node.js

¸®¾ó¸®
Ãßõ ¼ö 189

½Ç½Ã°£ ¸ÖƼäÆà ±¸ÇöÇϱâ!

 

À¥¿¡¼­ ½Ç½Ã°£Ã³¸®

ÇкλýÈ°Áß ½Ç½Ã°£Ã³¸® °ü·ÃÀ¸·Î TCP/IP¸¦ ¹è¿ì¸é¼­ TCP/IP¸¦ ÀÌ¿ëÇÑ 1:1 äÆÃÀ» ±¸ÇöÇغ¸¼ÌÀ»°ÍÀ̶ó »ý°¢ÇÕ´Ï´Ù. ÇÏÁö¸¸ ½Ç¹«¿¡¼­´Â Àü~~~~Çô ¾µ¸ð°¡ ¾ø´Â °Í °°½À´Ï´Ù;; ¼ö¾÷Áß Ã¥¿¡ ³ª¿ÍÀÖ´Â ¼Ò½º´ë·Î µû¶óÇÑ´Ù¸é 1:1äÆÃÀº Àß µÇÁö¸¸ ¸ÖƼäÆñ¸ÇöÀº ¸Ó¸®¸¦ ±¼¸®°í ±¼·Á¾ß °£½ÅÈ÷ ±¸ÇöÇÒ ¼ö ÀÖÀ» °Ì´Ï´Ù. ±×·¯³ª ¿ª½Ã ½ÇÁ¦¼­ºñ½º¿¡ Àû¿ëÀº ¹«¸®¶ó°í »ý°¢µË´Ï´Ù.

±×·³, ½±°Ô ÇÁ·Î±×·¡¹ÖÀ» Â¥¸é¼­ ½ÇÁ¦¼­ºñ½º¿¡¼­ Àû¿ëÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀÌ ¹«¾ùÀÌ ÀÖÀ»±î¿ä?

¸ÖƼäÆðü·ÃÀ¸·Î ¾Ë¾Æº¸¸é¼­ ±¦ÂúÀº °ÍÀ» Çϳª ã¾Ò½À´Ï´Ù : )

¿äÁò ÀþÀºÃþ(?)¿¡¼­ ¸¹ÀÌ »ç¿ëÇÏ°í Àִ node.js + socket.io ÀÔ´Ï´Ù. ÀÌ°É ¾ð¾î¶ó°í ¼³¸íÀ» ÇؾßÇÒÁö ÇÁ·¹ÀÓ¿öÅ©¶ó°í ¼³¸íÀ» ÇؾßÇÒÁö ¾Ö¸ÅÇÕ´Ï´Ù. node.jsÀÚü°¡ javascript¸¦ ±â¹ÝÀ¸·Î ¸¸µé¾îÁø°ÍÀ¸·Î ¾Ë°íÀÖ½À´Ï´Ù.

Wiki(node.jsÀ§Å°¸µÅ©)¸¦ Âü°íÇϸé Node.js´Â È®À强 ÀÖ´Â ³×Æ®¿öÅ© ¾îÇø®ÄÉÀ̼Ç(ƯÈ÷ Server-side) °³¹ß¿¡ »ç¿ëµÇ´Â ¼ÒÇÁÆ®¿þ¾î Ç÷§ÆûÀ̶ó°í Á¤ÀǵǾî ÀÖ½À´Ï´Ù.

À½. Àú´Â ÀÏ´Ü ÇÁ·¹ÀÓ¿öÅ©·Î ±¸ºÐÇÏ°Ú½À´Ï´Ù. ¼­¹öÇÁ·Î±×·¥±¸Çö¿¡ À־ javascript¾ð¾î¸¦ ÀÌ¿ëÇϸ鼭 ƯȭµÇ¾ú´Ù°í »ý°¢ÇÏ½Ã¸é µÉ °Í °°½À´Ï´Ù.

Àú´Â javascript¾ð¾î°¡ ±×·¸°Ô Àͼ÷Ä¡¾Ê¾Æ¼­ °¡²û¾¿ ¹®¹ýÀ» È®ÀÎÇϸ鼭 ÀÛ¼ºÇϴµ¥ ¾ð¾î°¡ Àͼ÷ÇϽŠºÐµéÀº Á¤¸» ½±°Ô ÀÛ¼ºÇϸ鼭 ³î·¤ °Í °°³×¿ä. ÈÄÈÄ

node.js + socket.io

node.js + socket.io? ÀÌ°Ô ¹«¾ùÀÏ°¡¿ä?

ÀÏ´Ü node.js´Â ¼­¹öÇÁ·Î±×·¥À̶ó´Â °ÍÀº ¾Ë°ÚÁö¸¸ socket.io È®ÀåÀÚºÎÅÍ Âü ÀÌ»óÇÕ´Ï´Ù. °£´ÜÇÏ°Ô ¼³¸íµå¸®¸é ¼ÒÄÏÅë½ÅÀ» ½±°Ô ±¸ÇöÇÒ ¼ö ÀÖµµ·Ï µµ¿ÍÁÖ´Â ¾ÆÀ̶ó°í ¸»¾¸µå¸± ¼ö ÀÖ½À´Ï´Ù.

node.js¿Í socket.io°¡ ¸¸³ª¸é ¾Æ±î À§¿¡¼­ Èûµé°Ô ±¸ÇöÇÏ´ø ¸ÖƼäÆÃÀ» ¼ø½Ä°£¿¡ ª°í ±½°Ô ±¸ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù!

¼º´ÉÀÌ Àǽɽº·¯¿ì½Å°¡¿ä? Àú´Â Å×½ºÆ®Çغ¸Áö ¾Ê¾ÒÁö¸¸ ´Ù¸¥ºÐµé²²¼­ Å×½ºÆ®ÇÑ ³»¿ëµéÀ» º¸°ÔµÇ¸é ½Ç.½Ã.°£ Á¢¼Ó ¸îõ¸í±îÁö´Â ¹«¸®¾øÀÌ Ã³¸®ÇØÁشٰí ÇÕ´Ï´Ù! ¾öûū ¼­ºñ½º¸¦ ÇÏÁö¾Ê´Â´Ù¸é ¸îõ¸íÀÌ Á¤È®ÇÏ°Ô µ¿½Ã¿¡ Á¢¼ÓÇÒÀÏÀÌ ¸¹À»±î¿ä? Á¦ °³ÀÎÀûÀ¸·Î´Â ±×·±°ÆÁ¤À» ÇÏ°íÀÖ´Ù¸é, ±× ¼­ºñ½º´Â ÀÌ¹Ì ¼º°øÇ߱⠶§¹®¿¡ ´É·ÂÀÖ´Â °³¹ßÀÚ¸¦ ÀÚ½ÅÀÖ°Ô ¿µÀÔÇÏ¸é µË´Ï´Ù :D ÇÏÇÏÇÏÇÏÇÏÇÏ

ÀÌ·¸°Ô ¸»¸¸ ÁÖÀú¸®ÁÖÀú¸®ÇغÃÀÚ ¸Ó¸®¸¸ ´õ º¹ÀâÇØÁú °Í °°³×¿ä. Á÷Á¢ ½Ç½ÀÀ» ÅëÇؼ­ ¾ó¸¶³ª À§´ëÇÑÁö °°ÀÌ È®ÀÎÇصµ·Ï Çսô٠: )

äÆà Server

node.js - node.js ¸µÅ©

socket.io - Socket.IO ¸µÅ©

º»°ÝÀûÀÎ Àû¿ëÀ» À§ÇØ À§¿¡ ÀÖ´Â µÎ À¥»çÀÌÆ®¸¦ µé¾î°¡¼­ ¼³Ä¡¸¦ ÇØÁÖ¼¼¿ä. node.js¸¦ ¼³Ä¡ÇϽŠµÚ socket.io¸¦ ÁغñÇØÁÖ½Ã¸é µË´Ï´Ù : )

±âº»ÀûÀÎ SOCKETÅë½ÅÀ» È°¿ëÇÏ´Â ¹æ¹ýÀÌ socket.io À¥»çÀÌÆ®¿¡ ¼³¸íµÇ¾î Àֳ׿ä.

/* Server Source */
var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});
/* Client Source */
<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect('http://localhost');
  socket.on('news', function (data) {
    console.log(data);
    socket.emit('my other event', { my: 'data' });
  });
</script>

ÀÌ·¸°Ô ¼­¹öÂÊ°ú Ŭ¶óÀ̾ðÆ®¿¡ À§ ¿¹Á¦¼Ò½º¸¦ Àû¿ëÇÏ½Ã¸é ½Ç½Ã°£À¸·Î Åë½ÅÇÒ ¼ö ÀÖ´Â ÆäÀÌÁö°¡ ¿Ï¼ºµË´Ï´Ù : ) ÇÏÁö¸¸ ¡°À§¿¡ ÀÖ´Â ¼Ò½º°¡Áö°í äÆÃÀ» ¾î¶»°Ô ¸¸µé¾î?¡± ÇϽô ºÐÀÌ ÀÖÀ»Áöµµ ¸ð¸£°Ú½À´Ï´Ù.

/* ½ÇÁ¦ Àû¿ëÇÑ Server Source */
var io = require('socket.io').listen(50000);

io.sockets.on('connection', function(socket) {
    socket.emit('connection', {
        type : 'connected'
    });

    socket.on('connection', function(data) {
        if(data.type == 'join') {

            socket.join(data.room);

            socket.set('room', data.room);

            socket.emit('system', {
                message : 'äÆù濡 ¿À½Å °ÍÀ» ȯ¿µÇÕ´Ï´Ù.'
            });

            socket.broadcast.to(data.room).emit('system', {
                message : data.name + '´ÔÀÌ Á¢¼ÓÇϼ̽À´Ï´Ù.'
            });
        }
    });

    socket.on('user', function(data) {
        socket.get('room', function(error, room) {
            socket.broadcast.to(room).emit('message', data);
        });
    });

});

À§¿¡´Â Á¦°¡ ÀÌ°ÍÀú°Í ¼öÁýÇϸ鼭 Á¦´ë·Î ÀÛµ¿Çϵµ·Ï ¸¸µé¾îº» ¼­¹ö¼Ò½ºÀÔ´Ï´Ù : )

°¢ »ç¿ëÀÚµéÀÌ ¿øÇϴ äÆù濡 Á¢¼ÓÇÏ¿© ¼­·Î ½Ç½Ã°£À¸·Î äÆÃÇÒ ¼ö ÀÖµµ·Ï Áö¿øÇØÁÖ´Â ¼­¹öÀÔ´Ï´Ù.

socket.io¿¡ ÀÇÇؼ­ »ç¿ëÀÚ°¡ ÇØ´ç¹æ¿¡ Á¢¼ÓÇÏ¿© ±ÛÀÛ¼º½Ã ¼­¹ö´Â °°Àº¹æ¿¡ Àִ ŸÁ¢¼ÓÀÚ¿¡°Ô ÇØ´ç¸Þ¼¼Áö¸¦ ºê·Îµåij½ºÆ®ÇØÁÖ´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù.

¸¸¾à ´ëÈ­ÇÑ ³»¿ëµéÀ» ÀúÀåÇÏ°í ½Í´Ù¸é µ¥ÀÌÅÍ°¡ ³Ñ¾î¿À´Â ½ÃÁ¡¿¡¼­ ¿øÇϴ DB¿¡ ConnectionÇÏ¿© ±â·ÏÇÏ¸é µË´Ï´Ù : ) Àú´Â ¿©±â¼­ ¿äÁò À¯ÇàÇѴٴ MongoDB(¸ù°íDB)¸¦ ÀÌ¿ëÇغ¸¾Ò°í, ½ÇÇè°á°ú! ¸¸Á·½º·¯¿ü½À´Ï´Ù.

±×·³ ´ÙÀ½Àº Client¿¡¼­´Â ¾î¶»°Ô °°Àº ¹æ¿¡ Á¢¼ÓÇϸç, ¸Þ¼¼Áö¸¦ ÁÖ°í¹ÞÀ» ¼ö ÀÖ´ÂÁö »ìÆ캸µµ·Ï ÇÏ°Ú½À´Ï´Ù!

äÆà Client

¹Ù·Î À§¿¡¼­ ¾ÆÁÖ¾ÆÁÖ¾ÆÁÖ °£´ÜÇÏ°Ô Client¼Ò½º¸¦ º¸¼ÌÁö¸¸, °¨ÀÌ Àß ¾È¿À½Ç °Í °°³×¿ä. ±×·¡¼­ ³ª¸§ »ùÇüҽº¸¦ ÁغñÇغ¸¾Ò½À´Ï´Ù. ¾ÆÁÖ ±âº»ÀûÀ¸·Î ´ëÈ­ÇÒ ¼ö ÀÖµµ·Ï ¸¸µé¾îº¸¾Ò½À´Ï´Ù : )

Âü°íÇϼż­ Ŭ¶óÀ̾ðÆ®¿Í ¼­¹ö ¸ðµÎ Á÷Á¢ ±¸ÇöÇغ¸¾Æ¿ä : )

<!DOCTYPE html>
<html>
    <head>
    <style>
        .footer {
                width: 100%;
                height: 50px;
                position: fixed;
                bottom: 0;
            }
    </style>
    </head>
    <body>
        <div class='j-message'>
        </div>
        <div class='j-footer'>
            <table>
                <tr>
                    <td width='100%'>
                        <input id='message-input' type='text'>
                    </td>
                    <td width='20%'>
                        <button id='message-button' type='submit'> Àü¼Û </button>
                    </td>
                </tr>
            </table>
        </div>

        <script type="text/javascript" src="http://chat.socket.io/socket.io/socket.io.js"></script>
        <script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
        <script src="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>

        <script>
            var serverURL = 'localhost:50000';

            var name = 'jin';
            var room = '100';

            $(document).ready(function() {
                var socket = io.connect(serverURL);

                socket.on('connection', function(data) {
                    if(data.type == 'connected') {
                        socket.emit('connection', {
                            type : 'join',
                            name : name,
                            room : 100
                        });
                    }
                });

                socket.on('system', function(data) {
                    writeMessage('system', 'system', data.message);
                });

                socket.on('message', function(data) {
                    writeMessage('other', data.name, data.message);
                });

                $('#message-button').click(function() {
                    var msg = $('#message-input').val();

                    socket.emit('user', {
                        name : name,
                        message : msg
                    });

                    writeMessage('me', name, msg);
                });

                function writeMessage(type, name, message) {
                    var html = '<div>{MESSAGE}</div>';

                    var printName = '';
                    if(type == 'me') {
                        printName = name + ' : ';
                    }

                    html = html.replace('{MESSAGE}', printName + message);

                    $(html).appendTo('.j-message');
                }
            });
        </script>
    </body>
</html>

À½¡¦ Á¹¸é¼­ Ŭ¶óÀ̾ðÆ® ¼Ò½º¸¦ ÀÛ¼ºÇϱâ´Â Çߴµ¥, Àß µ¹¾Æ°¡´ÂÁö Å×½ºÆ®´Â ¸øÇØºÃ³×¿ä ¤Ð¤Ð Âü°íÇϽø鼭 ÀÛ¼ºÇϽøé Àߵɰ̴ϴ٠: )

¸ÖƼäÆÃ. ¾î·Á¿ï °Í °°¾ÒÁö¸¸ ÀúÈñ´Â ³Ê¹«³ªµµ ÁÁÀº ¼¼»ó¿¡ »ì°í ÀÖ½À´Ï´Ù.

´ëºÎºÐ ¶óÀ̺귯¸®, ÇÁ·¹ÀÓ¿öÅ© ÇüÅ·Π±¸ÇöµÇ¾î ÀÖ°í, Àß °¡Á®´Ù°¡ »ç¿ëÇÏ¸é µË´Ï´Ù. °ú°Å¿´´Ù¸é À¸~~~ »ý°¢¸¸Çصµ ²ûÂïÇÕ´Ï´Ù.

ÇÏÁö¸¸ ÀúÈñ´Â ÀÌ·¸°Ô Æí¸®ÇÏ°Ô ±¸ÇöµÇ¾îÀÖ´Â °ÍµéÀ» °¡Áö°í ¾öû³­°ÍÀ» ¸¸µé¾î¾ß ÇÕ´Ï´Ù.