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