브로커와의 준비 작업

마지막 업데이트: 2022년 4월 25일 | 0개 댓글
  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 카카오스토리 공유하기
[ Windows Binary ]

분산 비동기 작업 처리를 위한 Celery 첫걸음


Celery 는 분산 메시지 전달을 기반으로 동작하는 비동기 작업 큐(Asynchronous Task/Job Queue) 이다.
비동기 작업과 분산 메시지 전달은 어떤 관계가 있을까?

비동기 작업은 즉각적인 결과(응답)를 제공하기 어려운 작업을 수행할 때 활용 될 수 있다.
예를 들어 대용량 작업을 동시에 처리하거나 사용자 요청(HTTP)에 무거운 연산이 포함되는 경우를 들 수 있다.
보통 비동기 작업을 요청하고 나면, 즉시 응답을 받지 않아도 계속 다른 일을 수행할 수 있기 때문에 동시 작업이 가능하다.
하지만 작업마다 소요되는 시간이 다르고, 실행 환경도 달라 중복 작업이 발생하지 않아야 하며 작업이 누락되지 않도록 하는 것도 매우 중요하다.

이렇게 대기중인 작업(Job) 을 관리하고, 작업자(Worker) 에서 제대로 전달되기 위해서는 중간 단계에서 관장하는 시스템이 필요하다.
이 때 등장하는 개념이 브로커(Broker) 이다. 브로커는 작업 메세지를 전달받은 대기열(Queue)에 보관했다가 적절한 작업자(Worker)가 메세지를 가져가서 작업(Job)을 수행하게 된다.
이 과정에서 Celery는 메세지를 전달하는 역할(Publisher)과 메시지를 가져와 작업을 수행하는 역할(Worker)을 담당하게 된다.

Celery는 파이썬으로 작성 되었으며, Django와도 잘 호환된다. 기존에 Django에서 사용하기 위한 별도의 라이브러리 형태(django-celery)로 있었는데 Celery 3.1 부터 Celery를 설치하는 것만으로 Django에서 Celery를 사용할 수 있게 되었다.

왜 Celery를 생각했을까?

Django로 API 서버를 개발하고 운영하면서 사용자 요청에 포함될 필요가 없는 불필요한 과정이나 매우 무거운 쿼리 실행을 포함하는 경우가 있다.
예를 들어 회원 가입 축하 이메일 발송 , 어드민 주문내역 엑셀 다운로드 같은 기능이 해당된다.
이 API 에 포함된 외부 연동이나 무거운 작업들은 Celery Task로 정의해서 브로커(RabbitMQ)와 컨슈머(Celery Worker)를 이용해 비동기로 처리함으로써 사용자에게 가능한 빠른 응답 결과를 제공할 수 있을 것이다.

Celery 사용해보기

Celery 공식 사이트에서 제공하는 첫걸음 과정을 기준으로 실습하는 과정을 설명한다. (원문 보기)

🛠 Celery 환경 구성

Broker 선택하기

Celery 는 메시지로 작업(Task)을 주고 받는 시스템이기 때문에 중간에 브로커(Broker) 역할을 하는 분리된 중계 시스템이 필요하다.
다양한 Broker 들과 호환 되지만 오랜 역사와 안정성을 자랑하는 RabbitMQ를 사용하기로 했다.

RabbitMQ는 AMQP(Advanced message queuing protocol)을 지원하는 메시지 브로커이다.
(RabbitMQ에 대한 자세한 설명은 RabbitMQ 동작 이해하기 참고)

아래 명령어는 로컬 개발환경에서 쉽고 빠르게 RabbitMQ 서버를 실행하기 위해 도커를 사용했다.

Celery 설치

Celery 는 파이썬으로 작성된 패키지이다. 먼저 파이썬 가상 환경을 준비하고, celery 를 설치한다. 파이썬 가상 환경은 보통 Virtualenv 라고 많이 불려지는데 아래 명령어는 파이썬3 에 내장된 venv 모듈을 이용하는 방법을 사용했다.

Celery Worker 와 Task 만들기

가장 먼저 할 일은 Celery 인스턴스를 정의하는 것이다. 보통 이것을 Celery App이라고 부르며, Task를 만들고 Worker를 관리하는 등의 Celery가 수행하는 모든 것에 대한 시작점이 된다.

Celery Class의 첫번째 위치 인자로 모듈의 이름을 브로커와의 준비 작업 전달하고, broker 키워드 인자로 Broker 연결 정보를 넘긴다.

Celery Woker 실행하기

