데블스캠프2017/Promise패턴으로쉽게하는비동기프로그래밍 (rev. 1.8)
- Promise 패턴에 대한 것보다는, 필요한 이유가 무엇인가?
- 단순히 소개하는 것보다는, 더 기억에 오래 남을 수 있는 방법을 위해.
- Promise는 말 그대로 약속을 뜻한다.
- 프로젝트 홍보
(?)
2. 동기 프로그래밍과 비동기 프로그래밍 ¶
- 동기 프로그래밍(Sync)은 순서대로, 차례대로 주르륵 실행하는 방식.
- 비동기 프로그래밍(Async)은 순서를 알 수 없음.
- 네트워크 통신이나, GUI 상에서의 버튼 클릭의 반응 타이밍에 대해 생각해보자.
- 병렬 프로그래밍을 하다보면 익숙해지는 그 방식.
- 시간이 오래 걸리는 작업에 대해, 비동기를 사용하면 작업 실행 중 다른 작업을 수행할 수 있으므로 CPU 시간을 아낄 수 있다.
- 철수와 짱구가 있다.
- 철수가 10원을 주며 짱구에게 빵을 사오라고 시킨다.
- 짱구는 어느 시점(언제인지는 정확히 알 수가 없다.)에 빵을 사서 철수에게 돌려준다.
- 똑같이 철수가 10원을 주며 짱구에게 빵을 사오라고 시킨다.
- 짱구는 초코비가 먹고 싶었기 때문에, 마음대로 초코비를 사서 철수에게 돌려주었다.
- 철수가 장난감을 짱구에게 빌려준다.
- 짱구가 장난감을 가지고 놀다가 철수에게 돌려준다.
- 철수가 맹구에게 장난감을 빌려주고, 맹구는 마찬가지로 장난감을 가지고 놀다가 철수에게 돌려준다.
- 단순히 비동기 함수 두 개를 구현하면, 동시에 콜백이 실행될 경우 문제가 생긴다!
- 콜백 안에 비동기 함수 하나를 집어넣자.
- 그런데, 비동기 함수의 개수가 훨씬 많이 늘어난다면...
- 콜백 지옥!
- 오류 처리, 특정 로직을 구현하는 것이 미친듯이 어려워진다.
- Promise 패턴을 사용하면, 과도한 인덴트/엄청난 중복의 오류 처리 없이도 여러 겹의 콜백을 처리할 수 있다!
4. 사용 이유 ¶
- Promise 패턴은 궁극적으로 콜백 지옥을 해결할 수 있다.
- 여러 비동기를 한 번에 처리하는 것이 가능하며, 예외 처리를 매우 쉽게 구현할 수 있다.
- 기존 콜백 구조를 Promise로 전환하는 것이 쉽다.
- Fetch API가 Promise로 구현되었으며, 표준이 되었으므로 웹을 개발한다면 피해갈 수 없다.
- 더 알고 싶으면 bluebirdjs.com!
5. Selenium ¶
- Browser Automation!
- 사전에 제작한 스크립트를 자동으로 실행시켜주는, 매크로 같은 존재.
- 베타 테스터 모집합니다.
- 포탈 사이트의 변경사항을 자동으로 추적해서, 알림을 띄워주는 프로젝트.
- Selenium을 사용한 이유?
- 포탈 사이트가 JavaScript 등을 과도하게 사용하고 있어서 일반적인 크롤러로는 해결이 쉽지 않은 이유로.
Selenium이 유명해서?
- Python 쪽에도
크롤러가 Selenium이 있는데, Promise 패턴이 아닌 동기적으로 작성되어 있는 이유로.