O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.
Cooperative multi-tasking
with Node.js
Node.js로 협력적 멀티태스킹 처리하기
play.node();2017withIBM
play.node();2017withIBM
Speaker
Irho Park (박일호)
aka. iMaZiNe @ Kakao corp.
Daum자동차 서비스 개발
고백
거창하게 제목을 정해 놓았지만…
하려고 하는 이야기는
적다고 할 수 없는 숫자의 데이터 마이그레이션 경험담
play.node();2017withIBM
사건의 시작
2016년 카카오 입사
play.node();2017withIBM
11개월 만에 꿈에 그리던 제주생활
출근 20분, 퇴근 15분
월정리 20분, 함덕서우봉해변 15분
그렇게 2016년 11월
Daum자동차 서비스를 담당하게 됩니다.
play.node();2017withIBM
여기까지는 Happy함
play.node();2017withIBM
첫번째 임무
Legacy article migration
play.node();2017withIBM
대부분 먼저 하는 생각
1min = 60s
1hour = 3,600sec
1day = 86,400sec
초당 100개씩만 처리하면…
play.node();2017withIBM
여기까지도 Happy함
play.node();2017withIBM
요구사항 분석
구문서 파싱 및 가공
이 모든것을 안전하게 처리
어뷰징 제거
연결된 정보들 처리 (ex. 댓글)
play.node();2017withIBM
어떻게
DB를 읽고, 쓰고
파일을 읽고, 쓰고
API를 호출하고
play.node();2017withIBM
결국
비동기 요청들(Asynchronous Requests)을
순차적(Sequentially)으로
안전하게(Transactionally) 처리
play.node();2017withIBM
정해진 시간 안에
play.node();2017withIBM
Why use Node.JS
Because, I love it!
play.node();2017withIBM
Simulation
1개의 article을 처리하기 위해 필요한 비동기요청 수는
최소 8개 + 댓글 수 * 2
댓글이 없다고 가정하고 비동기 요청 1개당 20ms 로 잡아도
최소 160ms 필요 (6.25/sec)
86...
실제 효율은 절반 이하…
느려도 너무 느리다!
play.node();2017withIBM
Solution
병렬처리로 속도를 높이거나
프로세스의 효율을 높이거나
play.node();2017withIBM
마음을 비우고 순차적으로…
play.node();2017withIBM
결국 동시성(Concurrency) 문제를
해결해야 하는 상황!
Message Queue 를 사용해 스케쥴링 하고
병렬처리 하기로…
play.node();2017withIBM
아직까지도 Happy함
play.node();2017withIBM
구현해 봅시다
비동기를 처리하는 대표적인 방법
play.node();2017withIBM
Callback!
Callback DEMO
play.node();2017withIBM
Callback Image?
play.node();2017withIBM
조금 더 나은 방법
play.node();2017withIBM
Promise
Promise DEMO
play.node();2017withIBM
How to solve memory issue
play.node();2017withIBM
협력적 멀티태스킹
play.node();2017withIBM
Cooperative Multi-tasking
일종의 시분할(Time-sharing)방식
운영체제의 개입 없이 task가 독점적으로 CPU를 사용
미사용시 자...
구현방법의 선택
play.node();2017withIBM
Coroutine
ES7 스펙 async, await
Node.js 7.6 부터 공식적으로 지원
Node.js 6.x —harmony 옵션과 함께 사용
Coroutine
코루틴은 우리가 잘 알고 있는 서브루틴(Subroutine)과 달리 진입점(Entry Point)이 여러 개일 수 있습니다.
쉽게 이야기하면 실행을 멈췄다가(Suspend) 재개(Resume)할 수 있...
Coroutine
play.node();2017withIBM
Coroutine DEMO
코드 가독성이 좋아짐
play.node();2017withIBM
대규모 처리시 안전함
비동기 다중 중첩시 유의해야 함
결과적으로 Happy함
play.node();2017withIBM
TIPs
play.node();2017withIBM
Coroutine 예외 처리 방법
UV_THREADPOOL_SIZE
Coroutine = Generator + promise + dispatcher(trampoline)
References
play.node();2017withIBM
TOAST ES6의 제너레이터를 사용한 비동기 프로그래밍(김동우님)
spoqa 기술블로그 - Concurrency and eventlet(문성원님)
서광열의...
play.node();2017withIBM
One more thing…
We want you!
https://careers.kakao.com/jobs/P-10465
play.node();2017withIBM
Thank you
개발자라면 지금 방문하세요! developer.ibm.com/kr
https://github.com/imazine/playnode2017_sample
Próximos SlideShares
Carregando em…5
×

