‘편리한’ 파이썬과 ‘빠른’ 러스트를 결합하는 법 - CIO Korea

생성일
Jul 7, 2022 12:09 PM
언어
Python
Rust
분야
notion imagenotion image
두 언어의 라이브러리 덕분에 파이썬(Python)의 ‘편리함’과 러스트(Rust)의 ‘속도’를 결합할 수 있다. PyO3 프로젝트와 C파이썬(cpython) 크레이트를 시작해보자.
언뜻 보기에 파이썬과 러스트는 언어 스펙트럼의 양끝을 차지한다. 런타임으로 설명되는 파이썬은 개발자에게 유연하고 편리한 프로그래밍 환경을 제공하지만 실행 성능을 대가로 치러야 한다. 러스트는 속도와 메모리 안정성을 제공하지만 메모리 작업을 처리하는 새 패러다임을 배워야 한다.
이론적으로 이 언어들은 경쟁해서는 안 된다. 협력해야 한다. 그리고 실제로 가능한 일이다. 러스트는 파이썬의 사용 편의성이란 이점을, 파이썬은 러스트의 속도와 안정성이라는 이점을 얻을 수 있다.
단, 파이썬과 함께 러스트를 반대로 러스트와 함께 파이썬을 사용하여 최적의 결과를 얻으려면 최소한 두 언어를 어느 정도 알아야 한다. 또 각 접근법의 옵션이 크게 다르기 때문에 둘 중 어느 것이 기본 언어인지 결정해야 한다.
notion imagenotion image
ⓒMatthew Lancaster (CC0)
PyO3로 파이썬에서 러스트 호출하기 만약 파이썬이 기본 언어라면 러스트와의 통합은 개념적으로 파이썬을 C와 통합하는 것과 동일한 방식으로 이뤄진다. C로 작성된 파이썬의 기본 구현은 C로 작성된 확장 또는 C-호환 ABI를 사용하는 확장을 쓴다. 동일한 API를 활용하는 러스트로 작성된 확장도 작동하지만 자동은 아니다. 파이썬 C API에 러스트 함수 바인딩을 제공하도록 설계된 크레이트를 사용해야 한다.
파이썬에서 러스트 바인딩 만들기 파이썬에서 러스트 바인딩을 생성하기 위해 가장 널리 알려진 프로젝트는 PyO3다. 러스트에서 파이썬 모듈을 작성하거나 파이썬 런타임을 러스트 바이너리에 포함하는 데 사용할 수 있다.
PyO3는 또 다른 프로젝트 ‘마트린(Maturin)’을 활용한다. 이는 파이썬 패키징 및 바인딩으로 러스트 크레이트를 작성하는 도구다. 파이썬 가상 환경에 설치하면 마트린을 명령줄에서 사용하여 파이썬 바인딩이 활성화된 새 러스트 프로젝트를 초기화할 수 있다. 개발자는 러스트 코드에서 지시문을 사용하여 파이썬에 노출시킬 러스트 함수 그리고 러스트 프로젝트 전체를 파이썬에 가져올 수 있는 모듈로 노출하는 방법을 표시할 수 있다.
러스트 및 파이썬 타입 매핑 PyO3의 유용한 기능 중 하나는 러스트와 파이썬 타입 간의 매핑이다. 러스트로 작성된 함수는 네이티브 파이썬 타입 또는 파이썬 타입에서 변환된 러스트 타입을 모두 사용할 수 있다. 예를 들면 파이썬의 bytearray 또는 bytes 객체는 러스트의 Vec<u8>에 매핑될 수 있고, 파이썬의 str은 러스트 String으로 렌더링될 수 있다.
파이썬에서 러스트로 변환하면 호출당 비용이 발생하지만 러스트 코드에서 파이썬 타입을 전적으로 사용할 필요가 없다. 사이썬에서 이는 C 타입으로의 변환과 비슷하다. 각 변환에는 비용이 들지만 만약 목표가 C에서의 수치 처리라면 상당한 속도 향상을 가져온다.
C파이썬 크레이트를 사용하여 러스트에서 파이썬 호출하기 기본적으로 러스트 개발자이지만 러스트 애플리케이션 내에서 파이썬을 사용하고 싶다면 C파이썬 크레이트가 간단한 방법이다. C파이썬 크레이트는 가장 일반적인 파이썬 런타임인 C파이썬 인터프리터에 러스트 바인딩을 제공한다(C로 작성돼 명명된다).
러스트 프로그램은 C파이썬 인터프리터를 호출하여 작업할 수 있기 때문에 러스트에서 파이썬 객체를 만들고, 조작하며, 라이브러리를 호출할 수 있다. 이곳에서 라이썬 런타임을 초기화하고, 모듈을 가져오며, 파이썬 객체를 만들고, 메소드 호출을 실행하는 방법을 보여주는 예시를 확인할 수 있다.
C파이썬 크레이트에는 몇 가지 유용한 매크로도 있다. 예를 들어 py_fn! 매크로는 파이썬에서 호출할 수 있도록 러스트 함수를 래핑한다. py_class! 매크로를 사용하면 러스트 클래스를 파이썬 클래스 객체로 생성할 수 있다.
파이썬보다 러스트에 더 익숙하다면 이에 뛰어들기 전에 파이썬 C API와 다양한 파이썬 객체 유형에 최소한 어느 정도 알아 두는 게 좋다.
성능 관련 팁 C파이썬과 PyO3 모두에서 중요한 주의사항은 두 언어 간에 데이터를 주고받는 횟수를 항상 최소화해야 한다는 점이다. 파이썬에서 러스트로 또는 그 반대로 호출할 때마다 약간의 오버헤드가 발생한다. 해당 오버헤드가 러스트에서 수행하는 작업보다 크면 성능이 향상되지 않는다.
예를 들어 객체 콜렉션에서 루프를 하는 경우 객체를 러스트로 보내고 루프를 수행한다. 이는 파이썬 측에서 루프를 실행하고 루프를 반복할 때마다 러스트 코드를 호출하는 것보다 더 효율적이다.
한편 이 가이드라인은 파이썬과 사이썬 모듈처럼 파이썬 C ABI를 사용하는 다른 코드 간의 통합에도 일반적으로 적용될 수 있다. ciokr@idg.co.kr

