JavaScript È°¿ëÆÁ
2016.10.13 / 18:09

Å©·Ò Ǫ½Ã ¾Ë¸² ¹è¿öº¸±â – 3. ¼­ºñ½º ¿öÄ¿(Service Worker) ½ÃÀÛÇϱâ

û´ã°³¹ßÀÚ
Ãßõ ¼ö 325

Å©·Ò Ǫ½Ã ¾Ë¸² ¹è¿öº¸±â – 3. ¼­ºñ½º ¿öÄ¿(Service Worker) ½ÃÀÛÇϱâ

ÀÌ°÷¿¡¼­ ´Ù·ïÁö´Â ³»¿ëÀÇ ¿Ï¼ºº»Àº ´Ù¿î·Îµå ¹ÞÀº Æú´õ ¾Æ·¡ À§Ä¡ÇÑcompleted/step3 Æú´õ¾È¿¡ ÀúÀåµÇ¾î ÀÖ½À´Ï´Ù.

³»¿ë

  • 1.Index.html »ý¼º
  • 2.Service Worker Ãß°¡
  • 3.Service Worker µî·Ï & ¼³Ä¡
  • 4.localhost¿¡¼­ µ¿ÀÛ
  • 5.serviceworker-internals Çغ¸±â
  • 6.Service Worker¿¡ À̺¥Æ® ¸®½º³Ê Ãß°¡
  • 1. Index.html »ý¼º

    appÆú´õ ¾È¿¡ index.htmlÆÄÀÏÀ» »ý¼ºÇÏ°í ¾Æ·¡ Äڵ带 Ãß°¡ÇÕ´Ï´Ù.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <!DOCTYPE html>
    <html>
    <head>
      <title>Push Notification codelab</title>
    </head>
    <body>
      <h1>Push Notification codelab</h1>
      <p>This page must be accessed using HTTPS or via localhost.</p>
      <script src="js/main.js"></script>
    </body>
    </html>

    Å©·Ò ºê¶ó¿ìÀú¸¦ ÀÌ¿ëÇÏ¿© index.htmlÀ» ·ÎÄÿ¡¼­ µ¿ÀÛ½ÃÄÑ º¾´Ï´Ù. URLÀº http://localhost/push-notifications/app/index.html°ú °°Àº Çü½ÄÀ̾î¾ß ÇÕ´Ï´Ù.

    2.Service Worker Ãß°¡

    appÆú´õ ¾È¿¡ sw.jsÆÄÀÏÀ» »ý¼ºÇÕ´Ï´Ù. ¾È¿¡ ³»¿ëÀº ³ªÁß¿¡ Ãß°¡Çϵµ·Ï ÇÏ°Ú½À´Ï´Ù.

    service worker¸¦ »ç¿ë Çغ» ÀûÀÌ ¾ø´Ù°í °ÆÁ¤ÇÏÁö ¾Ê¾Æµµ µË´Ï´Ù. service worker¶õ ¹é±×¶ó¿îµå¿¡¼­ ³×Æ®¿öÅ© ¿äûÀ» ±â´Ù¸®°í ÀÖ´Ù°¡ °¡·Îä°í, Ǫ½Ã ¸Þ½ÃÁö¸¦ ó¸®ÇÏ´Â µîÀÇ ÀÛ¾÷À» ÇÏ´Â worker ½ºÅ©¸³Æ®¸¦ ¸»ÇÕ´Ï´Ù.

    º¸´Ù ´õ ÀÚ¼¼ÇÑ Á¤º¸¸¦ ¿øÇϽŴٸé HTML5 RocksÀÇ Introduction to Service Worker¸¦ ÂüÁ¶ÇϽʽÿÀ.

    3.Service Worker µî·Ï & ¼³Ä¡

    À̹ø¿¡´Â index.html¿¡¼­ »ç¿ëµÇ´Â main.js ÀÚ¹Ù½ºÅ©¸³Æ® ÆÄÀÏÀ» »ý¼ºÇغ¸µµ·Ï ÇÏ°Ú½À´Ï´Ù. ÀÌ °ÍÀº service worker ½ºÅ©¸³Æ®¿¡ Á¢±ÙÇÒ ¼ö ÀÖ°Ô ÇØÁÝ´Ï´Ù. appÆú´õ ¾Æ·¡ jsÆú´õ¸¦ »ý¼ºÇÏ°í ±× ¾È¿¡ main.jsÆÄÀÏÀ» »ý¼ºÇÏ¿© ¾Æ·¡ Äڵ带 ÀÔ·ÂÇÕ´Ï´Ù.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    if ('serviceWorker' in navigator) {
     console.log('Service Worker is supported');
     navigator.serviceWorker.register('sw.js').then(function(reg) {
       console.log(':^)', reg);
       // TODO
     }).catch(function(err) {
       console.log(':^(', err);
     });
    }

    ÀÌ ÄÚµå´Â »ç¿ëÀÚÀÇ ºê¶ó¿ìÀú°¡ service worker¸¦ Áö¿øÇÏ´ÂÁö¸¦ È®ÀÎÇÏ°í sw.js¿¡¼­ ¸¸µé¾îÁø service worker¸¦ µî·ÏÇÏ°í ¼³Ä¡ÇÕ´Ï´Ù.
    — ÇÏÁö¸¸ ¾ÆÁ÷±îÁö´Â ¾Æ¹«°Íµµ ÀÛµ¿ÇÏÁö ¾Ê½À´Ï´Ù.

    4.localhost¿¡¼­ µ¿ÀÛ

    index.htmlÀ» localhost¿¡¼­ ½ÇÇàÇÏ°í Å©·Ò °³¹ßÀÚ ÅøÀ» ÀÌ¿ëÇÏ¿© È®ÀÎÇÏ¸é ¾Æ·¡ ±×¸²°ú °°ÀÌ ³ªÅ¸³³´Ï´Ù.
    localhost_try

    5.serviceworker-internals Çغ¸±â

    service workerµéÀÌ Àß µ¿ÀÛÇÏ°í ÀÖ´ÂÁö È®ÀÎ Çϱâ À§ÇØ Å©·Ò ºê¶ó¿ìÀúURL¿¡ chrome://serviceworker-internals¸¦ ÀÔ·ÂÇÏ¿© Áø´Ü ÆäÀÌÁö¸¦ ¿±´Ï´Ù.
    serviceworker_internal

    6.Service Worker¿¡ À̺¥Æ® ¸®½º³Ê Ãß°¡

    ¾Æ·¡ Äڵ带 sw.js¿¡ Ãß°¡Çϼ¼¿ä.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    console.log('Started', self);
    self.addEventListener('install', function(event) {
      self.skipWaiting();
      console.log('Installed', event);
    });
    self.addEventListener('activate', function(event) {
      console.log('Activated', event);
    });
    self.addEventListener('push', function(event) {
      console.log('Push message received', event);
      // TODO
    });

    service worker¿¡¼­ self´Â ServiceWorkerGlobalScope ¿ÀºêÁ§Æ® servicer worker ÀÚ½ÅÀ» ¶æÇÕ´Ï´Ù.

    À¯¿ëÇÑ ÆÁ!
    ±âº»¼³Á¤À¸·Î ÀÌÀü¿¡ ½ÇÇàµÈ service workerµéÀº ´Ý±â Àü±îÁö °è¼Ó ½ÇÇàµË´Ï´Ù. µû¶ó¼­ »õ·Î »ý¼ºµÈ service worker´Â ´ë±â »óÅ°¡ µË´Ï´Ù.
    ÇÏÁö¸¸ skipWaiting() ÇÔ¼ö°¡ ºÒ·¯Áö°Ô µÇ¸é(À§ÀÇ Äڵ忡 ÀÖ´Â ÇÔ¼ö) ´ë±â»óŸ¦ °Ç³Ê¶Ù°í ¹Ù·Î È°¼ºÈ­µË´Ï´Ù.

    ÀÌ´Â µð¹ö±ë Çϱ⿡ Æí¸®ÇÕ´Ï´Ù.

    chrome://serviceworker-internals ÆäÀÌÁö¿¡¼­ inspect ¹öÆ°À» Ŭ¸¯ÇÏ¸é ´ÙÀ½°ú °°Àº È­¸éÀÌ ³ªÅ¸³³´Ï´Ù.
    inspect

    ÁÖÀÇ»çÇ×: service worker Äڵ带 ÆĽÌÇϴµ¥ ¿¡·¯°¡ ¹ß»ýÇÑ´Ù¸é service worker´Â ¼³Ä¡µÇÁö ¾Ê°í ¿¡·¯¸¦ ´øÁö°Ô µË´Ï´Ù.
    ÀÌ·¸°Ô?À»¶§ service worker°¡ ¾÷µ¥ÀÌÆ® µÇÁö ¾Ê´Â ÈñÇÑÇÑ °æ¿ì°¡ ¹ß»ýÇÒ ¼ö°¡ ÀÖÀ¸¹Ç·Î Äڵ庯°æ½Ã Ç×»ó È®ÀÎÀ» ÇÏ¼Å¾ß ÇÕ´Ï´Ù.

    ÀÌÀü ´Ü°è ¹Ù·Î°¡±â
    ´ÙÀ½ ´Ü°è ¹Ù·Î°¡±â