본문 바로가기

책읽기

[파이썬 비동기 라이브러리 Asyncio] (케일럽 해팅 著, 동동구 譯, 2021)

  • 비동기 프로그래밍
    • "한 회사원이 있다. 전화도 받아야 하고 결재 올려 승인을 받아야 하고 메일도 보내야 하고 고객과 만나 업무도 처리해야 한다. 가끔 바쁠 때 "몸이 열 개면 좋겠다"라고 말한다."
    • "멀티 스레드는 실제 몸이 열 개이다. 그래서 전화 받는 공무원, 메일 보내는 공무원, 민원 처리하는 공무원이 각각 존재한다. 당연히 빠르다. 하지만 전화를 끊은 공무원은 시간이 남아도 다른 일을 도와주지 않는다. 그냥 논다."
    • "비동기식 프로그래밍은 '몸이 열 개면 좋겠다'라고 생각만 하고 결국 혼자 모든 일을 다 한다. 대신 엄청나게 똑똑하고 몸이 빠르다. 상사에게 결재 올려 승인이 날 때까지 기다리지 않고 전화도 받고 메일도 보낸다. 이 분은 '일머리'를 안다. 똑똑하고 체계적이고 계획적이다. 열 명의 공무원 부럽지 않다."
    • 어떤 블로그의 글을 옮긴 것인데, 내가 본 비동기 프로그래밍에 대한 설명 중 가장 직관적이다.
    • 이 글에 있는 예시처럼 비동기 프로그래밍은 일을 던지고 기다리고 받으며 굉장히 효율적으로 처리한다.
    • 입력(input)과 출력(output)이 업무의 대부분일 경우에 진가를 발휘하기 때문에 네트워크 프로그래밍이라는 이름으로 불리는 경우도 있다.

 

  • Asyncio
    • 이름 그대로 비동기 입출력(asyncronous input/output) 라이브러리.
    • 파이썬은 상당히 최근인 버전 3.4에 asyncio 라이브러리가 도입되었고, 버전 3.5에 async와 await 키워드가 도입되어 기존에 비해 상당히 효율적으로 비동기 프로그래밍을 수행할 수 있게 되었다.
    • 그러나 책의 맨 끝에 언급되어 있듯 이것이 파이썬의 첫 시도는 아니었다. 무려 1996년 파이썬 버전 1.5.2에 asyncore가 있었다.
    • 못 쓸 물건이라는 말을 듣던 asyncore에 수천 명의 기여자들이 노고를 보태어 현재의 asyncio가 탄생했고, 상당히 편해졌다고는 하나 코루틴, 블로킹, 콘텍스트 전환, 익스큐터 이런 말들이 익숙하지 않은 나같은 사람에게는 서로 차분히 알아가는 과정이 조금은 반드시 필요하다.

 

  • 솔직히, 책을 잘못 골랐다.
    • 5월 리뷰도서로 가장 원했던 책은 이 책이 아니었다.
    • 그러나 한편으로 현재 진행중인 업무에서 시간이 많이 소모되는 부분이 분명히 있기에 어디선가 주워들은 asyncio를 배워볼 생각에 함께 골랐는데, 내가 소화할 수준의 책은 아니다.
    • 책은 잘못이 없다. 오히려 피상적으로만 알고 지나갈 수 있는 부분을 적절한 예제 코드와 함께 설명해주고 있고, 170 페이지의 1cm가 안 되는 얇은 두께에서 asyncio의 계층적 구조까지 친절하게 설명해주고 있다.
    • 내가 너무 준비가 안 돼있었다. 비동기 방식을 사용해서 웹크롤링이라도 몇 번 해봤으면 훨씬 나았을텐데 기본적인 용어와 개념 탑재가 미비했고 기초를 차근차근 알려주는 것은 이 책의 목적이 아니다 보니 나와 책 사이의 간극이 빠져서야 알게 되는 크레바스처럼 다가왔다.
    • 대체 어떻길래 그러나 궁금하는 분들을 위해 잠시 설명하면, 스레딩 방식의 문제점을 설명한 2장이 끝나고 Asyncio 공략이라는 제목이 붙은 3장이 들어가자마자 저자의 인용문이 등장한다.

"Asyncio는 일곱 가지 기능만 알면 충분하다 (일반적 용도로 가정할 때)" - 유리 셀리바노프

 

    • 그리고 단 6 페이지에 일반적 용도에 대한 설명이 완료된다.
    • 그 뒤에 코루틴, async, await에 대한 상세한 설명이 이어지지만 원리부터 알려주는 친절한 설명에 일반적 용도가 묻힌다. 구글링을 해서 관련 글을 너댓개쯤 읽어보고 유튜브 영상을 총 한시간 남짓 보고 나니 감이 좀 잡혔다. 이 책 정도로 근본부터 설명해주는 자료는 파이콘 발표영상 몇 개를 빼고는 찾지 못했다.
    • 저자의 언급처럼 일반 사용자보다 프레임워크 개발자를 대상으로 설명하는 느낌.
    • 거듭 말하지만, 독자에게 적당한 수준의 경험이 있었다면 피와 살이 될 친절한 설명이다. 

 

  • 여러분이 사용하지 않는 Asyncio 라이브러리 20개
    • 책의 중반부를 시작하는 4장의 제목이다.
    • 짧지 않은 예제 코드와 함께 Asyncio 라이브러리, 그리고 Twisted나 Janus와 같은 다른 비동기 라이브러리를 소개한다.
    • 예제 코드도 뉴스 스크레이핑, 다중 소켓, 어플리케이션 성능 모니터링 등 나와는 거리가 제법 멀지만 사용자에 따라 매우 유용할 수 있는 것들이다.
    • 비동기 프로그래밍 경험이 충분한 이라면 여기서 충분한 과실을 수확할 수 있을 것이라 생각한다.
          
  • 부족한 경험이지만 욕심이 난다.
    • 이 책에 실린 대다수 예시도 그렇고, 인터넷에서 찾은 예시도 그렇고 웹이나 데이터베이스에서 데이터를 가져오는 데 asyncio가 유용해보인다.
    • 주 업무가 크롤링인 분들도 제법 계시는 것으로 알지만, 내게 이런 식의 작업이 유용했던 적은 단 한번이었고 그나마 지시도 받지 않은 일을 만들어 했던 것이었다 - 특정 분야의 8년치 논문을 긁어 분석한 적이 있다.
    • 하지만 이 책의 맨 처음과 끝에 나오는 예시처럼, 컴퓨터에 일을 시키는데도 asyncio가 유용해 보인다.
    • 멀티스레딩, 멀티프로세싱과 함께 사용하면 상당히 효율적으로 일을 할 수 있을 것 같은데 날카롭게 도끼를 가는데 시간을 쓰는 나머지 정작 장작을 팰 시간이 없을까 걱정이다.
    • 일단 한 차례 완독을 하고 예제 코드를 손 끝에서 실행해봤다는데 만족하려고 한다. 
    • 이 기억을 언젠가는 살릴 좋은 기회가 있으리라 믿고, 도끼 날을 바짝 세울 그 날을 기다려본다.

 

※ 한빛미디어 2021 도서 서평단 "나는 리뷰어다"의 일원으로 도서를 제공받아 작성한 리뷰입니다.