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