de

Nodejs cooperative-multi-tasking Slide 1 Nodejs cooperative-multi-tasking Slide 2 Nodejs cooperative-multi-tasking Slide 3 Nodejs cooperative-multi-tasking Slide 4 Nodejs cooperative-multi-tasking Slide 5 Nodejs cooperative-multi-tasking Slide 6 Nodejs cooperative-multi-tasking Slide 7 Nodejs cooperative-multi-tasking Slide 8 Nodejs cooperative-multi-tasking Slide 9 Nodejs cooperative-multi-tasking Slide 10 Nodejs cooperative-multi-tasking Slide 11 Nodejs cooperative-multi-tasking Slide 12 Nodejs cooperative-multi-tasking Slide 13 Nodejs cooperative-multi-tasking Slide 14 Nodejs cooperative-multi-tasking Slide 15 Nodejs cooperative-multi-tasking Slide 16 Nodejs cooperative-multi-tasking Slide 17 Nodejs cooperative-multi-tasking Slide 18 Nodejs cooperative-multi-tasking Slide 19 Nodejs cooperative-multi-tasking Slide 20 Nodejs cooperative-multi-tasking Slide 21 Nodejs cooperative-multi-tasking Slide 22 Nodejs cooperative-multi-tasking Slide 23 Nodejs cooperative-multi-tasking Slide 24 Nodejs cooperative-multi-tasking Slide 25 Nodejs cooperative-multi-tasking Slide 26 Nodejs cooperative-multi-tasking Slide 27 Nodejs cooperative-multi-tasking Slide 28 Nodejs cooperative-multi-tasking Slide 29 Nodejs cooperative-multi-tasking Slide 30 Nodejs cooperative-multi-tasking Slide 31 Nodejs cooperative-multi-tasking Slide 32 Nodejs cooperative-multi-tasking Slide 33 Nodejs cooperative-multi-tasking Slide 34 Nodejs cooperative-multi-tasking Slide 35 Nodejs cooperative-multi-tasking Slide 36
Próximos SlideShares
Replikativ
Avançar
Transfira para ler offline e ver em ecrã inteiro.

8 gostaram

Compartilhar

Baixar para ler offline

Nodejs cooperative-multi-tasking

Baixar para ler offline

play.node(); 2017 발표자료 : 협력적 멀티 태스킹(Cooperative multi-tasking)

Audiolivros relacionados

Gratuito durante 30 dias do Scribd

Ver tudo

