메뉴 바로가기 검색 및 카테고리 바로가기

한빛미디어

독자리뷰

한 번에 10000개의 웹 페이지를 긁어올 수 있는 기술을 익혀보자

tee***

|

2021-05-24

파이썬 비동기 라이브러리 Asyncio

파이썬의 비동기 라이브러리인 Asyncio를 소개 및 활용하는 방법을 담은 전문서이다. 많은 예제를 통해 기존 스레드 라이브러리와 Asyncio 라이브러리의 차이점을 설명한다. Asyncio와 호환되는 서드파티 라이브러리 사례들도 소개하여 실전에서 활용할 수 있다.

  • 저자 : 케일럽 해팅
  • 번역 : 동동구
  • 출간 : 2021-05-01

 

[서론]

 

이 책의 부제는 "대규모 병행성 작업을 위한 비동기 프로그래밍"이다. 

 

사실 멀티스레드 프로그래밍은 프로그래밍을 통틀어 가장 고통스러운 부분 중 하나이다. 

 

이를 해결하기 위해 다양한 방법론이 있어왔다. 

 

파이썬도 3.4부터 asyncio 라이브러리가 도입되고, 3.5부터는 asunc, await 키워드가 도입되었다. 

 

 

[Asyncio와 비동기 프로그래밍이란?]

 

사실 코딩에 꽤나 익숙하지 않다면 멀티스레드/비동기작업이 필요한 때를 쉽게 떠올릴 수가 없다.

 

대표적으로 병렬 작업 또는 비동기 작업이 필요할 때는, 예를 들어 다수의 웹페이지를 한 번에 긁어올 때이다. 

 

멀티스레드 또는 비동기 작업을 이용해서 한 번에 하나씩이 아니라, 동시에 다수의 http 요청을 병행하여 실행할 수 있다. 

 

일반적으로 CPU는 하나의 작업을 처리한 후 네트워크 I/O의 완료를 기다린다. 

 

그래서 보통은 requests.get() 등을 사용하여 큰 규모의 웹 페이지를 긁어온다면 순간적으로 프로그램이 멈칫하는 현상이 발생할 것이다. 

 

이것이 바로 비동기작업이 아닌 경우에 발생하는 블로킹 현상이다. 

 

파이썬의 asyncio 라이브러리는 멀티 스레드가 아니면서도 더 나은 방식으로 동시에 여러가지 일을 수행하고, 완료되면 응답을 받는 비동기 처리를 지원한다. 

 

네트워크 I/O 위주 작업에 스레드 기반 병행 처리보다 비동기 기반 병행 처리를 적용해야 하는 두 가지 이유는 다음과 같다. 

 

이유 1. 스레드를 사용하는 선점형 멀티태스킹보다 안전하다 : 오류, 경합 조건, 비결정론적 위험 요소가 발생하지 않는다.

 

이유 2. 동시에 수천 개의 소켓 연결을 간단히 처리할 수 있다 : 웹 소켓이나 사물인터넷을 위한 MQTT같은 수명이 긴 연결도 처리할 수 있다. 

 

결국 Asyncio는 실행 제어가 코루틴 간에 전이 되는 부분을 쉽게 확인할 수 있기 때문에, 관련된 자원들이 어떻게 사용되고 있는 지 훨씬 쉽게 확인할 수 있다는 점이 매력적이었다. 

 

물론, Asyncio는 명목상으로 단일 스레드이기 때문에, 멀티 스레드에만 영향을 미치는 전역 인터프리터 락(GIL: global Interpreter Lock)의 영향을 받지 않지만, 여러 CPU 코어의 장점도 얻을 수 없다는 단점도 있지만 말이다.

 

 

[결론]

 

사실 asyncio 라이브러리는 워낙 난이도가 높아서, 처음 도입될 때부터 파이썬 커뮤니티 내에서도 논쟁이 있었던 기능이다. 

 

개인적으로도 비동기 프로그래밍에 그다지 익숙하지가 않아서, 처음에는 asyncio가 간단한 예약어와 몇가지 클래스의 추가인 줄 알았다. 

 

그런데 공부하다보니 제대로 된 비동기 지원을 위해서는 프로그램 설계와 구조의 변화가 반드시 따르게 된다는 것을 깨달았다. 

 

결국 asyncio는 여러 개의 작업을 동시에 수행하는 것이고, 하나의 작업이 완료되기까지 대기하는 동안 다른 작업을 수행할 수 있도록 하는 것이기 때문이다. 

 

이 책은 파이썬으로 멀티 스레드 프로그래밍을 해본 적 없는 사람은 조금 어려울 것이다. 

 

특히 비동기에 대해서 제대로 생각해보거나 충분히 활용해보지 않은 사람이라면 혼동이 많이 올 것이다. 

 

그래도 이 책은 얇고 가벼워서 공부하고 싶은 생각이 절로 나게 되어있다. 

 

편집도 깔끔하다.

 

쉬운 내용은 아니었지만, 이 책을 통해 스크립트 언어로서의 한계를 넘어 도전하고 있는 파이썬의 발전을 볼 수 있어서 좋았다. 

 

 

 

이 리뷰는 한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

 

 

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?