Celery 를 설치하면 자동으로 celery 커맨드를 사용할 수 있게 된다. 그래서 Celery Worker 를 구동하기 위해 $ celery worker 같은 형태로 기본 커맨드를 구성하고, -A 또는 --app= 파라미터로 위에서 정의한 Celery 인스턴스가 포함된 파이썬 모듈을 지정한다.

Task 호출하기

Celery Task 도 결국 파이썬 함수이다. 보통 파이썬 함수를 호출할 때 add() 같이 하면 되지만, Celery Task 로써 호출하려면 add.delay() 같은 형태로 delay() 메소드를 호출한다. (이 메소드는 apply_async() 메소드의 축소 버전이다.)

Task를 호출한 결과로 AsyncResult 인스턴스가 반환된다. 이 객체를 이용해서 Task가 완료 되었는지 결과값을 반환했는지 같은 상태를 확인할 수 있다.
기본적으로 Task 실행 결과값은 저장되지 않는다. 결과를 DB에 저장하거나 RPC 호출을 위해서는 result backend 설정을 추가해야 한다.

작업 결과 보관하기 (Result Backend)

Celery는 Task 작업 결과를 저장하기 위한 여러가지 result backend 를 내장하고 있다.
(예: SQLAlchemy, Django, Memcached, Redis, RPC 등등)

result backend 를 지정하려면 Celery 인스턴스에 backend 키워드 인자를 추가한다.
rpc 를 result backend 로 지정할 경우 작업 결과를 임시 AMQP 메시지로 다시 돌려보내는 방식으로 동작하고, 작업 결과로 반환된 AsyncResult 인스턴스를 유지할 수 있게 된다.

Task의 완료 상태를 확인하기 위해 ready() 메소드를 사용한다.

get() 메소드로 완료된 작업의 결과값을 가져올 수 있다. 만약 호출하는 시점에 작업이 완료되지 않은 경우 완료될때까지 기다리게 된다. (보통 잘 사용하지 않는다고 한다)

Task 실행 중 예외가 발생한 경우 get() 메소드를 통해 예외가 전달될 수 있다. propagate 브로커와의 준비 작업 인자를 False 로 전달할 경우에는 이 예외가 전달되지 않는다.

Task 함수에 task(ignore_result=True) 데코레이터를 적용하면 개별 Task 단위로 result backend 사용을 중지할 수 있다.

Celery 설정을 분리해서 관리하기

Celery를 운영하는데 많은 설정이 필요하지 않지만, Broker 연결은 필수이며, result backend 는 선택 사항이다.
위 예제에서 기본 설정들을 Celery 인스턴스에 직접 전달했지만, 별도 전용 모듈(py)로 따로 정의하는 것이 하드 큰 프로젝트에서는 설정을 제어하기 더 수월하다.
더 많은 설정은 Configuration and defaults 에서 확인할 수 있다.

설정을 전용 모듈로 분리 했다면 app.config_from_object() 메소드를 이용해 설정 모듈을 Celery 인스턴스에 전달 할 수 있다.

브로커와의 준비 작업

각 메시징 시스템마다 장단점이 있겠지만, 하도 Kafka가 좋다하고 도입하길래 어떤 녀석인지 궁금했습니다.

Kafka에 대해 알아보니 빠르고, 안정성있게 설계가 되어있는 것을 확인할 수 있었는데요, 이 글에서 입문자 입장에서 Kafka를 이해하기 위해 나름대로 정리를 해보았습니다.

메시징 시스템에 대한 이해가 없으면 이해가 어려울 수 있으니, Kafka에 대해 알아보기 전에 간단하게 메시징 시스템에 대해 정리한 글을 참고하시길 바랍니다.

1. Kafka 아키텍쳐

Kafka가 어떻게 이루어져 있는지 큰 크림을 그려 아키텍쳐를 먼저 살펴보겠습니다.

그리고 세부적인 구조와 용어들을 이해하면서 특징들을 살펴보도록 하겠습니다.

Kafka의 클러스터를 큰 덩어리로 표현해보았습니다.