Nodejs cooperative-multi-tasking

  1. 1. Cooperative multi-tasking with Node.js Node.js로 협력적 멀티태스킹 처리하기 play.node();2017withIBM
  2. 2. play.node();2017withIBM Speaker Irho Park (박일호) aka. iMaZiNe @ Kakao corp. Daum자동차 서비스 개발
  3. 3. 고백 거창하게 제목을 정해 놓았지만… 하려고 하는 이야기는 적다고 할 수 없는 숫자의 데이터 마이그레이션 경험담 play.node();2017withIBM
  4. 4. 사건의 시작 2016년 카카오 입사 play.node();2017withIBM 11개월 만에 꿈에 그리던 제주생활 출근 20분, 퇴근 15분 월정리 20분, 함덕서우봉해변 15분
  5. 5. 그렇게 2016년 11월 Daum자동차 서비스를 담당하게 됩니다. play.node();2017withIBM
  6. 6. 여기까지는 Happy함 play.node();2017withIBM
  7. 7. 첫번째 임무 Legacy article migration play.node();2017withIBM
  8. 8. 대부분 먼저 하는 생각 1min = 60s 1hour = 3,600sec 1day = 86,400sec 초당 100개씩만 처리하면… play.node();2017withIBM
  9. 9. 여기까지도 Happy함 play.node();2017withIBM
  10. 10. 요구사항 분석 구문서 파싱 및 가공 이 모든것을 안전하게 처리 어뷰징 제거 연결된 정보들 처리 (ex. 댓글) play.node();2017withIBM
  11. 11. 어떻게 DB를 읽고, 쓰고 파일을 읽고, 쓰고 API를 호출하고 play.node();2017withIBM
  12. 12. 결국 비동기 요청들(Asynchronous Requests)을 순차적(Sequentially)으로 안전하게(Transactionally) 처리 play.node();2017withIBM
  13. 13. 정해진 시간 안에 play.node();2017withIBM
  14. 14. Why use Node.JS Because, I love it! play.node();2017withIBM
  15. 15. Simulation 1개의 article을 처리하기 위해 필요한 비동기요청 수는 최소 8개 + 댓글 수 * 2 댓글이 없다고 가정하고 비동기 요청 1개당 20ms 로 잡아도 최소 160ms 필요 (6.25/sec) 86400 * 6.25 = 540,000 play.node();2017withIBM
  16. 16. 실제 효율은 절반 이하… 느려도 너무 느리다! play.node();2017withIBM
  17. 17. Solution 병렬처리로 속도를 높이거나 프로세스의 효율을 높이거나 play.node();2017withIBM
  18. 18. 마음을 비우고 순차적으로… play.node();2017withIBM
  19. 19. 결국 동시성(Concurrency) 문제를 해결해야 하는 상황! Message Queue 를 사용해 스케쥴링 하고 병렬처리 하기로… play.node();2017withIBM
  20. 20. 아직까지도 Happy함 play.node();2017withIBM
  21. 21. 구현해 봅시다 비동기를 처리하는 대표적인 방법 play.node();2017withIBM Callback!
  22. 22. Callback DEMO play.node();2017withIBM
  23. 23. Callback Image? play.node();2017withIBM
  24. 24. 조금 더 나은 방법 play.node();2017withIBM Promise
  25. 25. Promise DEMO play.node();2017withIBM
  26. 26. How to solve memory issue play.node();2017withIBM
  27. 27. 협력적 멀티태스킹 play.node();2017withIBM Cooperative Multi-tasking 일종의 시분할(Time-sharing)방식 운영체제의 개입 없이 task가 독점적으로 CPU를 사용 미사용시 자발적 CPU 자원 반환 Critical section 보호를 위한 Lock이나 Semaphore 불필요 서광열의 코딩스쿨(https://gamecodingschool.org) 참조
  28. 28. 구현방법의 선택 play.node();2017withIBM Coroutine ES7 스펙 async, await Node.js 7.6 부터 공식적으로 지원 Node.js 6.x —harmony 옵션과 함께 사용
  29. 29. Coroutine 코루틴은 우리가 잘 알고 있는 서브루틴(Subroutine)과 달리 진입점(Entry Point)이 여러 개일 수 있습니다. 쉽게 이야기하면 실행을 멈췄다가(Suspend) 재개(Resume)할 수 있다는 점인데요. 이 특성을 살리면 우리가 익히 아는 스레드(Thread)처럼 쓸 수 있게 됩니다. 다만 스레드와 달리 코루틴은 비선점적(Non-Preemptive)이기때문에 코드의 흐름을 전적으로 사용자가 제어할 수 있습니다. play.node();2017withIBM spoqa 기술블로그 - Concurrency and eventlet(문성원님) 참조
  30. 30. Coroutine play.node();2017withIBM
  31. 31. Coroutine DEMO 코드 가독성이 좋아짐 play.node();2017withIBM 대규모 처리시 안전함 비동기 다중 중첩시 유의해야 함
  32. 32. 결과적으로 Happy함 play.node();2017withIBM
  33. 33. TIPs play.node();2017withIBM Coroutine 예외 처리 방법 UV_THREADPOOL_SIZE Coroutine = Generator + promise + dispatcher(trampoline)
  34. 34. References play.node();2017withIBM TOAST ES6의 제너레이터를 사용한 비동기 프로그래밍(김동우님) spoqa 기술블로그 - Concurrency and eventlet(문성원님) 서광열의 코딩스쿨 - 코루틴(Coroutine) 이해하기(서광열님) Wikiedia Coroutine 한글 번역(dogfeet님)
  35. 35. play.node();2017withIBM One more thing… We want you! https://careers.kakao.com/jobs/P-10465
  36. 36. play.node();2017withIBM Thank you 개발자라면 지금 방문하세요! developer.ibm.com/kr https://github.com/imazine/playnode2017_sample
  • AndrewJEON2

    Nov. 17, 2017
  • shkang4

    Nov. 13, 2017
  • ssuser87f7411

    Nov. 13, 2017
  • doramong

    Nov. 13, 2017
  • aleckim503

    Nov. 13, 2017
  • nicegyuha

    Nov. 13, 2017
  • breadfit

    Nov. 13, 2017
  • iolo

    Nov. 13, 2017

play.node(); 2017 발표자료 : 협력적 멀티 태스킹(Cooperative multi-tasking)

Vistos

Vistos totais

1.263

No Slideshare

0

De incorporações

0

Número de incorporações

5

Ações

Baixados

6

Compartilhados

0

Comentários

0

Curtir

8

×