Python 비동기 - Celery, Dramatiq
Language/Python

Python 비동기 - Celery, Dramatiq

뉴비뉴 2020. 3. 5.

동기와 비동기에 대해서 알아보도록 하겠습니다.

 

컴퓨터에서 사용하는 용어 중 동기와 비동기가 있다. 이 중 비동기라는 한글은 영어로 Asynchronous라고 영어로 표기한다. Asynchronous는 대표적으로 Ajax라는 기술의 첫번째 약자에서 사용된다. Ajax(Asynchronous Javascript XML)인데, 이 기술의 특징을 보면 비동기의 의미를 쉽게 알 수 있다. 홈페이지에 접속을 했는데, UI나 테이블 또는 이미지는 그대로 있고, 물론 이미지 갱신도 포함하여 페이지 로딩 시 데이터를 별도로 가져오는 기술이다. API 호출 등을 하여 응답을 받고 표시할 수 있다. 현상적으로 몇가지 얘길 해보면 과거 메뉴나 페이지 넘기기 같은 것을 하면 전체 페이지가 리로딩되어야 했다. 그럼으로써 새로 받은 데이터를 표시해줄 수가 있었다. 최근 보면 전체 프레임은 그대로 있고, 내부 데이터만 바뀌는 것을 볼 수가 있다. 이것이 페이지 내에서 다른 데이터는 유지되고, 일부 데이터만 갱신된다. 이는 동기와 비동기의 차이를 설명했다기 보다는 Ajax기술 설명에 가깝다. 하지만 이 기술이 바로 비동기 기술을 이용했다고 보면 된다. 네트워크 상의 동기와 비동기는 이런 차이가 있다.

동기는 응답을 받고 나서 다시 송신을 한다. 비동기는 응답 여부와 관계 없이 다시 전송을 할 수 있다. 두 사람의 대화에서 한사람의 말이 다 끝나고 말을 시작하면 동기이고, 말이 끝났는지 상관 없이 말을 하면 비동기이다.

동기와 비동기는 사용처가 다를 수 있고, 장단점이 나뉜다. 분명하게 응답을 받고 진행을 해야 하는 것은 동기로 해야 하고, 응답 여부 상관 없이 빠르게 진행을 할 수 있는 별도 업무인 경우는 비동기도 가능하다. 화면의 전체를 받는 것과 그 안의 데이터를 받는 것은 별도로 진행이 가능하기 때문에 비동기로 할 수 있다. 데이터에 저장을 하고 읽는 것도 반드시 데이터 동기화가 되어야 하는 같은 곳이 있을 수 있고, 별도 상관이 없는 곳이 있기 때문에 내용에 따라서 효율적으로 처리하면 된다.

 

동기는 응답을 받고 나서 다시 송신을 한다. 비동기는 응답 여부와 관계 없이 다시 전송을 할 수 있다. 두 사람의 대화에서 한사람의 말이 다 끝나고 말을 시작하면 동기이고, 말이 끝났는지 상관 없이 말을 하면 비동기이다.

 

아래 문서에서 발췌하였습니다.

https://wikidocs.net/22372

 

https://spoqa.github.io/2012/05/29/distribute-task-with-celery.html

1. Web Browser 에서 Handler로 생성요청을 보낸다.

2. Handler는 Message Queue에 요청을 추가한다.

    - Message Queue(Redis, Rabbitmq, . . .)

    - MQ 들을 많은 오픈소스들이 존재하고, 기능적으로 조금씩 차이가 있다.

3. MQ(Message Queue, [Redis, RabbitMQ, . . .])

  • Message Queue는 영업사원과 같은 역할을 한다.
  • 레디스(Redis)는 Remote Dictionary Server의 약자로서 ‘키-값’ 구조의 비관계형 데이터를 저장하고 관리하기 위한 NoSQL의 일종이다. 2009년 Salvatore Sanfilippo가 처음 개발했다. 2015년부터 Redis Labs가 지원하고 있다. 모든 데이터를 메모리로 불러와서 처리하는 메모리 기반 DBMS이다. BSD 라이선스를 따른다.
  • Worker(Celery, Dramatiq) 에게 요청을 메시지로 전달해준다.
  • Queue는 어떠한 동작을 하라는 메시지(action)를 보내는 것이 활용도가 가장 높다.
  • INPUT 이 너무 크게되면 속도가 저하된다.

4. Worker(Celery, Dramatiq)

  • 작업을 할 수 있도록 도와주는 Python Framework 
  • 영업사원(MQ)가 계약을 성사시켜 물건을 5천개를 만들라는 계약서를 전달한다.
  • 영업사원은 5천개를 만들 능력이 없기 때문에 Worker가 열심히 물건을 만든다.
  • 영업사원은 Worker가 만들 동안 다른 계약건을 따내기 위해 열심히 뛰어다닐 수 있다.

    

참고

https://spoqa.github.io/2012/05/29/distribute-task-with-celery.html

 

댓글

💲 추천 글