큰 집합으로 순서대로 간략하게 정리하면 다음과 같습니다.

  • Zookeeper ( Apache Zookeeper )
    • 본래 Zookeeper의 용도는 클러스터 최신 설정정보 관리, 동기화, 리더 채택 등 클러스터의 서버들이 공유하는 데이터를 관리하기 위해 사용됩니다.
      • 복잡하니까 그냥 Broker에 분산 처리된 메시지 큐의 정보들을 관리한다고만 이해합시다.
      • 즉, Kafka 서버를 가동하려면 Zookeeper를 먼저 가동해줘야 합니다.( 그래서 Kafka 다운로드시 Zookeeper도 함께 제공해줍니다.)
      • Kafka Server를 의미합니다.
      • 한 클러스터 내에서 Kafka server를 여러 대 띄울수 있습니다.
      • 메시지가 생산되고 소비되는 주제입니다.
        • 예를 들어, 카톡 단체방 A, B가 있는데, A 방으로 보낸 메시지가 B 방에 노출되면 안되겠죠? A 방에서 생산된 메시지는 A 방에 존재하는 사람들(구독한 사람)에게만 보여져야 합니다.
        • ex) email topic, sms topic, push topic .
        • Topic 내에서 메시지가 분산되어 저장되는 단위입니다.
          • 한 Topic에 Partition이 3개 있다면, 3개의 Partition에 대해서 메시지가 분산되어 저장이됩니다.
          • 이 때 Queue 방식으로 저장되므로 Partition의 끄트머리에 저장이 되어 Partition 내에서는 순서를 보장해주지만, Partition끼리는 메시지 순서를 보장해주지 않습니다.
            • 그래서 Topic 내에 하나의 Partition이 존재할 때와 여러 개의 Partition이 존재할 때는 차이점이 있습니다. ( 무슨 말인지는.. 뒤에서 다룹니다 ㅎㅎ )
            • Partition의 한 칸을 Log라 합니다.
            • Log는 key, value, timestamp로 구성됩니다.
            • Partition의 각 메시지를 식별할 수 있는 유니크한 값입니다.
              • 메시지를 소비하는 Consumer가 읽을 차례를 의미하므로 Partition마다 별도로 관리됩니다.
              • 0부터 시작하여 1씩 증가합니다.

              Kafka Cluster를 구성하는 요소들에 대해 알아보았습니다.

              다음으로 Partition에 메시지를 어떻게 기록하고 사용하는지에 대해 알아보겠습니다.

              2. Producer와 Consumer Group

              • Producer
                • Producer는 정해진 Topic으로 메시지를 기록합니다.
                • Partition이 여러 개 있을 경우, 기록 될 Partition의 선택은 기본적으로 Round-Robin 방식을 따릅니다.
                  • Partition이 여러 개 있으면 병렬 처리라는 이점이 있지만, Partition 개수는 주의해서 잘 설정해줘야 합니다.
                  • 하지만 실제 메시지가 사용되는 순서는 순서가 보장되지 않는데요, 그 이유는 Consumer의 동작 방식을 이해해야 합니다.
                  • Consumer Group은 하나의 Topic을 담당합니다.
                    • 즉, Topic은 여러 개의 Consumer Group이 접근할 수 있지만, 하나의 Consumer Group은 하나의 Topic에만 접근할 수 있습니다.
                      • 1) Partition 접근하는 Consumer 관리
                        • Consumer Group 내에서 Consumer 인스턴스들은 Topic내에 Partition에서 다음에 소비할 offset이 어디인지 공유하면서 메시지를 소비합니다. 그렇기 때문에 다음에 소비할 offset을 잘 관리할 수 있습니다.
                              • 예를 들어 Consumer Group이 없을 경우, 하나의 Partition에 2개의 Consumer가 동시에 접근한다면 어떤 Consumer가 몇 번의 offset을 소비해야 하는지 알 수 없게 됩니다.
                              • 즉, Consumer 브로커와의 준비 작업 Group을 통해 하나의 Partition에는 하나의 Consumer 인스턴스만 접근할 수 있도록 관리합니다.
                              • Partition에는 하나의 Consumer 인스턴스만 접근할 수 있기 때문에, 특정 Consumer 인스턴스에 에러가 발생했을 시 다른 Consumer 인스턴스는 에러가 발생한 Consumer 인스턴스가 소비하던 Partition을 소비하게 됩니다.
                                • 즉, Consumer가 다운될 때를 대비해 Consumer Group의 Consumer 인스턴스들은 offset을 공유하고 있으며, 이를 통해 고가용성이 확보됩니다.

                                개인적으로는 Kafka를 이해할 때 Consumer Group을 이해하는것이 중요하다고 생각됩니다.

                                이에 대한 좋은 글이 있으니 참고하시길 바랍니다. ( 링크 )

                                2) Partition과 Consumer의 개수

                                Partition은 하나의 Consumer만 접근이 가능합니다.

                                반대로 Consumer는 여러 개의 Partition을 소비할 수 있죠.

                                대량의 메시지가 Kafka에 쓰여진다고 가정해보겠습니다.

                                (1) Partition 1개 / Consumer 인스턴스 1

                                메시지가 대량으로 막 생산되고 있는데, 처리할 수 있는 Consumer가 1개 밖에 없네요.

                                그래서 Consumer를 늘리기로 했습니다.

                                (2) Partition 1개 / Consumer 인스턴스 4

                                Consumer를 4개로 늘렸지만, Consumer Group에서 Partition은 하나의 Consumer 밖에 접근을 못하는 구조입니다.

                                즉, Consumer를 늘리나 마나인 상황이 되었네요.

                                그래서 이번에는 Partition을 늘려보겠습니다.

                                (3) Partition 4개 / Consumer 인스턴스 4

                                Consumer는 하나의 Partition에 접근할 수 있으므로, Partition과 Consumer는 1:1 구성이 되었습니다.

                                (4) Partition 4개 / Consumer 인스턴스 3

                                잘 운영이 되다가, 갑자기 Consumer 하나가 죽어버렸습니다.

                                Consumer Group에서 offset이 공유되고 있으므로 Consumer가 하나 죽더라도 다른 Consumer가 해당 Partition에 접근하면 되니까요.

                                (5) Partition 3개 / Consumer 인스턴스 3

                                메시지가 잘 처리되고 있고, 상황을 보니 Partition을 3개로 줄여도 될 것 같습니다.

                                그래서 Partition을 줄이려고 했지만, Partition은 한 번 늘리면 줄일수가 없습니다.

                                위 상황의 결론을 말씀드리면, Partition의 개수 >= Consumer 인스턴스의 갯수를 유지하는 것이 좋습니다.

                                ( Consumer > Partition은 불가능합니다. )

                                하나의 Partition에 하나의 Consumer가 담당하는 것이 좋지만 딱 맞출수는 없으므로, Consumer 수가 모자라도 상관은 없습니다.

                                주의할 점은 한 번 Partition을 늘리면 다시 줄일 수 없기 때문에, 처리량을 잘 고려하여 Partition과 Consumer의 개수를 선택해야 할 것입니다.

                                3. Consumer Design

                                Kafka와 마찬가지로 대표적인 메시징 시스템인 RabbitMQ, ActiveMQ 역시 분산 큐 시스템(Distributed Queue System)입니다.

                                분산이니까 성능이 다 빠를것 같은데.. 왜 유독 Kafka가 빠르다고 할까요?

                                성능이 좋으려면 소비자가 최대의 효율을 내는 것을 목표로 해야합니다.

                                분산처리가 된다한들, 소비자가 메시지를 처리못하면 전체적인 성능이 느려지겠죠?

                                즉, 메시지를 소비하는 방식에 대한 차이가 성능의 차이를 보이는 것 같습니다.

                                Kafka는 Single Consumer가 아닌, Multi Consumer를 염두에 두고 설계되었기 때문에 Consumer를 잘 살펴볼 필요가 있습니다.

                                다음은 RabbitMQ와 Kafka의 Consumer Design을 비교한 것입니다.

                                • RabbitMQ
                                  • Message Broker가 Consumer에게 메시지를 push하는 방식
                                    • Broker는 Consumer의 처리여부에 관계없이 push를 하므로, 메시지 소비 속도보다 생산 속도가 빠를 경우 Consumer에 부하를 주게됩니다.
                                    • RabbitMQ는 DRAM을 사용하므로 buffer를 사용하지만, DRAM을 다 사용하면 disk에 저장합니다. 따라서 batch 같이 큰 작업에서는 disk로 메시지를 읽어올 경우 지연이 발생합니다.
                                    • Consumer가 Broker로부터 메시지를 pull하는 방식
                                      • Consumer가 처리할 수 있을 때 메시지를 가져오므로 자원을 효율적으로 사용합니다.
                                      • Kafka는 애초에 메시지를 disk에 저장하고, 이미 처리한 과거의 offset으로 자유롭게 움직일 수 있으므로 batch 작업에서 자원의 낭비라던지 지연이 발생하지 않습니다.
                                        • 메시지를 쌓아두었다가 처리하는 batch Consumer 구현도 가능합니다.

                                        항상 trade off가 있듯이, pull 방식에도 단점은 있습니다.

                                        데이터가 없음에도 정기적인 polling으로 인해 자원을 낭비하는 문제인데요, 이러한 단점을 보완하기 위해 실제 데이터가 도착할 때까지 long poll 대기를 할 수 있는 parameter를 지원합니다.

                                        자세한 정보는 공식문서를 참고하시면 좋습니다.

                                        4. Replication

                                        Topic을 생성할 때, --replication-factor 옵션을 부여하면 복제본(replication)을 생성할 수 있습니다.

                                        Replication이란 Zookeeper가 leader가 되는 Partition을 정하고, Partition을 각 broker마다 복제를 하는 것을 말합니다.

                                        이 때 leader를 복제하는 partition을 follower라 합니다.

                                        • leader
                                          • 메시지를 생산하고 소비하는 작업은 모두 leader broker에서 이뤄집니다.
                                          • 나머지 follower들은 leader를 복제하기만 합니다.

                                          이는 고가용성을 위한것이며, 혹시 leader가 죽었을 경우 follower 중 하나가 leader가 되어야 하기 때문에, follower는 leader와 싱크를 맞추고 있는 것입니다. ( In-Sync Replica, ISR )

                                          위의 그림은 3대의 Broker 브로커와의 준비 작업 Server에 대하여, topic-1에 4개의 Partition이 존재할 때, --replication-factor=2 로 설정한 것입니다.

                                          4개의 Partition이 factor 설정 값만큼 Broker에 분배된 것을 확인할 수 있습니다.

                                          ( Zookeeper가 Partition을 골고루 분배합니다. )

                                          예를 들어, Partition1에 메시지를 쓰는 상황일 때, leader partition이 존재하는 Broker2에서 메시지가 생산됩니다.

                                          브로커와의 준비 작업

                                          사양
                                          OS : Windows 10 x64

                                          MQTT는 ISO 표준 발행-구독 기반의 메시징 프로토콜이다. TCP/IP 프로토콜 위에서 동작한다. "작은 코드 공간"이 필요하거나 네트워크 대역폭이 제한되는 원격 위치와의 연결을 위해 설계되어 있다. 발행-구독 메시징 패턴은 메시지 브로커가 필요하다.

                                          MQTT 사용을 위해 대표적인 메시지 브로커인 모스키토(Mosquitto) 브로커를 설치 합니다.

                                          Source mosquitto-2.0.8.tar.gz (319kB) (GPG signature) Git source code repository (github.com) Older downloads are available at https://mosquitto.org/files/ Binary Installation The binary packages li

                                          [ Windows Binary ]

                                          이전 버전들에서는 OpenSSL 등 의존성 프로그램들을 따로 설치해야 했지만 지금은 모스키토 바이너리만 설치하면 작동 한다.

                                          Mosquitto 실행 테스트

                                          모스키토 설치 경로에서 명령 창을 열고 아래 명령을 실행 합니다.
                                          "NAME" 따옴표 안에 이름으로 토픽을 구독(Subscribe)하겠다는 명령어 입니다.

                                          새로운 명령창을 열어 해당 토픽에 메시지를 발행(Publish) 합니다.

                                          구독하고 있는 명령창에 HELLO가 표시되면 정상적으로 메시지가 전송된 것으로 보시면 됩니다.

                                          모스키토 첫 설치 후 서비스 시작 문제

                                          설치가 완료되면 모스키토가 윈도우 서비스로 등록이 되지만 실행 상태는 아니기 때문에 작업 관리자를 통하여 서비스를 실행 시켜 줘야 한다.

                                          MQTT Explorer 활용한 메시지 통신 Visualize

                                          MQTT는 HTTP, TCP등의 통신과 같이 클라이언트-서버 구조로 이루어지는 것이 아닌, Broker, Publisher, Subscriber 구조로 이루어집니다. MQTT로 통신을 하기 위해선 브로커가 필요 합니다. 여러가지 브로커가

                                          트럭 운송 브로커 란 무엇입니까?

                                          트럭 운송 중개인으로 일하는 데 관심이있는 사람은 작업 중에 여러 기능을 수행 할 준비가되어 있어야합니다. 운송 업체 사업에 대한 심층적 인 지식이 있어야 할뿐만 아니라 잠재적화물 중개인은 배송 업체가 가장 우려하는 문제 유형에 대해서도 잘 알고 있어야합니다. 이 지식 기반을 통해 발송물을 올바른 운송 업체와 일치시킬 수 있습니다.

                                          화물 중개인 사업에 종사하는 사람들이 고객에게 서비스를 판매하고 있습니다. 배송 업체가화물을 원하는 목적지로 신속하고 최상의 속도로 운송 할 수있는화물 회사를 찾으려고 노력하는 대신 바쁜 회사는화물 중개 경험이있는 사람에게 도움을 요청합니다. 트럭 운송 중개인은이 역할을 수행하기 위해 판매 또는 운송 사업에서 사전 작업에 대한 배경 지식을 가지고있을 것입니다.

                                          예비 고객이 중개인에게 지원을 요청하면 고객이 원하는 것을 매우주의 깊게들을 것입니다. 트럭 운송 브로커는 지리에 대한 지식이 풍부하고 한 위치에서 다른 위치로 상품을 배송하는 데 걸리는 시간이 길기 때문에 고객의 원자재 또는 완제품을 목적지로 빠르고 효율적으로 가져 오는 솔루션을 추천 할 수 있습니다. 트럭 중개인의 업무 중 하나는 운송 프로세스 및 물품을 한 장소에서 다른 장소로 옮길 수있는 장비에 매우 익숙해야합니다.

                                          고객이 운송을 담당하기 위해 트럭 운송 브로커를 고용하면 브로커는 해당 작업에 적합한 운송 업체를 브로커와의 준비 작업 선택해야합니다. 서비스를 제공하는 많은 운송 회사가 있으며, 트럭 중개인은 운송 회사와 원하는 시간 내에 운송 할 수있는 리소스를 보유하고 있습니다. 잠재적 인 일치가 발견되면 브로커는 운송 업체의 안전 기록이 양호한 지 확인하기 위해 조사 작업을 수행해야합니다.

                                          운송 업체는 트럭으로 배송하기 전에 보험 및 선하 증권 또는 세관 신고서와 같은 기타 필요한 서류를 준비해야합니다. 또한 운송 업체와 운송 요금을 협상합니다. 중개인은 운송 회사의 운전자가화물을 수령하도록 준비하며 이와 관련된 송장 또는 컨테이너 번호를 알려줍니다. 배송이 목적지에 도착하면, 운전자는 트럭화물 중개인에게 연락하여 주문이 제대로 완료되었는지 확인합니다. 이 시점에서 브로커는 자신의 책임을 완수했으며 렌더링 된 서비스에 대해 고객에게 청구 할 수 있습니다.

                                          카카오엔터, 작품성-대중성 갖춘 콘텐츠로 글로벌 시장 '정조준'

                                          칸 국제영화제 초청작부터 넷플릭스 시리즈 등 콘텐츠 경쟁력 확보 26일 영화사 집 ‘브로커’, 19일 사나이픽처스 ‘헌트’ 월드 프리미어 진행

                                          여기는 칸라이언즈

                                          시장경제 포럼

                                          카카오엔터테인먼트는 직접 기획, 제작한 작품들은 물론 산하 자회사들과 함께한 작품들이 전세계 엔터테인먼트 콘텐츠업계의 이목을 집중시키며 글로벌 메이저 스튜디오로서 영향력을 확장하고 있다.

                                          올해 칸 국제영화제에 초청을 받은 영화사 집의 ‘브로커’를 현지 시각 기준으로 26일, 사나이픽처스의 ‘헌트’를 19일에 월드 프리미어를 진행하는데 이어, 오는 23일 첫 공개되는 카카오TV 오리지널 ‘결혼백서’를 넷플릭스를 통해 전세계 시청자들에 선보일 예정이다.

                                          앞서 BH엔터테인먼트가 콘텐츠지음과 공동제작한 ‘종이의 집: 공동경제구역’과 영화사 월광이 제작을 맡은 ‘수리남’도 올해 넷플릭스 시리즈로 전세계 동시 공개를 밝히며 주목을 받은 바 있다.

                                          올봄 ‘사내맞선’으로 전세계를 들썩이게 했던 카카오엔터테인먼트는 올해 다양한 작품들을 잇따라 선보임으로써 글로벌 K콘텐츠의 열풍을 이어가며, 메이저 스튜디오로 확고하게 자리매김하겠다는 목표다.

                                          본사 내부의 조직을 갖추고 직접 작품의 기획, 제작에 나서는 것은 물론, 독창적 크리에이티브와 제작 노하우를 갖춘 산하 제작사들과 작품을 제작하며 콘텐츠IP 포트폴리오를 다각화함으로써 탄탄한 라인업을 구축하고 있다.

                                          콘텐츠 비즈니스 역량을 갖춘 카카오엔터테인먼트 본사가 작품 기획개발 및 투자, 플랫폼 등 글로벌 비즈니스 네트워크, 법무와 마케팅 등을 맡아 지원하고 이를 바탕으로 자회사는 탁월한 크리에이티브와 제작 역량에 더욱 집중하는 공고한 스튜디오 시스템을 통해 콘텐츠 IP 경쟁력을 강화하는 시너지를 창출하고 있다는 설명이다.

                                          동시에 각자의 특화된 경쟁력을 바탕으로 제작 자회사간의 공동 제작 프로젝트도 적극적으로 추진하는 등 글로벌향 슈퍼IP를 기획, 개발하는데 역량을 집중, 글로벌 엔터테인먼트 산업내 영향력을 확대하고 있다.

                                          영화사 집의 ‘브로커’와 사나이픽처스의 ‘헌트’가 17일 개막하는 제 75회 칸 국제영화제에 초청받으며, 카카오엔터테인먼트의 글로벌 스튜디오를 향한 행보에 힘을 더했다. 제작 소식만으로도 이목을 집중시켰던 두 작품은 올해 칸 국제영화제 초청작에 이름을 올리며 전세계 영화팬들은 물론 엔터산업 관계자들의 높은 관심을 받고 있다.

                                          영화 '브로커'는 베이비박스를 둘러싸고 관계를 맺게 된 이들의 예기치 못한 특별한 여정을 그린 작품이다. 고레에다 히로카즈 감독의 첫 한국 영화 연출작으로, 송강호, 강동원, 배두나, 이지은, 이주영 등 명배우들의 연기 호흡에 전세계 영화팬들의 관심이 집중되고 있다.

                                          브로커를 제작한 영화사 집은, 이유진 대표의 탁월한 기획 제작 역량과 탄탄한 업계 네트워크를 바탕으로 2007년 개봉한 ‘그놈 목소리’부터 ‘전우치’, ‘내 아내의 모든 것’, ‘검은 사제들’, ‘마스터’, ‘국가 부도의 날’, ‘가장 보통의 연애’ 등 총 16편의 다양한 히트작을 선보이며 확고하게 입지를 다져왔다.

                                          브로커 시나리오 단계부터 함께하며 프로젝트를 추진해 온 영화사집 이유진 대표는 “브로커로 칸 국제영화제를 찾게되어 영광스럽다. 감독님과 배우들, 스탭들이 언어는 다르지만 영화라는 공통어로 서로 소통하며 정성들여 만든 작품인만큼, 칸 영화제를 시작으로 전세계 영화 팬들과 즐겁게 소통할 수 있는 영화가 되었으면 하는 바램이다”라고 소감을 전했다.

                                          사나이픽처스가 제작한 ‘헌트’는 비경쟁부문인 미드나잇 스크리닝에 초청돼 현지시각 기준으로 오는 19일 전세계에 첫 선을 보인다. 헌트를 제작한 사나이픽처스는 '신세계' '무뢰한' '아수라' '공작' '돈' 등 느와르 장르에 탁월한 노하우를 바탕으로 대중성과 작품성을 모두 인정받고 있는 굴지의 영화 제작사로 지난 2015년 ‘무뢰한’(주목할만한 시선), 2018년 ‘공작’(미드나잇 스크리닝) 이후 벌써 세번째 칸 국제영화제에 초청을 받았다. 사나이픽처스의 진하고 강렬한 첩보 액션으로 프랑스 칸의 미드나잇을 더욱 뜨겁게 달굴 예정이다.

                                          배우 이정재의 감독 데뷔작으로 관심을 한 몸에 받고 있는 '헌트'는 조직 내 숨어든 스파이를 색출하기 위해 서로를 의심하는 안기부 요원 ‘박평호’와 ‘김정도'가 '대한민국 1호 암살 작전'이라는 거대한 사건과 직면하며 펼쳐지는 첩보 액션 드라마다. 이정재는 '헌트'의 연출은 물론 각본 작업에도 직접 참여하고, 주연 ‘박평호’ 역을 맡아 깊이 있는 연기까지 선보이는 등 1인 3역의 역할을 해냈다. ‘헌트’의 작품 초청에 대해 미국 연예매체 버라이어티, 프랑스 유력 매체 TF1 등 해외 유력 언론들도 극찬을 쏟아내며 기대를 드러내는 등 배우 이정재의 첫 연출작에 세계의 시선이 쏠리고 있다.

                                          사나이픽처스 한재덕 대표는 “'헌트'는 각본 작업부터 연출, 연기까지 1인 3역을 소화한 감독 이정재의 첫 연출작이자 정우성, 이정재 배우가 23년 만에 스크린에서 조우해 그 의미가 더 깊다. 화려한 액션과 세련된 미장센이 돋보이는 작품으로 칸에서 전세계 팬들을 만나게 되어 설레고 떨린다. 현장에서도 좋은 반응이 있길 기대한다"고 소감을 밝혔다.

                                          오는 23일 오후 7시 첫 공개되는 카카오TV 오리지널 ‘결혼백서’는 카카오TV 공개 2시간 후인 오후 9시에 넷플릭스를 통해 글로벌 시청자들을 만난다. '결혼백서’는 30대 커플의 결혼 준비 과정에서 펼쳐지는 좌충우돌 현실 공감 로맨스. 대한민국을 살아가고 있는 예비부부들이 한번쯤은 고민했을 법한 다양한 에피소드들을 통해 누구나 공감할 수 있는 밀접한 주제로 남녀노소를 불문하고 시청자들과 깊게 공감할 예정이다. 카카오엔터테인먼트의 송제영 감독이 연출을 맡아 30분 내외의 미드폼으로 제작, 카카오TV가 주도하고 있는 미드폼 드라마의 인기를 또 한 번 이어나갈 전망이다.

                                          특히, 최근 '사내맞선' '스물다섯 스물하나' ‘기상청 사람들’ 브로커와의 준비 작업 등 K로맨스들이 글로벌 플랫폼을 타고 전세계에서 높은 인기를 얻은만큼 ‘결혼백서’가 그 바통을 이어받아 다시 한번 K로맨스 열풍을 이어갈 것으로 기대를 모으고 있다.

                                          영화사 월광의 첫 드라마 시리즈인 ‘수리남’과 BH엔터테인먼트의 ‘종이의 집: 공동경제구역’은 넷플릭스를 통해 전세계에 공개될 예정이다. ‘수리남’은 남미의 한 국가 수리남을 장악한 한인 마약왕을 검거하기 위한 국정원의 비밀작전에 협조할 수밖에 없는 민간인 사업가의 목숨을 건 여정을 담은 넷플릭스 시리즈다. 영화 ‘공작’ ‘범죄와의 전쟁: 나쁜놈들 전성시대’를 연출한 윤종빈 감독의 첫번째 드라마 시리즈로, 하정우, 황정민, 박해수, 조우진, 유연석, 장첸 등 국내외를 대표하는 화려한 캐스팅으로 관심을 받고 있다.

                                          BH엔터테인먼트가 콘텐츠지음과 공동 제작한 ‘종이의 집: 공동경제구역’은 통일을 앞둔 브로커와의 준비 작업 한반도를 배경으로 천재적 전략가와 각기 다른 개성 및 능력을 지닌 강도들이 기상천외한 변수에 맞서며 벌이는 사상 초유의 인질 강도극을 그린 넷플릭스 시리즈. 스페인어 넷플릭스 시리즈 '종이의 집'의 배경을 한국으로 옮긴 작품으로 한국만의 개성을 살려 오는 6월 24일 파트1을 첫 공개할 예정이다. 유지태, 김윤진, 박해수, 전종서, 이원종, 박명훈, 김성오, 김지훈, 장윤주 등 화려한 캐스팅을 비롯해, 드라마 '손 더 게스트', '보이스', '블랙', '루카: 브로커와의 준비 작업 더 비기닝' 등을 연출한 김홍선 감독이 연출을 맡았다는 소식이 전해져 더욱 기대를 모으고 있다.

                                          카카오엔터테인먼트의 드라마, 영화 제작 사업을 총괄하고 있는 장세정 영상콘텐츠사업본부장은 “크리에이티브, 작품 기획개발, 제작, 마케팅과 법무 등 콘텐츠 비즈니스에 이르기까지 본사와 자회사의 역량이 강결합해 시너지를 창출할 수 있는 스튜디오 시스템을 구축하고, 카카오엔터테인먼트의 콘텐츠 IP의 글로벌 경쟁력을 더욱 강화하고 있다”며 “올해 뉴미디어, TV, 스크린 등 다양한 플랫폼에서 완성도 높은 웰메이드 브로커와의 준비 작업 브로커와의 준비 작업 작품을 선보이며 글로벌 메이저 스튜디오로서 확고히 자리매김할 계획”이라고 밝혔다.

                                          보도자료 및 기사제보 [email protected]
                                          [자유민주·시장경제의 파수꾼 – 뉴데일리 newdaily.co.kr]
                                          Copyrights ⓒ 2005 뉴데일리뉴스 - 무단전재, 재배포 금지


0 개 댓글

답장을 남겨주세요