U E D R , A S I H C RSS

데블스캠프2017/Promise패턴으로쉽게하는비동기프로그래밍

Difference between r1.7 and the current

@@ -50,4 +50,4 @@
* Selenium을 사용한 이유?
* 포탈 사이트가 JavaScript 등을 과도하게 사용하고 있어서 일반적인 크롤러로는 해결이 쉽지 않은 이유로.
* ~~Selenium이 유명해서?~~
* Python 쪽에도 크롤러가 있는데, Promise 패턴이 아닌 동기적으로 작성되어 있는 이유로.
* Python 쪽에도 ~~크롤러가~~ Selenium이 있는데, Promise 패턴이 아닌 동기적으로 작성되어 있는 이유로.





1. 개요

  • Promise 패턴에 대한 것보다는, 필요한 이유가 무엇인가?
    • 단순히 소개하는 것보다는, 더 기억에 오래 남을 수 있는 방법을 위해.
    • Promise는 말 그대로 약속을 뜻한다.
  • 프로젝트 홍보 (?)

2. 동기 프로그래밍과 비동기 프로그래밍

  • 동기 프로그래밍(Sync)은 순서대로, 차례대로 주르륵 실행하는 방식.
    • 우리 모두가 알고 있는 바로 그 방식.
  • 비동기 프로그래밍(Async)은 순서를 알 수 없음.
    • 네트워크 통신이나, GUI 상에서의 버튼 클릭의 반응 타이밍에 대해 생각해보자.
    • 병렬 프로그래밍을 하다보면 익숙해지는 그 방식.
    • 시간이 오래 걸리는 작업에 대해, 비동기를 사용하면 작업 실행 중 다른 작업을 수행할 수 있으므로 CPU 시간을 아낄 수 있다.

3. 예시

  • 철수와 짱구가 있다.
    • 철수가 10원을 주며 짱구에게 빵을 사오라고 시킨다.
      • 짱구는 어느 시점(언제인지는 정확히 알 수가 없다.)에 빵을 사서 철수에게 돌려준다.
    • 똑같이 철수가 10원을 주며 짱구에게 빵을 사오라고 시킨다.
      • 짱구는 초코비가 먹고 싶었기 때문에, 마음대로 초코비를 사서 철수에게 돌려주었다.
        • ???
        • 오류 발생!
    • 철수가 장난감을 짱구에게 빌려준다.
      • 짱구가 장난감을 가지고 놀다가 철수에게 돌려준다.
      • 철수가 맹구에게 장난감을 빌려주고, 맹구는 마찬가지로 장난감을 가지고 놀다가 철수에게 돌려준다.
        • 단순히 비동기 함수 두 개를 구현하면, 동시에 콜백이 실행될 경우 문제가 생긴다!
        • 콜백 안에 비동기 함수 하나를 집어넣자.
          • 그런데, 비동기 함수의 개수가 훨씬 많이 늘어난다면...
            • 콜백 지옥!
            • 오류 처리, 특정 로직을 구현하는 것이 미친듯이 어려워진다.
            • Promise 패턴을 사용하면, 과도한 인덴트/엄청난 중복의 오류 처리 없이도 여러 겹의 콜백을 처리할 수 있다!

4. 사용 이유

  • Promise 패턴은 궁극적으로 콜백 지옥을 해결할 수 있다.
  • 여러 비동기를 한 번에 처리하는 것이 가능하며, 예외 처리를 매우 쉽게 구현할 수 있다.
  • 기존 콜백 구조를 Promise로 전환하는 것이 쉽다.
  • Fetch API가 Promise로 구현되었으며, 표준이 되었으므로 웹을 개발한다면 피해갈 수 없다.
  • 더 알고 싶으면 bluebirdjs.com!

5. Selenium

  • Browser Automation!
    • 사전에 제작한 스크립트를 자동으로 실행시켜주는, 매크로 같은 존재.

6. 프로젝트

  • 베타 테스터 모집합니다.
  • 포탈 사이트의 변경사항을 자동으로 추적해서, 알림을 띄워주는 프로젝트.
  • Selenium을 사용한 이유?
    • 포탈 사이트가 JavaScript 등을 과도하게 사용하고 있어서 일반적인 크롤러로는 해결이 쉽지 않은 이유로.
    • Selenium이 유명해서?
    • Python 쪽에도 크롤러가 Selenium이 있는데, Promise 패턴이 아닌 동기적으로 작성되어 있는 이유로.
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:29:18
Processing time 0.0250 sec