Upgrade to PRO for Only $50/Yearโ€”Limited-Time Offer! ๐Ÿ”ฅ

[PyCon KR] Designing a Python-based Data Analys...

[PyCon KR] Designing a Python-based Data Analysis / Online Coding Platform for Researchers andย Educators

Avatar for Joongi Kim

Joongi Kim

August 29, 2015
Tweet

More Decks by Joongi Kim

Other Decks in Programming

Transcript

  1. ํŽพ๋ฌบํ•ž ์ง ๋ฌžํ“ฏํ•ž์Š ํ“’๎Œช ๋ช’์นพ ์ง ์ญ’์ปซ ๎‹š์•น๎‡Š ์ปฒ๋ช’ ํ‚ฎํ—ฃ๋ฎช

    / ๋ฐŽํ›Ž๋ฏพ (+ ์งฃํ™“๎’) ์•ทํ”’ ํŽ“ lablup.com ๎ƒšํ•‚ํ„บ, ์‚ฒ๋งงํ•‚, ์ปฟ๋ซƒํ—.
  2. ํŽพ๋ฌบํ•ž ์ง ๋ฌžํ“ฏํ•ž์Š ํ“’๎Œช ๋ช’์นพ ์ง ์ญ’์ปซ ๎‹š์•น๎‡Š ์ปฒ๋ช’ ํ‚ฎํ—ฃ๋ฎช

    / ๋ฐŽํ›Ž๋ฏพ (+ ์งฃํ™“๎’) ์•ทํ”’ ํŽ“ lablup.com ๎ƒšํ•‚ํ„บ, ์‚ฒ๋งงํ•‚, ์ปฟ๋ซƒํ—. ์บ‹ํž–๋ฏพ
  3. ์งช๎ˆชํ•ž โ–ช ํ‚ฎํ—ฃ๋ฎช โ–ช ์ซƒํ•ฏ๋ช’ ํ•‚์˜ฎ ์คŠ์บ๎Œงํ•ž โ–ช ๋ช’์คŠ์บ๎Œง /

    ๋พš๋ซŠ๎Œง โ–ช ํฒ๎‚†์ฏš ๋งช์งช โ–ช ํฒ๎‹–์ฝšํฒ ์ฏข์˜ช๋ฏ† ์ฝš๎‹’๎‚†ํ’ถํŽ‚ / ์ปช์ฐ’ํฒ โ–ช TNF/ Needlworks โ–ช ๋ฏพ ์Šฟ์Šฟโ€ฆ โ–ช ๋ฐŽํ›Ž๋ฏพ โ–ช ๎Šถ ๋ซƒ๎Œง โ–ช ํ‚ชํฒ ์ปฒ๋ช’ โ–ช NBA ๋งช์งช โ–ช ์ฝš๎‹’๎‚†ํ’ถํŽ‚ ๋ฏพ์งฆ 80 Gbps ์•Šํ‘พ โ–ช ํฒ๎‚†์ฏš ๋งช์งช โ–ช ๋ฏพ ์Šฟ์Šฟโ€ฆ http://www.lablup.comํŽž ๋งŽ์ก‚ ํ™Ž ์„ข ํ•–ํ‚ƒ์‚–์‚ฒ.
  4. ๎’์ƒŽ ๋ซŠ๎Œง ํŽพ๋ฌบ โ–ช ๋ฏพ์ฟฎํ”Ž 21์ผ†๋ฏพ, ํ‚ชํฒํ”Ž 20์ผ†๋ฏพ, ๎Œง๋ช’์ข 19์ผ†๋ฏพ

    โ–ช ํ•†๋ง’ํ•‚ ๋ซŽํŽบ๎Œฆ์ข ์ญ’ํŠํ”ฆ ์งชํ—’ ์ฝ›์†’๋งŽ ๋ฏ†์—•ํžŽ ํŒ˜ํ”Ž ์ญ’ํŠํ”ฆ ์งชํ—’ ์ฝ›์†’์Š ์‹พ์•Š๋งŽํžŽ ์ข‰๎Œฆ์ข ๎’์บ โ–ช ๎Œง๋ช’ํŽ ํŽ“๋ช’, ์นบ๎‘šํ”ฆ ๋ง’๋ฏ‡
  5. โ–ช ํŽพ๋ฌบ์žžํƒ†์ง† ์Šฃ๋ฎํŽž ์‚บํŒ’ ์Šช์˜ช ์ปช์‚ ์นบ์žฉ์”ฎ ํŒ’์‚–๎Œฎํƒข ํ•‚์–พ ํ˜Š์˜ช

    ํŽ‚์พ ๎Œง์†’๋งŽ ์‚–์‚๋ชฎํ˜† ๎Ž์ฑŠํ•‚์ผข์†’ ์ž–๋บ‚ ํ—ช ์“ถ์Šฒ ํ‚ช์–บ๎†‚์‹ข ์ข‰๎Œฎ ๋ฝ†์ง† ๎Œฆ์‚–์•Š. โ–ช ๋บ‚ ํ•‚์•’ ํ“’๎ŒฆํŠ ํŽ‚ํ์ฐ’ ๋ป–๋ฉถ ์บ–์˜ช ํŽพ๋ฌบ ์Šช ๋นฆ๋ฟ’์ง†ํŽ ๋ซŠ๎Œง ๋ซƒ๎Œง ๋ฝ†์บ์Š ์Ÿ‡๋งŽ๋ฝ†์‚– ์นบ์•š์ž–์‚ฒ ๎”บํŽบ ์ฟฆ์ฐ’์‚–๋ฉถ ๋นฎ์˜ช ํˆฒ์ ข ์ณš๎Œช ๎Œฆ๋ชฎํ˜† ๎Œฎ์‹พ์•Š์ง†์‚–์•Š.
  6. ์žš์Šฒ ๋ฉ‘ โ–ช ์บš์Šช์งฃํฒ ๋ฏพ์งฆํ”ฆ ๎‹’์˜ช๋ฏ†์•ฆ์ง› ์Šช ํ‚ฒ๎— ์ปช์ฐ’ํฒ โ–ช

    ์•Šํ‘พ์Šช ๋ฏพ์งฆ ํ“ฎํ—Ž ํ•†๎…ฆํ•‚ํฒ โ–ช ์ฝšํ“ฎํ•ž / ๋ฏ†์›‡ / ์ฅฒ์‚–๎‚พ / ๋ฝ†๎‚† ๋ฏพ์งฆ โ–ช ๋ซƒํ“ฎ ํ‚ชํฒ โ–ช ์ปช์ฐ’ํฒ์Š ์นบํ‘ท๎Œฆ๋ฏพ ํ“’๎Œช ํ“‡ / ํŒฟ
  7. ๋ฏพ์ฟฎํ— ์†’ํ—’์Šฒ โ–ช ์บš์Šช์งฃํ‚ฟ โ–ช ์บ ์ซ‚๋ซŽ โ–ช ์บ์ฝšํฒ ์ซ‚ํ™‚

    โ–ช resource consolidation โ–ช ์„พํ•‚ ๋ฌž๎ฆ โ–ช ํŽ“์˜ช์Šช ์ง ์‚ฒํ’‚์˜ช์Šช
  8. Python! โ–ช ํ•ณํ—ž โ–ช ๋ง’๋ฉพ์ปฟ : ํ€บํ’‚ ์Šช ํฒํ•Š ํ“ฎํžŽ

    โ–ช PEP-8 โ–ช ๋งŽ์†“์ปฟ : ํ‚บํ•ž๋งŽ ์‚ฒ์† ์นบ์•š ์Šช ํ•‹๋ฏพ ํ€บํ’Ž โ–ช ๎Œฆ๋นฆํ”ฆ ๋ฏพ์ณํŽž ์ƒŽ๎Œช ๎Œฆ๋นฆํ”ฆ ๋ฌบ๎’ โ–ช ์งท์ƒŽ๎Œช ๎ˆชํ›Ž์•Šํ•‚์ฏš์–บ์บ
  9. Python T_T โ–ช ์‚ถํ—ž โ–ช ์ž์พ ์ปฟ์ณ โ–ช PyPy /

    Pyston ๎‹’์˜ชํ—ซ๎‚† โ–ช ๎’ํ•บ: โ–ช C์˜ช ํ•Ÿ์ปฟ์‡ช ๋ช’์นพ ์•Šํ•‚์ฏš์–บ์บ โ–ช Cython ํ•‚ํ‘ท โ–ช ์‚ฒ์† ํކํŽ‚์˜ช ํ•Ÿ์ปฟ์‡ช ์•Šํ•‚์ฏš์–บ์บ ์งขํ•†์‹ท
  10. Pythonํ”ฆ ๋ซŠ๎Œง/๋ซƒ๎Œง ๋ฌžํ“ฏ ํ”Ÿํ‘ท โ–ช ์นบ์˜Ž โ–ช ์žœํ”Ž ์ƒŽ๎ŒงํŽž์ปช CS101

    ๋ฏพ ๎‹’์˜ช๋ฏ†์•ฆ์ง› ์ฟฆํŽ“ํŽž ๎ชํ‘ท ํ›Ÿ โ–ช โ€œํ•†์ค†๎Œงํ—ํ•† ํކํŽ‚โ€ โ–ช ํ•†๎‹’์บ ํކํŽ‚ โ–ช ์คŠ์˜ฎ ๎†บ๎‚†์•Ž ํ•‚๎’’ํŽž indent์˜ช ์ฏข์˜ซ ์žš์Šช์ข ํކํŽ‚๋งŽ ์ž ๋นฆํบ ํ›’ํ”Ž ์กพ์•žํ‚ƒ์‚–์‚ฒ์žšโ€ฆ โ–ช ๋ฏพํ™‚ ํކํŽ‚์Šฒ๋ซŠํ”ฆ ํ“ฎ์นบ์ปฟ โ–ช MATLAB ์งพํ’ฎํ”Š์ก‚ numpy๋งŽ ํŽ‚ํžŽ ํ•ƒ์ฟง๎Œถ
  11. ๋งชํ•†ํ— ๋ช‹๎Žฆ์Šฒ : ํ‚ฎํ—ฃ๋ฎช โ–ช ๋ซŠ๎Œง ํŽพ๋ฌบํŽž์ปชํ”ฆ ์‚ฒํŸ๎Œช ๎ชํ‘ท โ–ช

    MATLABํ”Ž ์ฐ’ํƒ†์‚ฒ: matplotlib, ipython notebook โ–ช Ultra-complex figures โ–ช ํ‚ช์ฅบ์—–ํ•‚์ผฆ ์–พํ•’์ซ‚์‚ฒ ์Šช ํ•Ÿ์ปฟ ํ‚ช๋ง’ํ•‚ ํ›Ÿํ‘ข๎Œฎ ์Œš โ–ช ๋ง’์‚ถ๎Œช ์ Ž๎‚พ๎‹’์˜ช์ผ†ํฒ ํžŽํ’ž โ–ช ์„พํ•‚ ์ญ’์ปซ โ–ช ํކํŽ‚ ํ•‚ํ‚ซ์ปฟ / ๎†๎ฆ์ปฟ
  12. ๋งชํ•†ํ— ๋ช‹๎Žฆ์Šฒ : ๋ฐŽํ›Ž๋ฏพ โ–ช ๋ซƒ๎Œง ํŽพ๋ฌบํŽž์ปชํ”ฆ ๎ชํ‘ท โ–ช NBA

    ๎ƒถ ์บ ๎‹’์—–ํ•’ํ’š โ–ช ์บ‹ํž–ํ”’ ํ•ž์†ง๎ข๎Œฆ๋ฏพํŽž ์žฒํ‘พ ํ“ฎ์บ โ–ช ๎Œฆ์Šชํ’ถํŽ‚ configurationํ”’ Python ํฒ์ž‹๎‚†์˜ช ํ•Ÿ์ปฟ โ–ช ํ‚ฒ๎Žฆ ํฒ์ž‹๎‚†ํŽž์ปช ๋ปฒ๎‚†ํ’š ์ฝš I/OํŽ ์ ขํ•† ๎‹’์˜ช๋ฏ†์•ถํ”ฆ stdoutํ”’ ์†งํ‚ช ์กถ์‚–์ž๎Œฆ๋ฏพ ํ“’๎‚ asyncio ๋ฏพ์งฆํ”Š์˜ช ํ‚ฒ๎Žฆ ํฒ์ž‹๎‚† ํ•Ÿ์ปฟ
  13. It's time to go Python 3 โ–ช Python 3์Š ํžŽํ’ž๎Œฆ์ข

    ์•Šํ•‚์ฏš์–บ์บ ํซ๋งŽ โ–ช Django, numpy/scipy, โ€ฆ โ–ช Python 3.3 ํ•‚๎’’ ์ค†ํ•žํ‚ ์ ข์กถ์บ ์นบํ‘ท์–— ๋งž์ฝš โ–ช PEP-393: str ๋งซํŽž์ปช ์ค†ํ•ž ์ƒ‡ ์งขํ•‚๎‚† ์ฟฆ์Š ๋ฏ† ์ค†ํ•žํ‚ํ”ฆ ์ค†ํ•ž ํ›Ÿ ๋งŽํ•ณ ๋ฝ ํ”Ž unicode codepoint ์ฟนํ•ž์˜ช ๋ฉพํ—ฃ โ–ช ๋ฏพํ™‚ narrow build์ข UTF-16, wide build์ข UTF-32 ๋ชฎํ—ฃ โ–ช ํ•‚ํ—ช ํ•ž์†งํ”Š์˜ช ์ค†ํ•žํ‚ ๋งซ์ช’ UTF-8/16/32 ์‚ฒ์‚๋ฉš ์นบํ‘ท โ–ช ASCII/Latin-1 ํํŽป์žš ์‚ฒ์šถ์ข ๋ช‹ํ‘พ ์žฒํ‘พ ํ“ฎ์บ โ–ช ํ“ฎํ—’ํ•ž ์ปชํ‚ ์ญ’์ปซ / ํ์ค†ยท์˜ช๋ฏ† ์ฐ“์„พํ•‚ ์ญ’์ปซ
  14. It's time to go Python 3 โ–ช Python 3.4 ํ•‚๎’’

    ์ซ‚์‚ฒ ๋งช์ปฎ์‡ช ์ฐ’์†ง๋ฏพ ๎‹’์˜ช๋ฏ†์•ฆ์ง› ์กถ์…† โ–ช PEP-3156: asyncio ์•Šํ•‚์ฏš์–บ์บํŽ coroutine โ–ช ์‚ถํ•Š ํŠพ์—–์ŠชํŽž์ปชํ”ฆ ์‚ฒํ›Ÿ I/O ํ•‚์ฉฒ๎‚† ์กถ์‚–์ž โ–ช GIL (global interpreter lock) ๎ฆ๋ช‹ํŽž์ปช ์‚ถํ•Š ํŠพ์—–์Šช ๎‘ถํ“ถ์ปฟํ”’ ๋ฝ ํ•‚์ข ์ฟฆ์‚ถํ”Š์˜ช ํ“ฎํ‘ท โ–ช ์ญ’์นพํ‚ชํฒ ๋งช์งชํŽž ๎††์บ โ–ช pipํŽ virtualenv ๋ฏพ์ซ† ๎†บ๎Œถ โ–ช ์งพ๎†บ๎ฆ๋ช‹ ํ•บ๎’ํ•‚ ํ‘ทํ•‚๎Œถ
  15. ์ญ’์นพ ์ฅฒ์‚–ํ•‚์ผฆ โ–ช RabbitMQ, Kafka, Celery, ... โ–ช ๎‚‡ํ—ฃ๎Œช ๎ฃํ”ฆ

    ํ‚ฎ ๎ƒถ์žš ํžŽํ’ž๎Œฆ๋จพ๋นฆ ํ‘พ์บ๋งŽ ํŠพ์—ฒ์ข ํ‘ท์†’ํŽž ์ฐ’๎‚ ๋ป–์ค‚ ์ซƒํ•ฏ โ–ช ์ช’์†’ํ”ฆ ํ›Ÿ๋ช’ ๎‹’์˜ช์ผ†ํฒ(broker)์Š ์žš์ŠฒํŽ‚ํŠ ๎Œช์‚ฒ๋จพ๋นฆ, โ–ช ์ซ‚ํ˜พํŽป๎Œฎํ”’ ๎Œฎ redis ์ปช์ฉ’๋งŽ ๎Œ’ํ‘ข๎Œฆ์‚ฒ๋จพ๋นฆโ€ฆ
  16. ์ญ’์นพ ์ฅฒ์‚–ํ•‚์ผฆ โ€“ ZeroMQ โ–ช ์ญ’์นพ์บํŽž ํ•žํ›Š ์นบํ‘ท์‡ฆ์ข ๋ชฎ์ฟฆํ›Ž ํ‚ฎ

    ๎ƒถ์Šฒํ”’ ์ฝš ๎ฃ์˜ช ๋งžํƒ† ํ—ช๋ซƒ โ–ช Request-Reply โ–ช ํŸ์งท๎ณ ์ ขํ‚ชํžŽ 1๎‘šํ‹ท ํ›Š๋ชฎ์งฉ๋ฏพ (์นบํ‘ท ํ– : HTTP-like server/client) โ–ช Push-Pull โ–ช ์‚ถ์งท๎ณ N-to-1 ์ ขํ‚ชํžŽ ์งŽํŽ‚๋ปฑ๋ฏพ (์นบํ‘ท ํ– : logging system, task partitioning) โ–ช Publish-Subscribe โ–ช ์‚ถ์งท๎ณ 1-to-N / N-to-M ์ ขํ‚ชํžŽ ์งŽํŽ‚๋ปฑ๋ฏพ (์นบํ‘ท ํ– : broadcast)
  17. ์ญ’์นพ ์ฅฒ์‚–ํ•‚์ผฆ โ€“ ZeroMQ โ–ช ํ•ณํ—ž : ๋ง’์‚ถ๎Œช ์ปฒํ—ฃ๋ซŠ ๋ฝ ํ”Ž

    ์ปฟ์ณ โ–ช zero broker, zero latency, zero administration, ... โ–ช ํ•ณํ—ž : ์‚ฒํŸ๎Œช connection ์งทํ‚ซ ํžŽํ’ž โ–ช TCP / UDP / UNIX domain / local "in-process" โ–ช ํ•žํ—ํ•† zeromq transport header (ZMTP) โ–ช payload ํŒฌ์ญŽ์ญ’ํŽž ์ญงํŽ‚์ปช ๋นฎํŒ’๋งž (64+ ์งขํ•‚๎‚†) โ–ช ์‚ถํ—ž : persistent queue ํ—ช๋ซƒ๎ŒฆํžŽ ํŒ˜ํ”š โ–ช TCPํŽ ์†ง์Šฟ๎Œช ์ฟฆํ›Žํ”ฆ reliability์žš ํ—ช๋ซƒ
  18. ์ญ’์นพ ์ฅฒ์‚–ํ•‚์ผฆ โ€“ LogStash โ–ช LogStash โ–ช input / filter

    / output ๋จพ์ข ๋ง’์‚ถ๎Œช ๋ฌบํ˜พํ”ฆ ์˜ช๋ฐ“ ํ‚ชํฒ โ–ช ZeroMQ, S3์•Ÿ ๋งงํ•‚ ์นบํ‘ท ๋งŽ์ณ โ–ช (ํžํ—Ÿ ์žš์ŠฒํŽ‚์†’ ์‡ฆ์ข์„พ ๋ฏ†์•ฆ์†’ ํ•–์ข ๋จพ ํŠพํ•ž!) Django User Kernel Logstash Server Database ZeroMQ (push-pull) + JSON AWS S3 msgpack
  19. On-premise vs. Hosting vs. Cloud โ–ช ์ปฎํ”ฆ ํŽบํžŽ๋งŽ ํŽ”ํ”š โ–ช

    "์บŠ"์นบ... โ–ช ๋ฌบ๋ฏŽ, ํŒ’์ž–ํ™‚, ์ž–ํ•‚์˜ช์ฝš๎‹’๎‚† โ–ช AWS โ–ช ์ปฎ์˜Ž๋งŽ ์žœํ”š โ–ช ํ—Ž๎”บ์ข ๎•ฆ์Šฎ ๋ฉš ํ‚นํŽ‚ํ‘ข โ–ช ๎ŒฆํžŽ์žš ์ž–์ฝš์ข ํ“–์†’ํ‘พํŽž๋ฉš ์‹พ์”‰๎Œฆ๋ฉฎํžŽโ€ฆ โ–ช 2012 R2 ๎Œช ์ƒŽ ์†š์—ฒ์ปช ํ”Ž๎— / ํ—ฃ์ญŽ ์ปช์œฆ / ํŒฏ๎‚พ์ฏšํŽŸํฒ ํ—’ํ‘ทํ”Š์˜ช ํ‹์‚–์‚ฒ.
  20. Docker containers โ–ช ์กถ์Šฎ ์ปช์ฐ’ํฒ์ข docker container ํ“’ํŽž์ปช โ–ช ์ปช์ฐ’ํฒ์Šฒํ”’

    ํ‹๋ฉš ํ•บ์นบํ‘ท โ–ช VM์ซ‚์‚ฒ ์ฐฎ์† ํ‚ช๋ง’ ํŒ–ํŽž deploy/destroy ๋งŽ์ณ โ–ช AWS EC2 Instance: ํŽบํ—’๎•– ํฒ์•ฆ ๋ฉ†์žŠ (์ญ’ ์‚ถํ“’) โ–ช ํ•‚๋ป–์Š ํ•‚ํ‘ท๎Œช pooling โ–ช Amazon ECS? โ–ช container ์”’ํ‘พ์ข(run task) latency๋งŽ ํžตํžŽ ํŒ˜ํ”š โ–ช ๋ฉพ๋ฌป ํ•‚๋ฉ‘์†’ ํ•žํ—ํ”Š์˜ชโ€ฆ
  21. Docker containers โ–ช ์†’ํ—’๋ซŠํ—ช โ–ช ์ฐ’ํ‘ท : ์ƒŽ๋ฏพ ์บํ”ฆ ๋งŽํ‘ท

    instance ํ“ฎํžŽ ์ฐ’ํ‘ท ์ฝš๎ข โ–ช Microsoftํ”ฆ docker ํžŽํ’ž โ–ช ๎ณ๎’’ Azure ์ง Windows ๎ฆ๋ช‹ํŽž์ปช ์นบํ‘ท ๋ฏพ์ƒŽ
  22. Polymer library โ–ช HTML5 ๋ฏพ์งฆํ”ฆ ๎†บ๋ปš๎‚† ๋ฏพ์งฆ ์•Šํ•‚์ฏš์–บ์บ โ–ช HTML

    imports / Custom elements / Shadow DOM โ–ช Web components ๋ฏพ์งฆ โ–ช โ€œPolyfillโ€ โ–ช ํ•บ์นบํ‘ท ๋งŽ์ณ๎Œช ๎†บ๋ปš๎‚† ๋งช์งช ๋งŽ์ณ โ–ช DOMelements
  23. Polymer library โ–ช ๎ŒŠํŒ’๋ฝ† ํŽพํ›Šํ•ž์Šฒํ”Ž ์‹ขํ•žํ•†ํŽž์ข ์†’ํ’Žํ•‚ ํŒ– ์‡ช์‚ฒ... โ–ช

    ๋ฌบ๋ฏŽ ์„ฃ ํ™Ž ์ซ‚ํ•ž! โ–ช Bootstrap + theme? โ–ช ํžŽ๋ช‡์‚ฒ โ–ช HTML5 ํ‚ช์ƒŽ๋งŽ ํบ ์„พ ํ‘พ์บ ๎Œช ์ฉ– ์บ– ์ผ†์บํŽž์ปช ํ•ŸํŽ“๎‚์ซ‚ํ•ž!
  24. Electron: Cross-platform Polymer โ–ช ๎‚๋ฉพ : cross-platform webapp container โ–ช

    Electron โ–ช GithubํŽž์ปช ๋งช์งช๎Œช Node.js ๋ฏพ์งฆํ”ฆ ํ“‡ ํŒฟ ๎‹’์—–ํ•’ํ’› โ–ช Node ํŒฟ ์ž์ข ํ“‡ ํŒฟํ”’ Chromium ์–พํ•’ํ”Š์˜ช wrapping โ–ช ํ“–์†’ํ‘พ / ์žณ / ์บ๋ฟ“ํฒ ํžŽํ’ž โ–ช ATOM ํŽž์‹ขํ”ฆ ๋ฏพ์งฆ โ–ช ํŒฟํ”Žํ‘ข? โ–ช Apache Cordova
  25. ํ•ž์†ง๎ข ์บ โ–ช ๎ƒšํ•‚ํ„บํ”Ž ํ™™ํ”Ž ํ•ž์†ง๎ข ์†’๋ฌบํ•“์‚–์‚ฒ โ–ช ์ซ•์ซ•์ซ• โ–ช

    ํ“ฎ์‚ฉ ํฒ๎‚† โ–ช Django UnitTest ๋ฏพ์ณ + Selenium โ–ช Selenium webdriver: ์ฏš์•Šํ‘พํ—Ž ์†งํ•Ÿ ํŽž์ฅบ์—–ํ•‚์ผฆ โ–ช ๋ฐ‘๎Žง ์ง™ ํ‚ช ๎†บํฒ๎‚† ๎’“ํŽž ๋ฉ†๋ชฎ ํ•ž์†งํ”Š์˜ช ํฒ๎‚† ๎’’ ์ค†ํ—ช๋งŽ ์บซ๋ฏพ์ก‚ ํ•‚ํ– ์ƒก๋ฏŽ์˜ช ํžŽํ—
  26. ํ•ž์†ง๎ข ์บ โ–ช ์žฒ์‚ํŽŠ ํ•ž์†ง ์บซ์ปฟ โ–ช ์ค‚ํถ ์ฟฆ์Š ํ„ถ์†’

    ์Šช ์ซƒํ•ฏ์†’์ข ํบ์•Š๋งŽ๋ฉš ์‡ฆํŽ‚ ํ•–์‚ฒ โ–ช sphinx โ–ช reST ๋ฏพ์งฆํ”ฆ ํ•ž์†ง ์ค†์ปช ์บซ์ปฟ ๎‹’์˜ช๋ฏ†์•ถ โ–ช ์ŠชํŽž ์‚บ์พ ํ›Š์ปซํ”’ ๋ฏพ์งฆํ”Š์˜ช ์ฝšํฒ ์žฒ์‚ํŽŠ ์บซ์ปฟ โ–ช ํ•ž์†ง๎ข ์บ์ข ํ›Šํ—ช โ–ช ํฒ์ฆํ”ฆ ํ›Šํ—ช์ข ํŒ’์‚–์ฆŽ์˜ช ํŽบ๋ฏพ๋ฐšํžŽ์žš! โ–ช ์งฃํ™“๎’์‚ฆํ•‚ ๎Œฎ ์žžํ•‚ ํŽ”ํŽ‚ํž’ ํ•‚ํ“ฎ
  27. ํ•ž์†ง๎ข ์บ โ–ช ์žฒ์‚ํŽŠ ํ•ž์†ง ์บซ์ปฟ โ–ช ์ค‚ํถ ์ฟฆ์Š ํ„ถ์†’

    ์Šช ์ซƒํ•ฏ์†’์ข ํบ์•Š๋งŽ๋ฉš ์‡ฆํŽ‚ ํ•–์‚ฒ โ–ช sphinx โ–ช reST ๋ฏพ์งฆํ”ฆ ํ•ž์†ง ์ค†์ปช ์บซ์ปฟ ๎‹’์˜ช๋ฏ†์•ถ โ–ช ์ŠชํŽž ์‚บ์พ ํ›Š์ปซํ”’ ๋ฏพ์งฆํ”Š์˜ช ์ฝšํฒ ์žฒ์‚ํŽŠ ์บซ์ปฟ โ–ช ํ•ž์†ง๎ข ์บ์ข ํ›Šํ—ช โ–ช ํฒ์ฆํ”ฆ ํ›Šํ—ช์ข ํŒ’์‚–์ฆŽ์˜ช ํŽบ๋ฏพ๋ฐšํžŽ์žš! โ–ช ์งฃํ™“๎’์‚ฆํ•‚ ๎Œฎ ์žžํ•‚ ํŽ”ํŽ‚ํž’ ํ•‚ํ“ฎ
  28. ํ‘พ์ปฎ ํ•ฏํ•Š ์ƒŽํ‚ฎ๎Œฎ ๋ฐ‘๎Žง ์ซ•ํ•‚์•Ÿ ํบ์•ง์ซ•ํ”’ ๎Œช ๋ปฒ ์ž–์บ ์žš์Šฒ๋ชฎ,

    ํ•Š์——๎‚†์˜ฎํ•‚์•Ÿ ๎‡‚์บ์ † ๎ƒšํ•Š ํฒ์ž‹๎‚†์Š ์žš์Šฎ ์‚ฒํ”š, ์ผŽ์—–์‚–ํ’Ž + ๋ฐ‘๎Žงํ”Š์˜ช ํ“ฎ์‚ฉ ํฒ๎‚† ํ•ž์†ง๎ข์Š ์žš์Šฎ ๎’’,
  29. ์กท๎ˆช ์ชŽ๋ช‹ โ–ช ํŽพ๋ฌบํ‘ท ์Šช ํ‚ฒ๎— + ๋ซƒํ“ฎ ๎‹š์•น๎‡Š์ญŽ ์žš์Šฒ์—ฒ๋ชฎ

    ๎–์ข์„พ ๋ฌžํ“ฏํ‘ท ๎‹š์•น๎‡Šํ”’ ์ Šํ—Ž ๋งช์งช๎Œฆ๋ฉš ์‡ฆํŽ–์‚ฒ. โ–ช ํŽพ๋ฌบํ‘ท ๎‹š์•น๎‡Š : โ–ช ๎‚‡ํžฃ โ€“ ๋ฎช์กถ๋งŽ ์Šช์Š ํฒ์•ฆ ์†š์พ์‚ฒ โ–ช ์บš์Šช์งฃํฒ ์ฟฆ์ก“ ๋ซŽ์บ, ์ซ‚ํŒ–, ์‚ถํ•Š ์Šช์Š ํ“’๎Œช scaling, ... โžž ๋งช์งชํ‚ช๋ง’ ++ โ–ช ๋ฌžํ“ฏํ‘ท ๎‹š์•น๎‡Š : โ–ช ๎‚‡ํžฃ โ€“ ๋ฎช์กถ๋งŽ ํ•Ÿํ”Ž ์Šช์Š ํŽบ์–บ ๋งช ์†งํ‚ชํŽž ์žœํ•‚ ์†š์พ์‚ฒ โ–ช ์บš์Šช์งฃํฒ์Š ์ž— ํ›‹ํŽบ์†’ ์‡ช์‚ฒ ๋ง ์บš์Šช์งฃํฒํŽž ํ•žํ’žํ”’ ํ—๋ฉš ๎Œฎ์ƒ‡๎‚์†’ ์‡ช์‚ฒ
  30. ์กท๎ˆช ์ชŽ๋ช‹ โ–ช ํ•‚ํ—žํ”’ ์งฆํ๎ŒฆํŽบ ํ“ฎ์บ๎Œช ๋ฉ‘์ญŽ ์žš์Šฒํ•ž. โ–ช ๋ฌžํ“ฏํ‘ท

    ๎‹š์•น๎‡Š์ญŽ! โ–ช ์ปฒ์ก“๎‚์†’ ์คฆ ์žš์Šฒ์—ฒ์ขํžŽ ์กถ์‚์ข ์นบ์•šํ•‚ ์žœํŒฆํŽ‚ํ‘ข โ–ช ํŽพ๋ฌบํ‘ท ๎‹š์•น๎‡Šํ”’ ํ‹† ์นบ์•š์Šฒ์ญŽ ํ’šํŠ
  31. ๎‹’์˜ฎ๎‚†ํŽข์Šช์ญŽ ์งฟํŽข์Šช์˜ช โ–ช React / Flux / AngularJS / Polymer

    / ... โ–ช ํ•ž์งขํฒ์ž‹๎‚†+UI ๎‹’์—–ํ•’ํ’šํ”ฆ ํ—’๋ฌปํ‚ช์ƒŽ โ–ช Polymer ํ„ถ์ซฒ์ข์„พ 0.9ํŽž์ปช API ์‚ฒ ๋ง–ํŒ’ํŽœํ”š.... โ–ช ๋ฉพ๋ฌป ํŽป์นบํŽ ํ—’(?)ํ”ฆ Bootstrapํ”Š์˜ช ์ซƒ๋ฎŽโ€ฆ โ–ช ๎–์‚ฒ๋งŽ ๋ฌบ๋ฏŽ I/O 2015ํŽž์ปช Polymer 1.0ํ•‚ ๋นฆํŽ์ปช ์‚ฒํ‚ช ์†šํŒ’๋งข์ข์„พ...
  32. Polymer: it is too google to be true โ–ช ๋ฐ†ํžŽ

    ํŒ˜ํ”Ž ๋งช์งช ๋ฏพ๋ง’ ์†งํŒ– โ–ช 0.5 - 0.8rc2 - 0.9 - โ€ฆ โ–ช ๋ง ์ฉ’ํ—’ํ”ฆ ์ž–ํ•‚๋ฏ†์—–ํ•‚์ผฆ ์ค†ํ—ช์˜ช ์ˆž ์ฉ– ์นบํ‘ทํ”’ ๎†บ๋ฏพ โ–ช ํ•ž์†ง ์ž–ํ•‚๋ฏ†์—–ํ•‚์ผฆ ๎€‚ ํžŽํ’ž (ํ•ฆ ํŒ– ์‡ถ) โ–ช Google I/O - 1.0 : ๎Œช ์ฉ– ์žš ์„ข ๎‚์ซŠ๋ฐš
  33. Polymer: vulcanize โ–ช Vulcanize โ–ช ์•Šํ•‚์ฏš์–บ์บ์Š ํ›Ÿ์ซƒ ํ—ช๋จพ๎Œฆ๋ชฎ ๎Œท: ํ•Šํ™“ํ”ฆ

    ๎ƒšํ•Š โ–ช IE ํ‘ทํ”Š์˜ช ํ—ช์ƒŽ์˜ช ์‡ช ๎ƒšํ•Š ํŒ– ์‡ถ โ€“ ๎ƒถ+ํ—ช๎–ํ‚ƒ์‚–์‚ฒ โ–ช ๎ƒšํ•Š ๎’’ CSS ํ—ํ‘ท ์กถํ‚ƒํ•‚ ์‚ฒ์’ โ€“ ๎ƒถ+ํ—ช๎–ํ‚ƒ์‚–์‚ฒ โ–ช Crisperํ”ฆ javascript mapํžŽํ’ž ์Šช๋งŽ shadow DOMํ”ฆ root ํ•‹ํŽ‚ํฒ์ข ์ญŽ์ญ’๋ซŠ ์†š - ๎ƒถ+ํ—ช๎–ํ‚ƒ์‚–์‚ฒ
  34. Polymer: vulcanize โ–ช Vulcanize โ–ช ์•Šํ•‚์ฏš์–บ์บ์Š ํ›Ÿ์ซƒ ํ—ช๋จพ๎Œฆ๋ชฎ ๎Œท: ํ•Šํ™“ํ”ฆ

    ๎ƒšํ•Š โ–ช IE ํ‘ทํ”Š์˜ช ํ—ช์ƒŽ์˜ช ์‡ช ๎ƒšํ•Š ํŒ– ์‡ถ โ€“ ๎ƒถ๎–ํ‚ƒ์‚–์‚ฒ โ–ช ๎ƒšํ•Š ๎’’ CSS ํ—ํ‘ท ์กถํ‚ƒํ•‚ ์‚ฒ์’ โ€“ ๎ƒถ๎–ํ‚ƒ์‚–์‚ฒ โ–ช Crisperํ”ฆ javascript mapํžŽํ’ž ์Šช๋งŽ shadow DOMํ”ฆ root ํ•‹ํŽ‚ํฒ์ข ์ญŽ์ญ’๋ซŠ ์†š - ๎ƒถ๎–ํ‚ƒ์‚–์‚ฒ
  35. Polymer: ์งข์‚ฒ์Š ํ’šํŠ ๎Œฆ์ข polyfill โ–ช ๎…ฆํ•‚ํžŽ ํ•บ์—š์„ข์ž ๎‘ญ์ฟฆ โ–ช

    ํ•ƒํฒ๎‹š์˜ช์–บ โ–ช ๋จพํ”ฆ ์กถ์Šฎ ํ“‡๎†บ๋ปš๎‚† ๋ฏพ์ณ(html import ์ง shadow DOM)ํ”’ polyfillํŽž ํ”ฆํ™‚๎‚ํŠ ๎Œถ โ–ช ์นบ๎ƒš์บ โ–ช ํ•–์„ฆ ๋ฎช๋ฉท์†’ ํžŽํ‘พ์ข ํ›Ÿ
  36. Polymer + Django โ–ช ์ค†์ฉฃ ์†š โ–ช {{ โ€ฆ }}

    โ–ช Polymer โ€“ ๎‹š์žํŽž์ปช ํŸ์งท๎ณ ์„พํ•‚ ํฒ๎‚†์žŠ ํํŽป โ–ช Django โ€“ ๎‹š์žํŽž์ปช ์ชŽ์ฟฆ ๋ง  ๎ฆ ์ง ์—ณ โ–ช ํ–ํ‘† ํํŽป ์บ์Š ํžŽํ—ฃ๎‚ ๎ŒŠ๎‚๋ง– ์ฟฆ ํ•–ํŽ‚ํ‘ข โ–ช ์†งํ— ์บซ์ปฟ ๎‹š์žํ”ฆ ๋ช‹ํ‘พ์ข ์ญ–๋งŽ์ณ โ–ช ์ˆž ์†’๋ฌบ๋งŽ ์บํ”ฆ๎‚์ปช ํ•ฆ ๎‚๋ฉพํ”’ ๎‚ํŠโ€ฆ
  37. Polymer + Django + Security โ–ช CORS (cross-origin resource scripting)

    โ–ช Django โ€“ CORS header ํ—’์ฝฏ ํžŽํ’ž (์กถ์Š–) โ–ช Polymer โ€“ vulcanize ๋ฉพ๋ซŠ์คŠํ”Ž JavascriptํŽ ์ปฌํŽบ CORS ํ˜พ๋ฉ‚ํ”’ ์žšํ˜ฟ๎ŒฆํžŽ ์ข‰๎Œถ โ–ช Crisper์Š ๎‚ CORS์Š ํ“’๎‚ Javascript์Š ์ฉฅ๋ฉถ๋บ’ โ–ช ์ฉ’ํ—’ํŽ“ ํ›Ÿ ์Šช ๋ฐถํžž - ํžํ—Ÿ ๎ƒถ โ–ช XSS ์งทํŽ‚ โ–ช Django - CSRF token ์นบํ‘ท โ–ช Polymer โ€“ ๎Ž–ํ‘ท์‡ฆํžŽ ํŒ˜ํ”Ž header์Š iron-ajax์Š ๎‚ ๋นฎ์ž‚ ์ฟฆ ํŽ”ํ”š โ–ช ์‡ฆ์†’์˜ซ ํžํ—Ÿ ๎ƒถ
  38. Polymer โ–ช Production ready?! โ–ช ์ฟฆํํ•ณํ•†ํ›’ ํŒš๋ชฎ ์ฟฆํ์ซƒ ํ•“๋ชฎ ์’พํŽ‚์ŠฒํŽ–์„ข์‚–

    ์นบ์ž— โ–ช โ€œDo not swim in sandocean. Swim in the ocean.โ€ โ–ช ์ง†์•ฆํ”ฆ HTML5 ๎‹’์˜ฎ๎‚†ํŽข์Šช โ–ช ํ•‚ ์งท๎ณํ•‚ ์žฌํ”’ ์Šฝ โ–ช X-tag, react, polymerโ€ฆ โ–ช ๎Œช๋ฌปํŽž์ปฎ?
  39. Polymer โ–ช Production ready?! โ–ช ์ฟฆํํ•ณํ•†ํ›’ ํŒš๋ชฎ ์ฟฆํ์ซƒ ํ•“๋ชฎ ์’พํŽ‚์ŠฒํŽ–์„ข์‚–

    ์นบ์ž— โ–ช โ€œDo not swim in sandocean. Swim in the ocean.โ€ โ–ช ์ง†์•ฆํ”ฆ HTML5 ๎‹’์˜ฎ๎‚†ํŽข์Šช โ–ช ํ•‚ ์งท๎ณํ•‚ ์žฌํ”’ ์Šฝ โ–ช X-tag, react, polymerโ€ฆ โ–ช ๎Œช๋ฌปํŽž์ปฎ?
  40. Electron + web โ–ช ๎Œช๋ฌปํŽ‚... ๎Œช๋ฌปํŽ‚๋งŽ! โ–ช ํŽ‚์‹ช ๋งŽ์†’ ๋ฏพ์ซ†

    ๋ฏŽ๋ด‚ํ•‚ ๋ญ‚์žŠํ•† ํ•Š์——๎‚†์˜ฎ โ–ช ๎‚†์บ์ง›์‡ช ๎Œช๋ฏŽ ํ“‡๎†พ๎‚† ๎†ํฒ๎ƒ“ (Noto ๋ฏพ์งฆ) โ–ช ํ“‡ โ–ช CSS: ์นบ๎ƒš์บํŽ ์˜บํ”Ž ํ”ฆํ‘†์˜ช ์žœํ•‚ ์‚ฒ์“์‚–์‚ฒ. โ–ช ๎Œช ์Œš์ข ํƒ›์ˆณํ•‚ํŽํžŽ์žš ํ•‚ํ—ช์ข ํŽ’์ž–๋งŽ ๋งงํ”Ž ๎ฃํ—ช ํ—ฃ์†’?
  41. ์งฟํŽข์Šช: Django + RDS โ–ช UTF-8 ์บ๋งŽ PythonํŽž์ปช ๋ซŠํŽพ ํ’ž๎ช๎Œฎ๋ฐš?

    โ–ช ํ’ž๎ช (cf., str / bytes / io / codecs) โ–ช MySQLํ•‚๋นฆ SQLite์Š ํŠพํžŽ ํŒ˜ํ”’ ๋ช‹ํ‘พ์žš โ–ช MySQL โ–ช ForeignKey ๋ซŽ์—ถ ์กถ์…†ํ•‚ DjangoํŽ ๋ญ๎Œทํ•‚ ํŒ– ์žฌ์ข์‚ฒ โ–ช MySQL + Django + Korean = EPIC FAIL โ–ช (ํŽพ๋ฌบ๎Œฎ ์Œš ํŠพ์„ฆ) Postgres์˜ช ํ—’๎ฆ๎Œฆ์‚– ํ‹๋ฉš ํ‹๋ฉš... โ–ช ๋ฏ†์–พ์„พ postgres๋งŽ (์ฐ’ํ‘ท/ํ•žํ’ž) ์ก‚ํŽž์ปช ์ฐ’ํƒŠ ๋ฉ‘ ๋งงํŒ’ํ‘ข.
  42. Python 3.4 โ€“ asyncio / coroutine ์บ‹ํž– โ–ช ๋ง’์‚ถ๎Œช ์Šช์Š

    ํ•Ÿ์ปฟ๎Œฎ ์Œž ํ–์ธฆ๋ฉš ํ•ฆ ์‡ช์‚ฒ. โ–ช ์ซƒํ•ฏ๎Œช ์ŠชํŽž์ปช yield ย from ย ์ฑŠ์ ‡ํ”Š์ก‚ ๎†ป์žซ... โ–ช AST ย ๎ˆชํ›Ž๎ƒถํžŽ์Š ๎ชํ‘ท๎‚ static ย analysis์˜ช coroutineํ”’ yield ย fromํ”’ ์นบํ‘ท๎ŒฆํžŽ ํŒ˜๋ชฎ ๎†๎Œช ๋ช‹ํ‘พ ํ•ž์†ง๋ฉŽ์นบ๎€‚ ๋งช์งช โ–ช ๋ฏ†์–บ๋นฆ, ํ•‚์˜ฎํ—ํ”Š์˜ช 100% static analysis ์ญ–๋งŽ์ณ โ–ช duck typing + dynamic method generation + method proxy pattern ... ํŒ–์‡ฎ ํ•‚ํ“ฎ์ข ์ค‚์ฟฆ๎•– ์žœ์‚ฒ โ–ช Python 3.5ํŽž์ปช await/async ์ค†์ฉฃํ•‚ ์บซ๋ฏพ์ก‚ ์ก•์ก• ๎ƒถ์Šฒํ”’ ๎’ถํ‹บ ๎††์บ๎Œฆ๋ฉš ํ•Ÿ์ปฟ ๋งŽ์ณ๎Œฎ ๋ฉ‘ํ”Š์˜ช ๋ฏพ์ƒŽ ํ›Ÿ!
  43. Python 3.4 โ€“ asyncio loop ํ™“์šš ์งท์ฉฃ โ–ช ์ค†์ปชํŽž ํ•–์ข

    ์ƒŽ์˜ช ํ•ฆ ํžช์ปช loop.close()์Š ๎–์„ข์‚– ํŽž์–บ๋งŽ ํ™š์•Š์•Š์•‹.. import asyncio import asyncio_redis loop ย = ย asyncio.get_event_loop() conn ย = ย loop.run_until_complete( asyncio_redis.Connection.create('localhost', 6379)) conn.close() loop.close() Task ย was ย destroyed ย but ย it ย is ย pending! task: ย <Task ย pending ย coro=<_reader_coroutine() ย running ย at ย /... /lib/python3.4/site-ยญโ€packages/asyncio_redis/protocol.py:919> ย  wait_for=<Future ย pending ย cb=[Task._wakeup()]>> ย 
  44. Python 3.4 โ€“ asyncio loop ํ™“์šš ์งท์ฉฃ โ–ช asyncio graceful

    shutdown ํ•ฆ ๎Œฆ์—ฒ์ก‚, 1. loop._run_once() 2. loop.run_until_complete(asyncio.sleep(0)) 3. loop.run_until_complete(server.wait_closed()) โ–ช ํ‘†์ญŽ ์•Šํ•‚์ฏš์–บ์บ์Š ์นบํ‘ท๎Œฆ์ข ๋ช‹ํ‘พ, wait_closed()ํŽ ๋งงํ”Ž ์ก“ํ‚ชํ—ํ•† ํ•žํ’ž๎‘š์ฟฆ coroutineํ•‚ ํ—ช๋ซƒ์‡ฆํžŽ ํŒ˜ํ”’ ์ฟฆ ํ•–์‚ฒ. โ–ช ํ•‚์—‚ ์Œž ํ™“์šš ํ—’ ์ฟฆ์†งํ”Š์˜ช event loop์Š ํž’๎—ํ‚ชํŠ ๎Œช์‚ฒ.
  45. Python 3.4 โ€“ asyncio loop ํ™“์šš ์งท์ฉฃ #! ย /usr/bin/env python3

    import asyncio loop = ย asyncio.get_event_loop() @asyncio.coroutine def my_timer(): i ย = ย 0 while True: yield ย from asyncio.sleep(1) print(i) i ย += ย 1 try: asyncio.async(my_timer(), ย loop=loop) loop.run_forever() except KeyboardInterrupt: pass finally: loop.close() ^CTask was ย destroyed ย but ย it ย is ย pending! task: ย <Task ย pending ย coro=<my_timer() ย done, ย defined ย at ย test.py:4> ย  wait_for=<Future ย pending ย cb=[Task._wakeup()]>>
  46. Python 3.4 โ€“ asyncio loop ํ™“์šš ์งท์ฉฃ #! ย /usr/bin/env python3

    import asyncio loop = ย asyncio.get_event_loop() @asyncio.coroutine def my_timer(): i ย = ย 0 while True: yield ย from asyncio.sleep(1) print(i) i ย += ย 1 try: asyncio.async(my_timer(), ย loop=loop) loop.run_forever() except KeyboardInterrupt: for t ย in asyncio.Task.all_tasks(): t.cancel() try: loop._run_once() except asyncio.CancelledError: pass finally: loop.close()
  47. asyncio_redis โ–ช Redis์Š ์นบํ‘ท๎Œฆ๋ฏพ ํ“’๎Œช asyncio ๋ฏพ์งฆ ์•Šํ•‚์ฏš์–บ์บ โ–ช Heisenbug

    ์งช์บซ! โ–ช SCAN ์ก“์˜‡ํ”’ ์†š์˜†์„ข์‚– ํ’ž๎Œฆ์ข key๋งŽ ๋นฆํฒ๋ฏพ์†’ ํŒ– ๋นฆํฒ๋ฏพ์†’... โ–ช ์•Šํ•‚์ฏš์–บ์บ ๋บ‚์ญŽํŽž์ปช while ์ค† ์ƒŽํ‚ฎ if ์ค†ํ”’ ํ„ถ์ปช ์งช์บซ๎Œช ์ฉ’๋ฏ† โžž ๎ƒถ ์ซ‚๋บ‚์ปช ๎‚๋ฉพ โ–ช https://github.com/jonathanslenders/asyncio- redis/issues/65 โ–ช Connection pool API ํ•‚ํ– โ–ช ํŽบ์–บ ๋งชํ”ฆ ํŽพ์ฝ›์‡ช API call์Šฒํ•‚ ๋งงํ”Ž connectionํ”’ ํ•‚ํ‘ท๎Œฆ์†’์˜ซ ๎Œฎ ์ฟฆ ํŽ”ํŽ‚ stateful๎Œช API ์นบํ‘ท ์ญ–๋งŽ (ํ–: SELECT) โ–ช ์‚ฒ์† ์•Šํ•‚์ฏš์–บ์บ์˜ช ๋ง–ํŒ’๋ฏพ ๋ฉŽ ํ›Ÿ (aioredis)
  48. ์งฟํŽข์Šช: ์ญ’์นพ ์ฅฒ์‚–ํ•‚์ผฆ โ€“ ZeroMQ โ–ช Asynchronous๎Œฆ์ก‚ ํ™™์‚ฒ? block๎ŒฆํžŽ ํŒ˜ํŒ’

    ์ฐฎ์‚์‚ฒ?? โ–ช socket connect ํ•‚ ์บ๎‚์†’ ํ‚ฒํ—ช์˜ช ํŽพ๋ฉพํŽบ์ญŽ์ข ํŒš ์ฟฆ ํŽ”์‚ฒ. (ํ‚บํžŽํŽ‚ ์บ์ƒŽ์งท ์ปช์ฉ’๋งŽ ํŒ’ํ– ํŒ– ์ฎํ•–ํŽ‚์†’...) โ–ช ํ•‚๎’’ send/recv ํž’๎— ํ‚ช ์ก“ํ‚ชํ—ํ•† timeout ๋ฉŽ์นบ ๎Œ’์ฟฆ โ–ช aiozmq์Š ํ•‚ํ‘ท๎Œช์‚ฒ์ก‚, blocking callํ”’ ์นบํ‘ท๎Œฎ ์Œš asyncio.wait_for์˜ช ๋งžํƒ†์ปช timeout ๋ฉŽ์นบ์Š ๎‚ํ›ฆํŠ ๎Œช์‚ฒ. โ–ช pyzmq์žš ํ•‚ํ‘ท๎Œช์‚ฒ์ก‚, socket.poll(msec) ํ•‚ํ‘ท๎‚์ปช timeout ๋ฉŽ์นบ์Š ๎‚ํ›ฆํŠ ๎Œช์‚ฒ.
  49. ์งฟํŽข์Šช: ์ญ’์นพ ์ฅฒ์‚–ํ•‚์ผฆ โ€“ LogStash โ–ช ์žฒ์‚ํŽŠ์ƒŽ์˜ช zmq input plugin๋ซŠ

    s3 output plugin ์ปฒํ—ฃ๎Œฆ๋ชฎ ์†š์—ฒ์ซฒ์„ข์‚– zmq recv_string ํฒ์œฆ ๋บ‚์ก‚์ปช ์ค‚๎Œช์šถ๎‹’ โ–ช ํ’žํ•† 1: s3 output plugin ์žฒ์‚ํŽŠํŽž โ€œwriteโ€ ๋ญš๎Œชํ”’ ํ›Š์•Š๋ชฎ ์‡ฆํŽ‚ ํ•–์ข์„พ, PutObject์žš ํ›ฆ์†’ ์‡ฆ์ขํ›’ ํŒšํŒฆ์„ข์‚– DeleteObject ๋ญš๎Œช์†’ ํ›ฆํŠ ๎Œฆ์ข ๋จพํŽ์‚ฒ. โ–ช ํ’žํ•† 2: config ์ค†์ฉฃ ํŽž์–บํŽ ์‚บ์บ, ์กถํ™“ํ”ฆ ํ•‚ํ“ฎ์˜ช output plugin ๋ฏพ๎ข๋งŽ ํ‚ฒ๎ƒถ๎Œช ๋ช‹ํ‘พ ๋ฏพ์ซ† log levelํŽž์ปช์ข ์นบํ‘ทํ•žํŽž๋ฉš ํŒ’์ค‚์–พ ๋ช‹๋ชฎยทํฒ์œฆ์Š ์ซ‚ํŽบํ›ŠํžŽ ํŒ˜์ข์‚ฒ. โ–ช ํ’žํ•† 3: output pluginํ•‚ ๋ฏพ๎ข์‡ฆํžŽ ํŒ˜๋ชฎ ํ‚ฒ๎—์‡ช ๋ช‹ํ‘พ input pluginํ”ฆ receive timeoutํ”’ ์ค‚ํ‚ช๎Œฆ์ข ์ฉ’๋ฏ†๋งŽ ํ•–์‚ฒ.
  50. ์งฟํŽข์Šช: Docker โ–ช ํ—Žํ•ณ์ฝš ์†š โ–ช ๋ซƒํ‚ซํ”Š์˜ช ์งพ๎†บ์‡ฆ์ข docker registryํ”ฆ

    "latest"์ข ์นบํ‚ฒ latest๋งŽ ํŒ’์‚ฆ โ–ช ์ก“ํ‚ชํ—ํ”Š์˜ช 2.0 ์ž์ข 2.0.1 tag์Š ํ„ถํŠ ๎Œถ โ–ช ์นบ์ฝš๎Œช ์ค†ํ—ชํžŽ์žš ํ•‚์–พ ๋ฉ‘์†’ ์บ‹ํž–์˜ช ํ‚ช๋ง’ ํ•ฏํŒ’์ ‡ํ”š โ–ช ํ—’์žซ โ–ช docker 1.8 ์งช๎ˆช, CoreOS์ข ํ•ž ์–พํ•’(rkt) ์†’ํ•“ โ–ช ํ”Š์˜ช ํŒฌํ”Š์˜ช์†’ ๎Œช์†งํŒ– ์Šช/API ์ชŽ๋ช‹ํ•‚ ์บ์ƒ‡๎•– ํ•–ํ”’ ๋ฉ‘ํ”Š์˜ช ํ–์บ
  51. ์งฟํŽข์Šช: ์ซ‚ํŒ– โ–ช Jupyter / ipython ํ”ฆ ๎ฃํ•ณ์ปฟ โ–ช scalable๎ŒฆํžŽ

    ํŒ˜ํ”š โ–ช Jupyter ๋ฌบ๎’ํ”ฆ ์ค†ํ—ชํ—ž โ–ช Unix ย ๋ช’ํ—ฃ ๋ฏพ์งฆํ”ฆ ํ•’ํ‚ช ๋ช’ํ—ฃ ํ‚ชํฒ ํ•‚ํ‘ท โ–ช ์ซ‚ํŒ–ํŽž ์ค†ํ—ช๋งŽ ์‡ฎ ์žš๎Œช ๋ฉ‘์Šฒํ”Ž ์‚ฒ ์†šํŒ’๋งž โ–ช ๋ฏพ์ซ† ์ปฒ๋ช’ : ์˜ช ๋ฝ†๎‚†์ญํ”’ ํ“‡ ํ•†๎…ฆํ•‚ํฒ์˜ช ์†š์บ์ข ํ‘ท์†’ โ–ช ์ปช์ฐ’ํฒํ‘ทํ”Š์˜ช ๋งช์งช์‡ฆ๋ฏพ ํŽ‚์—ฒํ’Ž โ–ช ์Šช ํ‚ฒ๎— ์ปช์ฐ’ํฒ โ€“ Sorna โ–ช ๋ฏพ์ซ†์ญŽ ํ—’์ญŽ ์‚ฒํ‚ช ํžช๋ชฎ ํ•–ํ‚ƒ์‚–์‚ฒ.
  52. ํŒฌํ”Š์˜ช ๎Œฎ ํ•Š์Šฒ โ–ช Container Resource Consolidation โ–ช Kubernetes ๋ฏพ์ฟฎ

    ๋ฉŽํซ โ–ช ๋ฏพํ™‚ ์ฝข์šถ์ผฆํ•‚ ํ’ž๎Œฆ์ข ์ปฟ์ณํ•‚ ํŒ– ๋นฆํบ ๋ช‹ํ‘พ paxos๋นฆ raft ๋งงํ”Ž ์ญ’์นพ agreement ํŒš๋ชฎ์บํฆํ”’ ์นบํ‘ท๎Œฆ์ข key-value store์Š ์งฟํŽข์Šช์˜ช ๎ŒฆํŽบ ํžํ—Ÿ ๋ฌบ๎’ ํ–ํ—ฃ. โ–ช Ingen REPL (read-evaluate-print loop) ๋ชฎ์†’๎ข โ–ช stdout/stderr ย streaming โ–ช interactive ย plot ย ์—ณ โ–ช image, ย sound ย ์Šฟํ”ฆmultimedia ย ์—ณ
  53. โ–ช ํŒฏ๎‚พ์ฐ’๎‚พ ์˜ช๋ฏ† ๋ฏพ์งฆํ”ฆ ๋งชํ•†๎ข ๎ฃํ•ณ โ–ช ํ“ฎํ—Ž ํŒฏ๎‚พ์ฐ’๎‚พ ๎‚†์•ฆ

    โ–ช User profiler + backtracer + ML with back propagation โ–ช ํ•ž์†ง ํฒ ์บซ์ปฟ ์กถ์Š–ํ”ฆ ๋ชฎ์†’๎ข โ–ช d3.js ์Š ์ฟฆํ—ฃ๎Œช fluid nonlinear navigation UI โ–ช ๋ฏพ โ–ช ๎Œงํ‚ƒํ‘ท ํ•†๎…ฆํ•‚ํฒ ๋งช์ปฎ โ–ช ๋งชํ•†์ช’ ์Šช ํฒ๎‚† ์บš์Šช์งฃํฒ ๋ชฎ์†’๎ข โ–ช ๎‚† ํ•บ๋ฌบ์ปฟ๋ฏพ ํ’์ปฟ โ–ช ํ‚ช์ฅบ์—–ํ•‚ ํ’์ปฟ
  54. ๋ฉพ์˜ฎ โ–ช ํ™™ํ”Ž ํฒ๎‹–์ฝšํฒ์Šฒํ”’ ๎Œถ๋ฒฆ ์กถํŒ’ ํ•ฆ ๎Œท์ปช ์žš์Šฒ์ก‚ ํ‘พํ›Š๋งŽ

    ๋นฆ์ปช์ปช ์†’ํŽํ››์‚–์‚ฒ. โ–ช ...์˜ช ํ‚ชํ•Ÿ๎–์ข์„พ ๎’ํ‚ฒํ”Ž ํฒ๎‹–์ฝšํฒ ์บ‹ํž–์–บ + ํ•ž ๋งช์งช + ๎ƒถ ํ—ช๋ซƒํ”Š์˜ชโ€ฆ โ–ช ํ•‚์บ๋ซŠ ๎’ํ‚ฒํ”Ž ํ•‚์—•๋ฉš ์‚ฒ์“์‚–์‚ฒ. โ–ช ๋ฏ†์–พ์„พ ํ•‚์บํ”’ ๎’ํ‚ฒ์˜ช ๋ธšํŽ‚ํฒ์ข๋ฉš ์ž ์žฒ์—ณ ํŒ’์‚–๋ฉฎํ‚ƒ์‚–๋ฐš?