Sponsored

기업의 고객 경험(Customer eXperience, CX) 투자 경향이 계속 꾸준한 증가세를 보이고 있다. 어도비의 ‘2021년 CIO 인식조사 보고서(CIO Perspectives Survey 2021)’에 따르면 응답 기업의 33%는 고객 경험 투자가 증가했다고 답했다. 투자가 줄었다고 답한 기업은 8%에 불과했다. 미국에서는 고객 경험 관련 예산 증가를 경험한 CXO가 훨씬 많아, 예산이 증가했다고 답한 CIO가 40%에 이르렀다. 물론 CIO는 예산이 늘어난 만큼 그에 걸맞은 결과를 내야 한다. 12명의 전문가에게 기업의 고객 경험을 계속 개선할 때 필요한 조언을 요청했다. ⓒ Getty Images Bank 부서가 여러 분야를 제대로 넘나들게 하라 유저스냅 설문 조사에서 기업은 고객 경험 업무에 다른 여러 부서를 연결하는 경우가 많다는 결과가 나왔다. 특히 개발 부서는 고객 경험 활동에서 흔히 볼 수 있는 8가지 관련 부서 중 하나다. 일반 관리 및 지원 기능 외에 고객 경험 마케팅, 영업, 운영 및 제품 부서도 뒤섞여 있다. 보스턴 컨설팅 그룹의 전무이 벤저민 레흐버그는 이렇듯 많은 팀을 여러 분야에 걸친 메가 부서로 합쳐야 한다며, IT 부서가 고객 경험을 주도해서도 안 되지만 고객 경험을 만드는 과정에서 배제되어서도 안 된다고 덧붙였다. 레흐버그는 CIO가 데브섹옵스(DevSecOps) 프레임워크와 애자일 방법론을 사용하여 여러 분야를 아우르는 팀을 구성할 것을 조언했다. 또 CIO가 다른 부서 리더를 대상으로 교육을 진행해 팀 안에 구심점을 만들어야 한다고 강조했다. 레흐버그는 “CIO는 이 작업을 수행하는 데 있어 매우 중요한 인물이지만 홀로 추진해서는 안 된다. 조직 전체가 이것에 협조하고 더 나은 고객 경험을 촉진하는 데 일조해야 한다”라고 말했다. 단순한 고객 대면 기술이 아닌 올바른 백엔드 인프라에 투자하라 고객 대면 인터페이스, 기능 및 서비스는 완전히 통합된 최신 백오피스 시스템에 좌우되는 요소다. IT 컨설팅업체인 코그니전트의 컨설팅 매니저 메간 실바는 “웹사이트와 챗봇만 만들면 되는 것이 아니고, 필요한 모든 데이터와 통합된 챗봇인지가 중요하다”라고 말했다. 실바는 많은 기업이 CRM 시스템 현대화에 대규모로 투자하고 있다고 진단했다. 대표적인 예로 헬스케어 산업을 꼽는다. 많은 의료기관이 팬데믹에 대응해 원격의료를 활성화하기 위해 서둘렀지만, 환자가 세션에 로그인하는 동안 후속 진료 예약을 하거나 서비스 비용을 지불하는 데 필요한 기능이 없는 경우가 많았다. 실바는 다른 업계도 비슷한 상태라고 지적하면서 “‘예약 링크,’ ‘비용 지불 클릭’ 같은 메뉴가 있지만, 여전히 투박한 수준에 머무른다. 고객 경험이 준비되지 않은 기업들이 있다. 30개 넘는 도구가 있어도 통합되지 않았다면 의미가 없다”라고 말했다. 올바른 기술을 습득하라 부쉬홀츠는 여러 분야를 아우르는 부서는 적절한 전문 지식도 갖춰야 한다고 강조했다. 그는 자신의 경험을 바탕으로 “개발자의 경우 코딩은 잘 하지만 사용자 인터페이스 구축에는 강하지 않은 경우가 많다”라고 말했다. 또한 “고객 경험을 위한 설계와 사용자 설계는 실제 훈련을 받아야 하는 기술이다. 기술자라면 천부적으로 관련 기술을 보유하고 있을 것이라고 가정해서는 안 된다. 동료 직원을 위해 설계하는 전문 지식은 기업 내에 없는 경우가 많다는 점을 인식해야 한다”라고 말했다. 고객 경험을 잘 만드는 조직은 이 점을 이해하고 있으며, 결과적으로 전문가를 정규 직원으로 두거나 일부 기술자에게 경험 설계 기술을 교육하여 필요할 경우 고객 경험 프로그램을 지원한다. 레흐버그는 또한, 개발자의 마음가짐(특정 비즈니스 요구사항에서 작업)에서 엔지니어 마음가짐(기술자가 코드로 문제 해결 방법을 고안)으로 직원을 전환해야 한다며, CIO는 팀이 올바른 기술을 배양하도록 해야 한다고 강조한다. 또 “개발자의 일하는 방식은 다르다. 교육과 훈련도 달라야 한다”라고 덧붙였다. 이외 고객 경험을 정비하고 제고할 때 필요한 8가지 조언은 다음 콘텐츠에서 더욱 상세히 확인할 수 있다.
ⓒ Getty Images Bank 지난 2년간 금융 기업은 재택근무 인력을 관리하면서 서비스 운영을 유지하는 데 주력했다. 코로나19로 인한 서비스의 제약을 최소화하는 노력도 병행했다. 일상 회복을 위한 포스트 팬데믹 시기에 앞서 금융 기업은 새롭게 고객에게 초점을 맞추고, 고객이 금융 서비스 기업과 이상적인 관계를 구축할 수 있도록 업무를 체계화하고 분배하는 데 집중할 것으로 예상된다. ‘디자인 씽킹’을 통한 고객 니즈 파악 고객 서비스 개선이 중요한 이유는 금융 기업이 그저 ‘옳은 일’을 지향하기 때문만이 아니라, 고객이 만족해야 경쟁사로 이동할 가능성이 더 적고 추가 제품과 서비스를 구매할 가능성이 더 크기 때문이다. 친구나 가족, 동료에게 브랜드를 추천하는 경향도 더 높다. 여러 설문조사 결과, 사용자가 금융 서비스를 이용할 때 가장 큰 불편은 고객 대응 부족, 채널 간 일관성 저하 및 단순 오류와 관련이 있었다. 이런 문제는 모두 자동화 기능으로 고객 서비스 에이전트와 디지털 워커(digital worker)를 위한 프로세스를 통합함으로써 해결할 수 있다. 컨설팅 업체 맥킨지(McKinsey)에 따르면, 은행은 신규 고객 가입 절차에서 최대 60%의 신청자를 잃을 수 있다. 잠재 고객을 완전히 잃은 후에 비싼 교훈을 얻는 것보다는 사전에 문제를 파악하고 예측해 예방 조치를 취하는 것이 현명하다. PwC는 디자인 씽킹(Design Thinking)을 ‘디자이너 툴킷으로 고객을 위한 보다 이상적인 솔루션을 만들어 사용자 니즈와 기술의 가능성, 비즈니스 성공 조건을 통합하는 일에서 비롯되는 인간 중심의 혁신 접근 방식’이라고 정의한다. 금융 기업은 성공적인 디자인 씽킹으로 현재와 미래의 제품 및 서비스에 대한 고객 니즈의 변화를 고려한 다음, 지능형 자동화를 활용하여 새로운 프로세스를 재구성하거나 구축할 수 있다. 은행은 개방적 전자상거래 시스템의 중심 ⓒ Blue Prism 미래의 금융 기업이 기술을 활용해 고객에게 보다 개인화된 서비스를 제공하는 방법은 무엇일까? HSBC는 모바일 뱅킹 앱으로 인해 사용자가 언제 어디서나 금융을 관리할 수 있는 자유를 얻었고, 사용자가 누릴 수 있는 더욱 큰 이점이 실현될 것이라고 예측했다. 여러 금융 전문가는 인공지능 같은 기술을 활용해 향후 1년 내에 챗봇을 이용한 금융 조언(52%), 레저 활동 할인(47%), 특별 보험 상품(41%), 여행 서비스(41%), 의료 서비스에 대한 접근(40%) 등의 개인화된 부가 서비스를 제공할 수 있을 것이라고 답했다. HSBC는 앞으로 은행이 보다 개방적이고 연결된 전자상거래 시스템의 중심이 되어서 금융 서비스 외부의 조직 및 기업과 통합하고 협력할 것이며, 은행 시스템이 외부와의 통합 및 협력 활동의 관문 역할을 하게 될 것이라고 전망했다. 개인화된 고객 서비스의 중요성 ⓒ Blue Prism 현재 금융 기업이 직면한 대표적인 문제는 고립된 레거시 시스템 때문에 고객 대응 직원이 충분한 시간을 투입해 고객과 의미 있는 대화를 나누기 어렵다는 점이다. 설문조사 결과, 많은 금융 전문가가 고객과의 소통과 고객 경험 개선 업무를 최우선으로 여기고 있었다. 자동화를 도입해 확보한 시간을 ‘프로세스 상의 문제 파악을 위한 데이터 분석(51%)’에 투입하겠다는 응답이 가장 많았으며, ‘고객에게 더 많은 시간 할애(48%)’, ‘동료와의 협업(45%)’, ‘데이터 분석을 통한 고객 행동 식별(44%)’, ‘새로운 제품과 서비스 파악(28%)’에 투입하겠다는 답변이 뒤를 이었다. 금융 기업이 직면한 문제는 ESG 같은 영역의 규제뿐 아니라, 은행이 취약한 고객을 공정하게 대우하고 개인화된 상품과 서비스를 제공할 것이라는 기대감이 커지고 있다는 점도 포함된다. 또한, 전 세계적으로 급증하는 랜섬웨어 공격과 악의적인 행위로 인해 보안 우려가 높아지면서 비용 절감에 대한 압력도 계속되고 있다. 애자일 핀테크(Agile Fintech)의 영향으로 은행의 가치 창출 서비스가 전통 서비스와 분리되고 있으며, 대출 상품에서는 이미 대형 IT 기업의 존재감이 점차 증대되고 있다. 이제 은행이 고객과의 관계를 유지하려면 관점을 달리해야 한다는 것은 분명하다. 빠르고 효율적인 운영도 중요하지만, 개인화와 훌륭한 고객 서비스의 중요성 또한 커지고 있다. 스마트 리더십과 더불어, 기술은 금융 기업이 고객 서비스에 대한 접근 방식을 전환하고 재구성하는 데 활용할 수 있는 가장 중요한 수단이 될 것이다. 특히 지능형 자동화 및 디지털 워커는 사람이 가장 잘할 수 있는 공감, 협업, 네트워킹 및 창의적인 업무에 집중하도록 지원하며, 이는 모든 고객을 위한 혁신으로 이어질 것이다. 자세한 내용은 ‘경영진 시리즈 #3 : 고객과 미래 비즈니스 방식에 초점을 맞춘 지능형 자동화’ 리포트에서 확인할 수 있다. 시리즈 #1 ‘금융 서비스의 경쟁 우위 확보, 해답은 ‘지능형 자동화’에 있다’ 기사 보러가기 시리즈 #2 ‘금융 서비스 혁신을 위한 지능형 자동화 로드맵 구축 방법’ 기사 보러가기