지난 서른다섯 번째 글에서 빅데이터 현상이 왜 일어나는지 같이 생각해본 바 있다. 빅데이터 현상은 사실 컴퓨터의 컴퓨팅 능력의 한계가 데이터 처
최근의 빅데이터 붐을 일으킨 것은 아파치 하둡(Apache Hadoop)으로 대표되는 빅데이터 병렬 처리 소프트웨어 기술들이 중심이기는 했지만, 사실 빅데이터 비즈니스에 관련된 기술과 비즈니스 요소들은 생각보다 광범위하고 다양하다는 것도 지금까지 How-to-Big Data 시리즈를 통해서 설명해왔다.
지난 서른여섯 번째 글에서 빅데이터 트렌드의 미래로서 사이버 물리 시스템(Cyber-Physical System)으로 표현할 수 있는 지능형 인프라와 서비스를 제시하였고, 이 사이버 물리 시스템을 구성하는 다양한 기술들의 역할과 미래의 가능성에 대해 지금까지 열두 편의 글을 통해 소개하였다.

그렇지만 지금까지 사이버 물리 시스템과 클라우드 컴퓨팅, 5G를 비롯한 미래 통신 기술과 사물인터넷(IoT), 인공지능 기술과의 관계를 살펴보는 과정에서 정작 좁은 의미의 빅데이터 기술과 사이버 물리 시스템의 관계에 대해서는 깊게 언급하지 않았다.
이번 글에서는 사이버 물리 시스템을 위한 빅데이터 소프트웨어 기술이 어떻게 발전하게 될지 같이 생각해보았으면 한다. 아파치 하둡(Apache Hadoop)과 아파치 스파크(Apache Spark)의 뒤를 잇는 기술로 어떤 기술이 나타날 것인지 예측하지는 못하겠지만 이들 아파치 하둡(Apache Hadoop)과 아파치 스파크(Apache Spark)의 뒤를 잇는 빅데이터 기술이 어떤 기술과 트렌드의 영향을 받아 변화할 수 있을 것인지는 간단하게 살펴볼 수 있다. 이런 관점에서 빅데이터 소프트웨어 기술의 발전에 직접적인 영향을 줄 수 있는 주요 트렌드가 빅데이터 소프트웨어 기술에 어떤 변화를 줄 수 있을지 같이 살펴보았으면 한다.
지금까지 How-to-Big Data 시리즈를 기고하면서 필자가 독자분들에게 강조하고 싶었던 것 중의 하나는 데이터 과학에서 해결하려고 하는 문제가 꼭 빅데이터를 다룰 필요는 없지만 빅데이터를 다루는 방법과 기술은 데이터 과학의 중요성을 성찰하는 데 중요하다는 것이다. 빅데이터를 다루는 과정과 그 기술들이 데이터 과학이 탄생하게 된 배경과 데이터 과학이 기업 경영에 주는 가치를 분명하게 드러내 주기 때문이다.
이런 관점에서 앞으로 빅데이터 소프트웨어 기술이 어떤 방식으로 발전해갈지 살펴보는 것은 앞으로 데이터 과학이 어떤 방식으로 발전해갈지 생각해보는 것과 깊은 연관이 있다. 데이터 과학의 산출물은 단순한 분석 보고서만 있는 것이 아니라, 분석 결과를 재연하기 위해 필요한 IT 시스템, 분석 결과를 도출해내기 위해 필요한 수집된 데이터, 데이터 가공 과정 전반에 사용된 소프트웨어들도 모두 산출물에 포함되기 때문이다.
이렇게 빅데이터 소프트웨어 기술의 발전에 직접적인 영향을 주는 기술 트렌드로 이번 글에서 필자는 크게 네 가지를 살펴보려고 한다. 첫 번째는 지난 서른다섯 번째 글에서 잠시 살펴본 인텔(Intel)의 차세대 메모리 기술인 “옵테인TM(OptaneTM)” 메모리와 같은 고성능 비휘발성 메모리가 불러올 메모리 계층 구조의 파괴와 이것이 끼칠 빅데이터 소프트웨어 기술에의 영향이다.
두 번째는 최근 분산 컴퓨팅 시스템 개발을 중심으로 서서히 확산되고 있는 함수형 프로그래밍 패러다임의 확산이다. 세 번째는 지난 서른일곱 번째부터 서른아홉 번째 글에서 살펴보았던 클라우드 컴퓨팅 자원을 효과적으로 활용하는 것과 관련된 클라우드 네이티브 프로그래밍의 확산이다. 네 번째는 하드웨어 수준의 근본적인 변화에 근거를 둔 새로운 컴퓨터 프로그래밍 모델과 패러다임 등장에 상징적인 의미를 가지는 양자 컴퓨팅 기술의 발전과 상용화다.
메모리 기술의 발전과 메모리 계층 파괴
이 네 가지 중에서 첫 번째로 꼽은 메모리 계층 구조의 파괴가 빅데이터 소프트웨어 기술에 미칠 영향에 대해서 먼저 생각해보자.
다소 오래전에 기고했던 How-to-Big Data 시리즈의 열 번째 글에서, 필자는 LHC 컴퓨팅 그리드(LHC Computing Grid)의 3-티어(tier) 계층 구조를 소개한 적이 있다. 최근 컴퓨팅 기술의 발전으로 데이터센터 자원 계층에서 가장 아래쪽에 위치한 노드-랙(node-rack) 계층이 파괴되고 있다고 소개한 바 있다[3]. 인텔(Intel)의 랙 스케일 디자인(Rack-Scale Design) 기술로 인해 과거 노드 단위로 조직되고 노드가 다시 랙 단위의 자원으로 조직되던 데이터센터 컴퓨팅 자원이 랙을 기본 단위로 하는 자원 계층으로 변화해가는 경향에 대해서 소개했었다.
이런 트렌드에 연관된 현상의 하나로, 최근 인텔의 차세대 메모리 제품인 “옵테인TM(OptaneTM)”이 가지는 상징성에 대해서 지난 서른다섯 번째 글에서 생각해본 바 있다. “옵테인TM(OptaneTM)” 메모리 기술은 현재 플래시 메모리를 사용한 영속 저장 장치인 SSD와 오랜 시간 컴퓨터의 주 메모리 기술로 사용된 휘발성(volatile) 메모리 기술인 DRAM간의 경계를 허물어 DRAM이 비휘발성 차세대 메모리 기술로 대체될 수 있는 가능성을 보여주는 제품이라고 소개한 바 있다.
중앙처리장치(Central Processing Unit; CPU) 코어(core)를 가진 주 프로세서(processor)가 사용할 데이터를 주 프로세서 안에 위치한 레지스터(register), 캐시(cache) 다음으로 중앙처리장치(Central Processing Unit; CPU) 코어(core)에 가장 가까운 곳에 저장할 수 있도록 해주는 메모리인 D-RAM은 메모리 가격과 생산 비용 이슈로 오랜 시간 동안 휘발성(volatile) 메모리 기술을 사용해왔다.
그런데 “옵테인TM(OptaneTM)” 메모리 기술은 이 주 메모리가 비휘발성 메모리로 대체되어 지금까지 우리가 사용해왔던 컴퓨터 아키텍처가 더 단순하고 확장성 있는 구조로 변화할 수 있음을 시사하고 있다.
지난 마흔네 번째 글에서 소개했던 프로세서-인-메모리(Processor-In-Memory; PIM)방식의 프로세서가 앞으로 주 프로세서 아키텍처로 등장하게 되면, 주 메모리의 상당 용량은 아예 주 프로세서와 결합된 형태로 프로세서 내부에 위치하게 될 것으로 보인다. 이렇게 레지스터(register), 캐시(cache), 주 메모리로 이어지는 메모리 계층은 PIM 아키텍처를 가지는 프로세서 내부의 주 메모리로 통합되어 단순화될 가능성이 높다.
위 시나리오와 함께, DRAM이 사용되던 주 메모리와 플래시 메모리 기술이 사용되는 SSD에 기초한 영속 저장 장치 계층이 “옵테인(OptaneTM)” 메모리와 같은 차세대 비휘발성 메모리 기술을 통해 하나의 메모리 계층으로 통합되면서, 위의 PIM 프로세서와 같은 프로세서 내 대용량 메모리(in-processor memory)와 차세대 비휘발성 메모리를 중심으로 한 프로세서 바깥의 메모리(out-of-processor memory)로 컴퓨터 메모리 계층이 재편되는 컴퓨터 아키텍처 변화의 가능성을 시사하고 있다.
이렇게 메모리 계층이 인-프로세서 메모리(in-processor memory)와 프로세서 바깥의 메모리(out-of-processor memory)로 단순화되어 재편되고, 최근 발전하고 있는 메모리 간 고대역폭 버스 기술과 네트워크 기술 발전의 영향을 받아 메모리 간 데이터 교환을 위한 패브릭(fabric)의 대역폭(bandwidth)과 확장성(scalability)이 높아짐에 따라 메모리 자원의 확장성이 비약적으로 향상될 것으로 보인다.
이렇게 메모리 자원의 확장성이 비약적으로 향상되면서 가장 크게 영향을 받을 수 있는 IT 기술 분야가 바로 빅데이터 소프트웨어 기술이다. 아파치 하둡(Apache Hadoop)과 아파치 스파크(Apache Spark)와 같은 빅데이터 소프트웨어 기술들이 해결하고자 했던 문제는 현재 컴퓨터 아키텍처가 가지고 있는 데이터 처리의 확장성 문제다.
앞서 말한 메모리 계층 구조의 재편과 함께 컴퓨터 자원의 확장성이 근본적으로 개선될 경우 빅데이터 소프트웨어 기술이 극단적인 경우에는 필요 없어지거나, 그렇지는 않더라도 빅데이터 소프트웨어 발전의 양상이 크게 변화할 가능성이 높다.
대용량 데이터 처리를 위한 멀티-노드 컴퓨팅 작업에서 중요한 것은 한 대의 컴퓨터에서 처리하기 어려운 빅데이터를 어떻게 여러 대의 컴퓨터에서 나누어 처리하도록 할 것인지 스케줄링하는 것이다. 이 문제를 아파치 하둡(Hadoop)과 아파치 스파크(Apache Spark)는 연산에 필요한 데이터가 있는 노드에서 관련된 연산이 일어날 수 있도록 데이터 블록의 위치를 고려하여 작업을 스케줄링하는 것으로 해결하였다.
이와 함께 주 메모리의 용량이 한정되어 있고, 주 메모리 사이, 또는 주 메모리와 영속 저장장치(persistent storage) 사이에서 데이터의 이동에 드는 비용이 높은 것 때문에 여러 노드에 위치한 HDD, SSD와 같은 영속 저장 장치를 네트워크를 통해 하나의 저장 공간으로 묶고, 이렇게 하나의 저장 공간으로 묶인 영속 저장 장치에 있는 대용량 데이터 중에서 연산에 필요한 데이터의 위치를 신속하게 찾아내고 접근할 수 있게 하는 것이다.
만약 위와 같이 휘발성 주 메모리와 비휘발성 SSD 기반의 영속 저장 장치가 하나의 메모리로 통합되고, 장치의 전원이 꺼지더라도 주 메모리의 데이터가 사라지지 않도록 주 메모리가 아예 비휘발성 메모리 기술 중심으로 바뀌게 된다면, 아파치 하둡(Apache Hadoop)과 아파치 스파크(Apache Spark)의 작업 처리 지연 시간의 대부분을 차지하는 주 메모리와 영속 저장 장치 간 데이터 이동 및 스케줄링 시간이 크게 줄어들게 되어 이들 기술의 빅데이터 처리 성능이 크게 향상될 것이 기대된다.
위에서 설명한 인-프로세서 메모리(in-processor memory)는 주 메모리의 역할을 대체하기보다는 캐시의 역할을 대체할 가능성이 높아 보인다. 인-프로세서 메모리의 발전을 통해 프로세서 내부 메모리의 용량과 프로세서 코어와 메모리 간 버스 대역폭이 향상되면, 현재 컴퓨터 아키텍처에서 프로세서 내 데이터 연산과 처리를 위해 영속 저장 장치에서 주 메모리로 데이터를 이동하는 과정에서 들었던 시간이 대폭 줄어들어 연산 성능이 크게 향상될 것으로 기대된다.
이렇게 인-프로세서 메모리의 용량 확장과 인-프로세서 메모리의 발전에 따른 프로세서 코어-메모리 사이의 데이터 이동 시간의 감소는 빅데이터 처리 성능의 직접적인 향상으로 이어지게 되어 현재 빅데이터 소프트웨어 기술에서 해결하려 하는 문제의 상당 부분이 사라질 것으로 보인다.
필자가 바라보는 메모리 계층 파괴와 이를 중심으로 한 컴퓨터 아키텍처의 변화는 물론 다른 양상으로 나타날 수 있다. 필자가 미래를 모두 정확하게 예측할 수는 없으니, 필자의 예상과는 다른 방식으로 컴퓨터 아키텍처가 발전할 수 있다.
그렇지만 분명한 것은 비휘발성 메모리 기술의 발전과 이에 따른 메모리 계층 단순화가 빅데이터 소프트웨어 기술의 발전에 영향을 준다는 것이다. 비휘발성 메모리 중심으로 메모리 계층이 단순화되면 빅데이터 처리를 위한 자원 확장성의 장벽이 낮아지고, 새로운 컴퓨터 아키텍처를 십분 활용하는 새로운 빅데이터 소프트웨어 기술이 출현할 수 있다.
이처럼 비휘발성 메모리 기술의 발전과 이로 인한 메모리 계층 파괴, 컴퓨터 아키텍처의 변화는 빅데이터 소프트웨어의 미래를 그리는 중요한 변화이다. 메모리 계층 단순화를 중심으로 한 컴퓨터 아키텍처의 변화는 자원 확장성의 한계를 확장하여 빅데이터를 다루는 방식에도 큰 변화를 가져올 것으로 기대된다. 단일 노드당 저장, 처리할 수 있는 데이터의 양과 속도도 크게 향상되어 사이버 물리 시스템의 지능을 높이는 데에도 크게 기여할 수 있을 것으로 기대된다.
위와 같은 비휘발성 메모리 기술로 생기는 메모리 계층 파괴와 함께, “상변화 메모리(Phase-change RAM)” 기술과 그래핀(graphene)을 이용한 메모리 소자 기술 때문에 생기는 메모리 계층의 변화도 염두에 둘 필요가 있다.
IBM이 주도적으로 개발하고 있는 상변화 메모리(Phase-change RAM) 기술은 정보 저장을 위한 비트 상태 전환에 물질의 상변화(phase-change)를 이용해 비트 상태 전환에 걸리는 시간과 전력을 크게 줄여 향상한 기술이다.
2010년 안드레 가임(Andre Geim) 교수와 콘스탄틴 노보셀로프(Konstantin Novoselov) 교수의 2차원 그래핀 연구에 노벨 물리학상이 수여되면서 대중에 알려진 그래핀은, 최근 그 독특한 물리적인 특성으로 인해서 현재 컴퓨팅, 메모리 소자의 처리 속도 한계를 극한까지 높일 수 있는 차세대 소자 기술로 주목받고 있다.
“상변화 메모리(Phase-change RAM)” 기술은 물질의 상변화를 정보 저장에 이용하는 특성 때문에, 저장 장치의 정보 입출력(I/O) 속도를 크게 향상하고, 저장 장치 구동에 필요한 전력을 크게 낮출 수 있을 뿐만 아니라, 저장 장치의 내구성과 수명을 크게 높일 수 있는 기술로 주목받고 있다. 이 “상변화 메모리(Phase-change RAM)”가 상용화될 경우 정보 입출력 속도와 용량이 크게 향상되고, 저전력 구동이 가능한 점 때문에 역시 컴퓨터 아키텍처에 큰 변화가 생길 수 있을 것으로 기대되고 있다.
그래핀(graphene) 소자 기술이 직접적으로 적용된 컴퓨팅 프로세서나 저장 장치 소자는 아직 본격적으로 상용화되지 않았지만, 위의 “상변화 메모리(Phase-change RAM)” 기술과 같이 정보 입출력 속도를 크게 향상시킬 것으로 기대되고 있다. 그래핀(graphene)을 이용한 저장 장치 소자도 앞으로 정보 저장 용량과 속도를 크게 향상하여 컴퓨터 아키텍처 변화에 큰 영향을 줄 것으로 보인다.
위와 같이 “상변화 메모리(Phase-change RAM)”와 그래핀 소자 기술 또한 메모리 계층 단순화와 컴퓨터 아키텍처 변화에 큰 영향을 줄 수 있어 빅데이터 소프트웨어 기술의 발전에 큰 영향을 끼칠 것으로 보인다.
근 미래에는 “옵테인TM(OptaneTM) 메모리”와 같은 3차원 적층 구조 나노 기술을 이용한 차세대 메모리 기술이, 좀 더 먼 미래에는 물질의 물성을 근본적으로 활용하여 정보 저장, 처리 성능을 향상한 “상변화 메모리(Phase-change RAM)”와 그래핀 소자 기술이 메모리 계층 단순화와 변화를 이끌 것으로 보인다. 앞으로 데이터 과학자들과 빅데이터 소프트웨어 엔지니어들은 이들 메모리 기술의 발전에 따른 빅데이터 소프트웨어 기술의 발전을 관심을 가지고 지켜볼 필요가 있다.
함수형 프로그래밍 패러다임의 확산
아파치 하둡(Apache Hadoop)과 아파치 스파크(Apache Spark), 그리고 최근에는 아파치 플링크(Apache Flink)와 같은 빅데이터 소프트웨어 기술은 물리적인 한계로 인해 근본적으로 나타날 수밖에 없는 IT 자원 확장성의 한계를 소프트웨어적으로 극복해보려고 하는 기술들이다.
컴퓨팅, 데이터 자원의 확장성을 소프트웨어적으로 극복하기 위해 하드웨어 자원의 물리적 구조와 특성, 아키텍처를 최대한 활용하려고 한다. 이런 의미에서 하드웨어 아키텍처와 기술이 빅데이터 소프트웨어 기술의 발전에 미치는 영향이 클 수밖에 없다.
필자가 지난 서른다섯 번째 글에서 설명한 바 있듯이, 이런 빅데이터 문제 출현의 근본에는 자원 확장성이 빅데이터 수요의 증가를 따라잡지 못하는 데서 시작한다. 이 때문에 물리적인 자원 확장성의 기술 변화는 빅데이터 소프트웨어 기술의 발전에 크게 영향을 미칠 수밖에 없다.
빅데이터 소프트웨어 기술의 발전에 영향을 미치는 또 하나의 영역은 바로 프로그래밍 패러다임과 모델이다. 빅데이터를 다루기 위해 빅데이터를 어떤 관점에서 바라보고 어떤 방식으로 다룰 것이냐를 구체적으로 정의하는 것이 프로그래밍 모델이다. 이런 프로그래밍 모델이 빅데이터 소프트웨어의 API나 프로그래밍 관례로 자리 잡을 수 있도록 구체적인 도구를 제공하는 것이 프로그래밍 패러다임이다.
앞으로 빅데이터 소프트웨어 기술의 발전에서 프로그래밍 모델의 발전에 영향을 미칠 중요한 요소로 필자는 함수형 프로그래밍 언어(functional programming language)의 발전과 확산, 그리고 클라우드 네이티브 프로그래밍(cloud-native programming)의 확산을 들고 싶다.
함수형 프로그래밍 패러다임의 발전과 확산은 빅데이터를 다루는 프로그래밍 모델과 근본적인 관련이 있고, 클라우드 네이티브 프로그래밍의 확산은 앞서 설명한 물리적, 하드웨어적 자원 확장성을 다루는 프로그래밍 모델과 관련이 있다. 클라우드 네이티브 프로그래밍의 확산이 빅데이터 소프트웨어 기술에 미치는 영향에 대해서는 다음 절에서 좀 더 자세히 생각해보도록 한다.
함수형 프로그래밍이 무엇인지 궁금해하실 독자분들을 위해 함수형 프로그래밍에 대해 잠시 소개하고자 한다. 함수형 프로그래밍은 수학에서 기본적인 개념으로 다루는 함수(function)를 이용한 프로그래밍을 기본으로 하며, 부작용(side-effect)이 없는 함수를 정의하고 이 함수를 중심으로 프로그래밍을 하도록 하는 프로그래밍 패러다임을 말한다.
부작용이 없다는 것은 함수가 실행되는 동안에 함수 내의 상태와 변수 외에 다른 상태와 가변 데이터를 변경하지 않는다는 것을 의미한다. 대표적인 상태와 가변 데이터는 객체 지향 프로그래밍에서 클래스 내에 정의되는 클래스 변수를 들 수 있다. 이렇게 여러 함수가 그 값을 공유하고, 여러 함수가 변경할 수 있는 상태나 가변 데이터를 저장할 수 있는 변수 사용을 지양하여 프로그래밍하는 것을 함수형 프로그래밍이라고 한다.
함수형 프로그래밍은 최근에 많은 주목을 받고 있지만, 사실 역사가 오래된 프로그래밍 패러다임이다. 함수형 프로그래밍이 처음으로 제안된 것은 1930년대로, 인공지능 분야의 처치-튜링 가설(Church-Turing Thesis)로 유명한 미국의 수학자이자 논리학자인 알론조 처치(Alonso Church)가 제안한 람다 대수(Lambda calculus)가 그 시작이다.
이후 미국의 앨런 뉴웰(Allen Newell), 클리프 쇼(Cliff Shaw), 허버트 A. 사이먼(Herbert A. Simon)에 의해서 랜드 연구소(RAND Corporation)와 카네기 공과 대학(Carnegie Institute of Technology)에서 개발된 IPL이라는 프로그래밍 언어가 이 람다 대수를 구현한 첫 번째 프로그래밍 언어가 됐다.
이후 1950년대 후반에 MIT의 존 매카시(John McCarthy)가 LISP를 개발하면서 함수형 프로그래밍 언어가 본격적으로 개발되기 시작하였다. 이후 1970년대 영국의 컴퓨터 과학자인 로빈 밀너(Robin Milner)에 의해 또 다른 함수형 프로그래밍 언어인 ML 언어가 개발된다.
이 ML 언어는 현재 프랑스의 정보기술 연구기관인 INRIA에서 자비에 르로이(Xavier Leroy), 제롬 부이용(Jérôme Vouillon), 다미엥 돌리예즈(Damien Doligez), 디디에 레미(Didier Rémy)등에 의해 오픈소스인 OCaml로 구현되어 널리 사용되고 있으며, 현대 함수형 프로그래밍 언어의 발전에 큰 영향을 주었다.
1985년 영국의 컴퓨터 과학자인 데이비드 터너(David A. Turner)가 당시까지의 함수형 언어 연구개발의 성과를 집약하여 순수 함수형 언어인 미란다(Miranda) 언어를 만들게 됐다. 이후, 1987년 오리건주 포틀랜드에서 열린 ‘함수형 프로그래밍 언어와 컴퓨터 구조에 관한 총회’(Functional Programming Languages and Computer Architecture, FPCA ’87)에서 있었던 회의에서 난립하고 있는 함수형 언어들을 통합 정리해서 훗날 언어 설계의 기반이 될 수 있는 일반적인 순수 함수형 프로그래밍 언어를 만들자는 데에 참가자들의 뜻이 모여 이를 위한 위원회가 발족됐다.
이를 계기로 당시까지의 함수형 프로그래밍 언어의 성과를 집대성하여 순수 함수형 언어인 하스켈(Haskell)이 개발되어 함수형 프로그래밍이 본격적으로 확산되기 시작하였다[15-16, 20].
함수형 프로그래밍은 하스켈(Haskell)이나 스칼라(Scala)와 같은 함수형 프로그래밍 언어를 사용하면 그 장점을 잘 활용할 수 있다. 그렇지만, C, Go와 같은 기존의 절차적 프로그래밍 언어들이나, C++, C#, 자바(Java), 자바스크립트(JavaScript), 파이썬(Python), 코틀린(Kotlin), 러스트(Rust)와 같은 객체 지향 프로그래밍 언어에서도 몇 가지 프로그래밍 규칙과 스타일만 지키게 되면 함수형 프로그래밍이 가능하기 때문에 최근에 다양한 프로그래밍 언어에도 함수형 프로그래밍을 활용하려는 시도가 많아지고 있다.
함수형 프로그래밍은 객체 지향 프로그래밍과 비교했을 때 많은 장점이 있다. 이 중에서 빅데이터와 관련해서 꼽을 수 있는 가장 큰 장점은 부작용(side-effect)이 없기 때문에 현대 병렬, 분산 프로그래밍에서 성능 저하의 고질적인 문제로 지적되어온 공유 상태 일관성(shared state consistency), 공유 데이터(shared memory) 접근과 잠금 과정에서 생길 수 있는 문제가 없다는 것이다.
이런 이유로 스레드에 안전(thread-safe)한 동시성(concurrent), 병렬(parallel) 프로그래밍이 가능하다. 이 때문에 빅데이터 처리, 분석과정에서 필요한 동시성 처리(concurrent processing)와 병렬 처리(parallel processing)에 적합하고 안전한 프로그래밍 모델을 제공할 수 있다.
부작용(side-effect)이 없는 함수를 중심으로 프로그래밍하기 때문에 함수 단위로 추상화된 작업들이 쉽게 합성(composition)되어 고도로 복잡한 작업을 손쉽게 다시 구성해서 만들 수 있다. 이 뿐만 아니라, 순수한 수학적인 개념인 람다 대수(Lambda Calculus)와 카테고리 이론(Category Theory)에 그 바탕을 두고 있어 극도로 추상적인 논리 표현이 가능하다.
익명 함수(anonymous function), 고계 함수(higher-order function)를 써서 극도로 추상화된 간결하고 단순화된 프로그래밍이 가능해지면서, 소프트웨어 개발의 생산성과 경제성을 추구할 수 있다. 이렇게 함수형 프로그래밍 언어를 통해 간결해진 프로그래밍 작업은 소프트웨어 엔지니어들의 생산성과 소프트웨어 자체의 성능, 품질을 함께 크게 높일 수 있다.
함수형 프로그래밍이 제공할 수 있는 극도의 추상성(abstraction)과 합성성(composition)은 빅데이터 프로그래밍에 필요한 프로그래밍 모델을 위한 재료를 제공한다. 일례를 들자면, 구글의 맵리듀스(MapReduce)와 아파치 하둡(Apache Hadoop)을 유명하게 한 빅데이터 처리 프로그래밍 모델인 맵리듀스 모델은 사실 함수형 프로그래밍의 맵(map) 고계 함수와 폴드(fold) 고계 함수를 이용하면 쉽게 만들 수 있다.
사실 함수형 프로그래밍에서 맵(map) 고계 함수와 폴드(fold) 고계 함수가 이미 맵-리듀스(Map-Reduce) 패턴을 추상화해서 구현해 놓고 있었으며, 하스켈(Haskell)과 스칼라(Scala) 같은 함수형 프로그래밍 언어를 이용하면 구글의 맵리듀스(MapReduce)와 같은 C++ API, 아파치 하둡(Apache Hadoop)과 같은 Java API가 없어도 이미 맵리듀스 패턴을 이용한 병렬 처리가 가능하다.
이에 더해서 함수형 프로그래밍 언어는 부작용(side-effect)이 없는 함수를 기본으로 하여 프로그래밍을 하기 때문에, 앞서 설명한 맵(map) 고계 함수와 폴드(fold) 고계 함수와 같은 병렬 프로그래밍에 많이 쓰이는 추상화된 함수들을 멀티-노드 병렬 컴퓨팅으로 확장하기도 쉽다.
여러 함수가 하나의 변수나 상태를 공유하여 사용하거나 변경하는 부작용이 없기 때문에, 각 함수들이 여러 노드의 컴퓨터에서 동시에 실행되어도 공유 변수나 상태의 일관성을 일일이 점검하고 지켜주어야 하는 별도의 논리를 구현해주어야 할 필요가 없다. 이 때문에 빅데이터 처리, 분석에 필수적인 멀티-노드 병렬 컴퓨팅을 기술하는데 함수형 프로그래밍의 고계 함수들은 아주 유용하다.
함수형 프로그래밍으로 구현되어 널리 쓰이는 고계 함수들은 맵(map)과 폴드(fold; 또는 reduce, accumulate, aggregate, compress, inject와 같이 다른 다양한 이름으로 불리기도 한다.) 함수뿐만 아니라, 카테고리 이론에 근거한 다양한 추상 함수들을 쉽게 합성하여 프로그래밍에 사용할 수 있다.
이런 함수형 프로그래밍의 극도의 추상성(abstraction)과 합성성(composition)은 빅데이터의 근본적인 특성인 대용량 데이터와 데이터 고속 처리에 필요한 동시성(concurrency)과 병렬성(parallelism)을 쉽게 프로그래밍하는 데에 유용할 뿐만 아니라, 추상적인 개념과 개념 사이의 관계를 추상적이고 수학적인 관계로 연관 지어 현상의 원인을 설명하고 예측하는 데이터 분석에도 아주 잘 맞는다. 이런 의미에서 함수형 프로그래밍 언어는 빅데이터 시대에 맞는 프로그래밍 언어라고도 볼 수 있다.
최근 데이터 분석과 기계 학습을 모델링하고 프로그래밍하는 데에 파이썬(Python) 언어가 많이 활용되고 있지만, 이는 파이썬(Python) 언어가 데이터 분석과 빅데이터 처리, 기계 학습 모델링에 적합한 언어 때문이라기보다는 배우기 쉬운 동적 언어라는 특성과 파이썬(Python) 언어를 중심으로 형성된 소프트웨어 에코 시스템의 다양성과 넓이 때문인 것으로 보인다.
최근 과학기술 계산과 빅데이터 처리, 분석용 언어로서 주목을 받는 것은 오히려 줄리아(Julia)와 같은 새로운 데이터 분석용 언어와, 스칼라(Scala)와 같은 멀티 패러다임 프로그래밍 언어들이다. 과학기술 계산과 빅데이터 처리, 분석과 같은 분야에서 파이썬(Python)이 가지는 태생적인 한계에 대해서 인지하는 사람들도 많아지는 추세다.
필자 개인적으로는 빅데이터 컴퓨팅에 적합한 프로그래밍 언어로서 스칼라(Scala)를 꼽고 싶다. 실제로, 빅데이터 소프트웨어 기술로 유명한 아파치 스파크(Apache Spark)가 스칼라(Scala) 언어로 개발되어 있기도 하고, 필자가 실제 빅데이터 시스템 개발과 데이터 분석에 스칼라(Scala)를 사용해본 결과 함수형 프로그래밍의 특징을 이용한 추상적인 논리 표현과 표현의 간결함, 동시성, 병렬 프로그래밍에서의 확장성과 같은 다양한 장점이 있었다.
필자는 아파치 스파크(Apache Spark)가 스칼라(Scala) 언어로 개발된 데에는 스칼라(Scala) 언어가 지원하는 함수형 프로그래밍 패러다임이 빅데이터 컴퓨팅에서 가지는 장점이 큰 역할을 한 것으로 보고 있다.
구글의 맵리듀스(MapReduce) C++ API와 아파치 하둡(Apache Hadoop)의 자바(Java) API를 통해 표현된 병렬 프로그래밍 모델의 역할을 함수형 프로그래밍 언어의 고계 함수들이 쉽게 대체할 수 있다는 점을 앞서 설명했다.
이처럼 빅데이터 컴퓨팅에 필요한 다양한 동시성, 병렬 프로그래밍 모델과 추상적인 데이터 분석 논리를 표현하기 위한 프로그래밍 모델들이 함수형 프로그래밍을 통해 간결하게 표현될 수 있다는 점은 함수형 프로그래밍 언어들이 빅데이터 프로그래밍 모델을 풍성하게 표현하는 추상 인터페이스 언어의 역할을 할 수 있다는 점을 시사하고 있다.
필자가 스칼라(Scala) 언어를 활용했을 때 불편한 점은 파이썬(Python)보다 아직 에코 시스템이 풍성하지 않아 파이썬(Python)에서는 이미 제3자 라이브러리(third-party library)로 제공되는 소프트웨어들이 없어 이런 부분을 직접 프로그래밍을 해야 하는 것이 주된 불편함이었다.
이런 점을 제외하면, 사실 파이썬(Python)보다 더 간결하고 효과적으로 빅데이터 처리, 분석 논리를 표현할 수 있었다. 이와 함께 스칼라(Scala)는 파이썬(Python)과 같은 동적 프로그래밍 언어가 아닌 정적 타입 프로그래밍언어지만, 스칼라(Scala)의 implicit 예약어를 이용한 암묵적 타입 변환(implicit type-cast) 기능을 활용하면 마치 동적인 프로그래밍 언어를 사용하는 것과 같은 유연함도 활용할 수 있었다.
스칼라(Scala) 언어는 또한 자바(Java) 언어 생태계 위에 만들어진 언어이고, 자바 언어로 만들어진 소프트웨어와 100% 상호연동성(interoperability)이 보장된다. 이런 이유로 자바(Java) 언어 생태계에서 지금까지 개발된 많은 소프트웨어들을 흠 없이(seamlessly) 활용할 수 있다는 점도 장점이다.
자바 가상 머신(Java Virtual Machine; JVM)위에서 실행되다 보니 파이썬(Python)에 비해서 이식성이 좋은 장점이 있지만, 요즘은 도커(Docker) 같은 컨테이너(Container) 기술이 워낙 발전되어 이식성(portability) 측면의 장점은 예전보다 두드러져 보이지 않는다. 하지만, 프로그래밍 언어 수준에서 자바 가상 머신(Java Virtual Machine; JVM) 기반의 이식성(portability)과 상호연동성(interoperability)을 장점으로 가지고 있는 것은 분명히 다른 프로그래밍 언어에 비해 더 나은 점으로 볼 수 있다.
빅데이터 컴퓨팅에 필요한 수치계산 라이브러리 지원, 병렬 프로그래밍 기술 지원은 C/C++ 언어로 개발된 많은 수치계산 라이브러리와 병렬 프로그래밍 소프트웨어를 통합해서 흡수할 수 있었던 파이썬(Python)에 비해 스칼라(Scala) 언어가 부족한 점이었다. 앞으로 네이티브 바이너리로의 컴파일을 지원하는 스칼라 네이티브(Scala Native) 언어가 개발되면 많이 보완될 것으로 보인다.
빅데이터 컴퓨팅을 위한 별도의 프로그래밍 모델과 API를 고민하여 디자인하고 이를 빅데이터 소프트웨어로 만드는 노력보다는 앞으로 함수형 프로그래밍 언어의 테두리 안에서 빅데이터 프로그래밍 모델을 함수형 프로그래밍 방법으로 표현하고 이를 빅데이터 처리, 분석에 활용하는 방식으로 빅데이터 소프트웨어 기술이 발전할 것으로 예상된다.
물론 이와 같은 함수형 프로그래밍의 빅데이터 소프트웨어 개발과 빅데이터 분석에의 활용에 대한 긍정적인 전망에 아무런 장애물이 없는 것은 아니다. 우선 함수형 프로그래밍 언어들은 객체 지향 프로그래밍 언어에 비해서 배우고 익히기가 쉽지 않다. 이론적으로도 수학적으로 추상화된 개념과 카테고리 이론(category theory)과 같은 수학 이론에 대한 배경지식을 잘 갖추고 있지 않으면 함수형 프로그래밍의 장점을 온전하게 활용하기 어려울 수 있다.
이와 같은 어려움을 극복할 수 있도록 스칼라(Scala)와 같은 함수형 프로그래밍 언어에서는 함수형 프로그래밍에 필요한 카테고리 이론의 개념들을 라이브러리화한 scalaz와 같은 표준 라이브러리를 제공한다. 이와 같은 라이브러리와 소프트웨어 도구들이 더 축적되고 향상되면 앞으로 빅데이터 소프트웨어 엔지니어와 데이터 과학자들이 함수형 프로그래밍을 활용하는데 넘어야 할 기술적인 장벽은 점차 낮아질 것으로 기대된다.
스칼라(Scala) 언어가 자바 가상 머신(Java Virtual Machine; JVM) 생태계에서 구현된 언어라는 점이 사이버 물리 시스템에 빅데이터 기술이 활용되는 데에 긍정적으로 작용하는 점도 있다. 하드웨어 의존성과 이질성(heterogeneity)을 극복하고 이식성을 확보하는데 자바 가상 머신(Java Virtual Machine; JVM)에 기반한 런타임 환경은 훌륭한 해결책이 될 수 있다.
앞서 소개했던 함수형 프로그래밍 언어가 빅데이터 컴퓨팅에 대해 가지는 장점을, 특히 하드웨어 종류가 다양하여 소프트웨어의 하드웨어 의존성이 높은 사이버 물리 시스템과 임베디드 시스템에서, 일관된 프로그래밍 모델을 통해 활용할 수 있다는 점은 자바 가상 머신(Java Virtual Machine; JVM) 런타임 환경에서 함수형 프로그래밍을 활용할 수 있는 스칼라(Scala) 언어의 장점으로 볼 수 있다.
자바 가상 머신(Java Virtual Machine; JVM)이 원래 임베디드 시스템 환경에서 자원 이질성(heterogeneity)을 극복하기 위해 개발된 런타임 환경이라는 점도 사이버 물리 시스템에서 빅데이터를 다루는데 스칼라(Scala) 언어가 가진 장점을 잘 보여준다.
자바(Java) 런타임 환경과의 완벽한 상호운용성(interoperability)을 보장하는 스칼라(Scala) 언어가 이미 광범위하게 구축되어 활용되고 있는 자바(Java) 언어 기반의 임베디드 시스템 소프트웨어 생태계 기술을 활용할 수 있다는 점도 사이버 물리 시스템에서 빅데이터를 다루기 위한 플랫폼으로써 스칼라(Scala) 언어가 가진 장점이다.
함수형 프로그래밍의 빅데이터 처리, 분석에의 확산은 하스켈(Haskell)과 같은 정통 함수형 프로그래밍 언어를 통하기보다는 스칼라(Scala)와 같은 기존 자바 가상 머신(Java Virtual Machine; JVM) 런타임 환경에서 함수형 프로그래밍을 쓸 수 있게 해주는 멀티-패러다임 프로그래밍 언어와, C++와 고(Go), 코틀린(Kotlin), 러스트(Rust)와 같은 기존의 객체 지향 프로그래밍 언어, 절차적 프로그래밍 언어에서 함수형 프로그래밍 스타일을 도입하는 방식을 통해 확산되어 나갈 것으로 보인다.
어떤 식이 됐건, 빅데이터 컴퓨팅의 프로그래밍 모델을 제공하는 추상 인터페이스로서 함수형 프로그래밍 패러다임의 확산은 빅데이터 소프트웨어 기술 발전에 깊은 영향을 미치게 될 것이다.
클라우드 네이티브 프로그래밍의 확산
앞서 함수형 프로그래밍에 대해 언급하면서, 빅데이터 컴퓨팅을 위한 자원 확장성 프로그래밍 모델로서 클라우드 네이티브 프로그래밍의 확산에 대해서도 언급한 바 있다. 이번 절에서는 클라우드 네이티브 프로그래밍의 확산이 빅데이터 소프트웨어 기술의 발전에 어떤 영향을 미칠지 같이 생각해보자.
지난 서른일곱 번째에서 서른아홉 번째 글에서 언급했던 것과 같이[6-8], 클라우드 컴퓨팅의 본질은 서비스 지향 컴퓨팅(service-oriented computing)을 이용해 IT 자원에 대한 접근성을 확보하고, 분산 컴퓨팅 환경의 이질성(heterogeneity)과 자원 확장성(scalability)을 극복하여 IT 자원에 대한 프로그래머빌리티(programmability)를 높이는 것이다.
IT 자원을 모두 프로그램이 가능한 자원으로 만들어 빅데이터를 활용한 서비스와 같이 자원 확장성(scalability)이 꼭 필요한 워크로드에 대해 유연한 확장성을 제공하려는 것이 클라우드 컴퓨팅의 본질이다.
아마존 웹 서비스(Amazon Web Services; AWS), 마이크로소프트 애저(Azure), 구글 클라우드 플랫폼(Google Cloud Platform; GCP)과 같은 공용 클라우드(public cloud) 서비스가 안정화되자, 이들 공용 클라우드(public cloud) 서비스를 아예 인프라로 두고 응용 프로그램이나 서비스를 개발하는 클라우드 네이티브 프로그래밍(cloud-native programming)이 최근 확산되고 있다.
이렇게 클라우드 네이티브 프로그래밍의 확산이 의미하는 바는, 클라우드 컴퓨팅 기술로 통합된 IT 인프라가 서비스 플랫폼과 응용 소프트웨어에 소프트웨어적 요소로서 본격적으로 통합되는 최근의 클라우드 네이티브 애플리케이션(cloud-native application) 개발 경향을 보여주는 것으로 생각할 수 있다.
최근 리눅스 재단에서 새로이 설립한 클라우드 네이티브 컴퓨팅 재단(Cloud Native Computing Foundation; CNCF)에서 정의한 클라우드 네이티브 컴퓨팅은 조금 더 좁은 의미로서, 응용 소프트웨어와 서비스를 개발할 때 공용 클라우드(public cloud) 서비스 사용을 기본으로 하고, 컨테이너 기술을 활용한 응용 소프트웨어 배포와 스케줄링, 관리를 이용하며, 마이크로서비스 아키텍처(microservice architecture; MSA)를 이용해 소프트웨어 컴포넌트들을 통합하는 방식을 말한다.
어떤 정의이든 간에, 클라우드 네이티브 애플리케이션 개발과 클라우드 네이티브 프로그래밍에는 비즈니스 문제 해결을 위한 IT 시스템 개발에 클라우드 컴퓨팅 자원을 이용하는 것을 기본 전제로 하고, 클라우드 컴퓨팅 서비스 API를 이용해 클라우드 컴퓨팅 자원을 제어, 통합하여 문제를 해결하는 것을 근본으로 한다.
빅데이터 비즈니스에서 클라우드 네이티브 프로그래밍은, 빅데이터를 이용한 문제 해결을 위해 클라우드 컴퓨팅 자원의 제어, 통합을 빅데이터 문제 해결을 위한 IT 자원의 확보 및 활용에 적극적으로 이용하고, 클라우드 컴퓨팅 서비스를 통해 빅데이터 문제 해결을 위한 IT 자원 제어를 추상화하여 제공받아 빅데이터 시스템과 통합한다는 것을 의미한다.
클라우드 네이티브 프로그래밍을 위해서는 REST API를 이용한 공용 클라우드(public cloud) 자원 제어, 쿠버네티스(Kubernetes)와 같은 컨테이너 관리 소프트웨어를 이용한 응용 소프트웨어와 소프트웨어 컴포넌트의 배포, 마이크로서비스의 호출을 통한 소프트웨어 컴포넌트의 통합이 기본 전제가 되어야 한다. 따라서, 기존의 C/C++과 같은 프로그래밍 언어보다는 고(Go), 자바(Java), 자바스크립트(JavaScript), 파이썬(Python), 코틀린(Kotlin)과 같은 웹 프로그래밍에 적합한 언어를 사용하여야 한다.
클라우드 네이티브 프로그래밍에서는 빅데이터 인프라로서 클라우드 컴퓨팅 서비스가 더 이상 고정된 인프라 요소로서 빅데이터 시스템을 구성하는 것이 아닌 빅데이터 가공, 처리, 분석을 위한 IT 자원을 공급하는 소프트웨어 모듈로서 빅데이터 비즈니스 시스템에 통합되도록 프로그래밍한다. 또한, 빅데이터 비즈니스 소프트웨어 시스템의 종단간(end-to-end) 배포(deployment), 제어가 쿠버네티스(Kubernetes) 및 도커(Docker)를 이용한 컨테이너 제어를 통해 일어나도록 한다.
클라우드 네이티브 프로그래밍을 통해 빅데이터 소프트웨어 엔지니어와 데이터 과학자가 빅데이터 가공, 처리, 분석을 위한 IT 자원을 소프트웨어적으로 바라볼 수 있게 되면서, 빅데이터를 다루기 위한 하드웨어, 인프라 측면에서의 디테일에서 해방되어 빅데이터를 이용한 문제 해결에 집중할 수 있도록 해주는 자원 관리 프로그래밍 모델로서 클라우드 네이티브 프로그래밍이 발전하고 있다.
프로그래밍 모델로서 클라우드 네이티브 프로그래밍이 중요한 이유는 앞서 소개했던 엣지 컴퓨팅과 모바일 엣지 컴퓨팅, 그리고, 최근 부상하고 있는 멀티-클라우드 컴퓨팅과 같이 분산 클라우드 컴퓨팅의 수요가 높아지고 있는 상황과도 관련이 있다.
서른아홉 번째부터 마흔한 번째[8-10] 글에서 소개한 것과 같이, 앞으로 올 사이버 물리 시스템 기반의 지능형 서비스 인프라들은, 데이터센터 한 곳에 모든 IT 자원이 모여 있는 것이 아니라, 지리적으로 넓은 지역에 분산되어 있는 IT 자원들을, 사이버 물리 시스템의 필요에 따라 스케줄링하여 받아쓰거나 여러 형태의 IT 자원을 연합(federation), 연동(interoperation)하여 사용하게 될 가능성이 높다.
이렇게 여러 지역에 분산돼 있는 IT 자원들과 멀티 클라우드 자원들을 목적에 맞게 통합, 연합하고 조율하여 빅데이터 자원 관리를 위해 사용하기 위한 방법으로도 클라우드 네이티브 프로그래밍이 중요하다.
최근에는 아예 클라우드 네이티브 모델을 기본으로 하는 데이터베이스나 빅데이터 소프트웨어 기술도 다수 등장하고 있다. 영국의 스타트업인 지오스포크(GeoSpock)는 모빌리티 서비스와 스마트 시티와 같이 지리적으로 광범위한 지역에 걸친 데이터를 저장, 관리, 색인하고 질의할 수 있는 클라우드 네이티브 공간 데이터베이스인 지오스포크(GeoSpock) 데이터베이스, 지오스포크(GeoSpock) 빅데이터 플랫폼을 아마존 웹 서비스를 기본 인프라로 하여 제공하고 있다[21]. 클라우드 네이티브 프로그래밍 모델이 빅데이터 기술의 자원 제공, 제어 프로그래밍 모델로서 활용되고 있는 좋은 예이다.
멀티 클라우드, 분산 클라우드 수요가 높아지는 추세뿐만 아니라, 딥러닝 기반 인공지능 기술과 서비스의 수요가 높아지는 것도 클라우드 네이티브 프로그래밍의 중요성이 높아지는 원인이다. 앞서 마흔세 번째에서 마흔다섯 번째[11-13] 글에서 소개한 것과 같이, 현대의 기계 학습 기반 인공지능 기술들, 특히 딥러닝을 활용하는 인공지능 기술들은 막대한 컴퓨팅 파워와 데이터를 사용해야 한다.
인공지능 기술을 활용하는 지능형 서비스를 제공하는 회사들이 필요한 컴퓨팅 자원과 모든 인공지능 기술을 갖추어 서비스를 개발할 수 없기 때문에, 할 수 없이 공용 클라우드(public cloud) 컴퓨팅 자원을 활용하거나, 구글 컴퓨터 비전 API와 같이 REST API로 서비스화된 인공지능 기술을 활용할 수밖에 없는 상황이다.
이런 상황에서 자금과 시간적인 여유가 충분하지 않은 스타트업과 일반 기업들은 클라우드 컴퓨팅 자원과 클라우드 서비스화된 인공지능 기술들을 클라우드 네이티브 프로그래밍 방식으로 자사의 사이버 물리 시스템과 지능형 서비스에 통합하여 고객에게 제공할 수밖에 없는 상황이 자주 나타날 것이다.
적절한 비용과 시간 제약 안에 지능형 서비스 상품을 개발하고 시장에 선보이기 위해서는 클라우드 컴퓨팅 자원과 클라우드 컴퓨팅 서비스로 제공되는 인공지능 기능을 서비스-지향 컴퓨팅 방식, 또는 마이크로서비스 방식으로 통합하여 원하는 서비스 상품을 만들지 않으면 다른 회사의 경쟁과 비용, 시간 압박을 이겨 내기 쉽지 않을 것이다.
이와 같이 클라우드 네이티브 프로그래밍은 빅데이터 처리, 분석에 필요한 자원 제어 프로그래밍 모델로서 다수의 클라우드 컴퓨팅 서비스와 모바일 에지 컴퓨팅, 에지 컴퓨팅과 같이 계층을 이루어 지리적으로 넓은 지역에 분산된 IT 자원을 필요에 따라 통합(integration), 연합(federation)하여 사이버 물리 시스템의 동작에 필요한 지능을 공급하는 프로그래밍 모델로서 중요한 역할을 하게 될 것이다.
이와 함께 클라우드 네이티브 프로그래밍 기법과 기술의 발전이 멀티-클라우드, 분산 클라우드 컴퓨팅 자원의 활용을 높이고 빅데이터, 사이버 물리 시스템과의 소프트웨어적 통합을 용이하게 하여 지리적으로 광범위한 영역에 걸쳐 동작하는 사이버 물리 시스템의 통합과 신뢰성 확보에 중요한 역할을 하는 선순환 과정을 일으킬 것이다.
이렇게 클라우드 네이티브 프로그래밍과 빅데이터 소프트웨어 기술, 인공지능 기술의 선순환되는 맞물림이 사이버 물리 시스템 기술의 발전을 가속화하여 기계 지능의 향상과 빅데이터 처리 기술의 발전을 가속하게 될 것이다.
이런 측면에서 앞으로 올 사이버 물리 시스템 시대를 대비하기 위해, 빅데이터 소프트웨어 엔지니어와 데이터 과학자들은 자신들의 업무 역량과 영역을 넓히고 향상하기 위해 클라우드 네이티브 프로그래밍에 익숙해지고, 자신들의 업무 영역에 자신만의 관점과 노하우를 가지고 접목시켜 기술 자산화 해놓는 것을 필자는 권한다.
양자 컴퓨터의 발전
빅데이터 소프트웨어 기술의 미래에 영향을 끼칠 중요한 기술 동향의 하나로서 양자 컴퓨팅의 발전이 주는 의미에 대해서 좀 더 생각해보자. 양자 컴퓨터가 무엇이고, 빅데이터에 어떻게 쓰일 수 있는지 모두 다루기 위해서는 다소 많은 지면이 필요하기 때문에 이 글에서 이런 내용은 생략하고, 양자 컴퓨터 기술이 빅데이터 소프트웨어 기술의 미래에 어떤 영향을 줄 것인지에 대해서만 간략하게 정리하려고 한다.
앞서 메모리 기술의 발전에 따른 메모리 계층 파괴가 메모리 자원 확장성을 높여 빅데이터 소프트웨어 기술의 내부 아키텍처 및 발전 방향에 큰 영향을 미칠 수 있다고 말한 바 있다. 앞서 마흔네 번째[12] 글에서 소개했던 프로세서-인-메모리(Processor-In-Memory; PIM) 방식의 딥러닝 전용 프로세서의 경우에도, 컴퓨터 아키텍처와 하드웨어 기반 기술의 발전이 어떻게 새로운 인공지능 기술의 발전에 영향을 줄 수 있는지 살펴볼 수 있는 사례였다.
이와 같은 맥락에서 양자 컴퓨터의 발전도 현재 소프트웨어 기술로 근본적인 해결이 어려운 빅데이터 문제들에 대해 새로운 영역 확장과 해결의 도구를 제공하는 기술로서 볼 수 있다. 양자 컴퓨터가 특히 강점을 발휘할 것으로 기대되는 영역은 기존의 계산 복잡성(computational complexity) 이론에서 NP 난제(NP-hard problem) 영역에 해당하는 알고리즘 문제들이다.
양자 컴퓨터가 효과적일 것으로 기대되는 NP 난제(NP-hard problem) 문제들은 광범위한 상태 공간(configuration space)에서의 탐색(search)과 최적화(optimization) 문제들이 될 것으로 보인다. 양자 컴퓨팅과 알고리즘의 근간이 되는 큐빗(qubit)은, 중첩성(superposition)이라는 양자 상태(quantum state)의 독특한 특성 때문에 얽힘(entanglement)과 양자 병렬성(quantum parallelism)이라는 독특한 현상이 나타나게 된다. 이 얽힘(entanglement)이 일어난 양자 상태를 이용하면, 짧은 시간에 다양한 양자 상태에서 함수의 값을 비트 수준에서 병렬 계산하는 효과를 볼 수 있다.
사실 양자 병렬성(quantum parallelism)만 가지고는 의미 있는 연산을 할 수 없다. 큐빗(qubit) 시스템이 실제 연산을 하기 위해서는 큐빗의 상태를 알아내기 위한 측정이 일어나야 하는데, 측정이 아직 수행되지 않은 양자 얽힘(quantum entanglement)을 이용해 만들어진 양자 상태는 계산하지 않은 것과 같아 쓸모가 없기 때문이다.
그렇지만 양자 상태를 알아내는 측정 과정은 일반 컴퓨터보다 매우 빠른 속도로 진행할 수 있기 때문에 일반 컴퓨터에 비해서 짧은 시간에 많은 측정을 진행할 수 있고, 이렇게 측정된 양자 상태 측정 결과를 모으면 기존 컴퓨터에 비해서 비트 수준에서 병렬로 함수값을 계산한 것과 같은 효과가 일어나 짧은 시간에 넓은 상태 공간 영역의 함수값을 계산하여 비교할 수 있다.
위와 같은 계산은 특정한 비용 함수(cost function)가 탐색 대상 상태 영역에서 가지는 값을 모두 계산해서 비용 함수가 최고, 최저가 되는 상태를 찾아내는 최적화 계산이나, 특정한 조건을 만족하는 상태를 모두 찾아내는 탐색 연산에서 그 위력을 발휘할 수 있다.
이 최적화나 탐색 연산 모두 고전적인 컴퓨터에서는 계산 시간과 자원이 비다항식(non-polynomial), 기하급수적으로 증가하는 NP 난제(NP-hard problem)이기 때문에 양자 컴퓨터를 이용하면 현재의 컴퓨터 기술로는 쉽게 계산할 수 없었던 다양한 문제의 솔루션을 찾아낼 수 있을 것으로 기대하고 있다.
최적화와 탐색 문제는 인공지능 기술에서 기계 학습(machine learning) 문제와 관련이 깊다. 현재까지 인공지능 학자들이 기계 학습을 학습하는 시스템이 상태 공간에서 최적화를 목적으로 하는 목적함수를 최적화하는 상태를 추정(estimate)하는 문제로 정의해 놓았기 때문에 양자 컴퓨터는 그 태생부터 기계 학습(machine learning) 기술과 아주 밀접한 관련을 가지고 발전할 수밖에 없는 기술이 되었다.
이런 점을 간파한 구글은 양자 컴퓨터의 가능성을 파악하기 위해 연구를 수행해왔으며, 딥러닝 기반 인공지능 기술을 도약시키기 위한 기술로서 양자 컴퓨터 기술을 상용화하여 활용하기 위해 일찍부터 많은 노력을 기울였다.
최적화와 탐색 문제는 빅데이터 문제에서도 중요하다. 일단 인공지능 기술이 빅데이터 가공, 처리, 분석을 위한 자동화에 많이 쓰이기 때문이기도 하지만, 최근의 많은 빅데이터들은 그래프 형태로 표현되는 연결 데이터(linked data)가 많기 때문이기도 하다. 그래프 형태로 표현된 빅데이터에서 의미 있는 정보들은 대부분 특정한 목적 함수의 값을 최대, 최소화하는 그래프상의 한 노드(node)나 서브-그래프(subgraph), 패턴(pattern)을 탐색하고 찾아내는 문제를 해결하는 것으로 얻어진다.
결국 최적화와 탐색 문제는 인공지능뿐만 아니라 빅데이터의 탐색과 가공에서도 중요한 역할을 하고 있기 때문에 양자 컴퓨터는 빅데이터 가공, 처리, 분석을 위한 소프트웨어 기술에서도 중요한 인프라로서 역할을 하게 될 것이다.
최근 기계 학습과 인공지능 문제에 양자 컴퓨터를 응용하기 위해 노력하고 있는 연구자들은 현재 잘 알려진 큐빗을 사용하는 양자 컴퓨터뿐만 아니라, 양자 물리학적 특성을 아날로그적으로 그대로 이용하여 문제를 해결하는 아날로그 양자 컴퓨팅이 해결할 수 있는 문제의 영역을 탐색하는 데에도 적극적이다.
양자 컴퓨터 연구자들이 대체적으로 동의하고 있는 것은 양자 컴퓨터가 고전 컴퓨터를 완전히 대체하기보다는 고전 컴퓨터가 쉽게 풀지 못하는 영역의 문제를 더 잘 풀 수 있는 컴퓨터가 될 것으로 생각하고 있다.
양자 컴퓨터가 풀 수 있는 계산의 영역이 고전 컴퓨터가 해결할 수 있는 연산의 영역보다 더 넓은지 아직 수학적으로 증명되지는 않았지만, 양자 컴퓨터가 다룰 수 있는 계산의 영역이 더 넓고 풍성할 수 있는 가능성은 여전히 열려 있기 때문에 이렇게 양자 컴퓨터가 풀 수 있는 계산 영역을 탐색하고 찾아내는 것도 중요한 문제의 하나로 보고 있다.
양자 컴퓨터 기술은 우리가 다룰 수 있는 빅데이터의 한계를 넘게 해주는 또 하나의 중요한 인프라 기술이 될 수 있을 것으로 기대되며, 이 때문에 빅데이터 소프트웨어 기술을 도약시키게끔 하는 또 하나의 중요한 기술 트렌드로 볼 수 있다. 아직 양자 컴퓨터가 어떤 문제를 더 잘 해결할 수 있을지도 완전하게 밝혀지지 않았기 때문에 양자 컴퓨터가 빅데이터 소프트웨어 기술에 미칠 수 있는 영향에 대해서는 열린 문제로 남아 있다.
빅데이터 소프트웨어 엔지니어들과 데이터 과학자들은 양자 컴퓨터 기술의 발전을 주의 깊게 지켜보면서, 양자 컴퓨터 기술이 빅데이터 비즈니스 문제 해결에 어떻게 활용될 수 있을지 탐색하고 이를 비즈니스 차별화로 어떻게 연결시킬 수 있을지 고민하면서 양자 컴퓨터 상용화에 대비하는 것이 좋겠다.
빅데이터가 인공지능보다 더 중요하다 – 데이터 과학이 사라질 수 없는 이유
지금까지 빅데이터 소프트웨어 기술의 미래에 크게 영향을 줄 네 가지 기술 동향에 대해서 살펴보았다.
먼저, 인텔 옵테인TM(OptaneTM) 메모리 기술로 상징되는 차세대 비휘발성 메모리 기술의 발전으로 메모리 계층의 단순화가 시작되고, 이로 인한 컴퓨터 아키텍처의 변화는 빅데이터 소프트웨어 기술의 필요성을 줄이거나 빅데이터 소프트웨어 기술의 발전 양상을 크게 변화시킬 수 있다고 설명하였다.
두 번째로, 함수형 프로그래밍의 확산으로 아파치 하둡(Apache Hadoop)과 아파치 스파크(Apache Spark)로 대표되는 빅데이터 소프트웨어 기술의 프로그래밍 모델이 함수형 프로그래밍 모델로 포용 되어 발전하게 될 것이라고 설명하였다.
세 번째로, 클라우드 네이티브 프로그래밍의 확산은 빅데이터 비즈니스 시스템 개발을 위해 빅데이터 처리, 분석에 필요한 IT 자원의 확보와 제어를 소프트웨어적 통합으로 변화시켜 사이버 물리 시스템의 지능을 높이는데 필요한 IT 자원의 확장성을 손쉽게 얻게 해줄 것이라고 설명하였다.
마지막으로 양자 컴퓨터로 상징되는 차세대 컴퓨팅 기술은 우리가 해결할 수 있는 빅데이터 문제의 영역을 넓혀 빅데이터 소프트웨어 기술이 새로운 단계로 도약하고, 이로 인해 빅데이터 비즈니스가 새로운 양상으로 발전할 수 있는 계기가 될 것이라고 설명하였다.
인공지능 기술의 발전으로 데이터 과학자가 사라질 것이라는 자극적인 제목의 기사가 최근 이 글이 실리고 있는 CIO Korea에 지난 11월 21일 게재된 적이 있다[22]. 이 글의 결론은 글의 자극적인 제목과는 달리 앞으로 10년 후에 데이터 과학자가 사라진다기보다는 현재 심층신경망 아키텍처의 탐색과 최적화에 많이 쓰이고 있는 AutoML 기술이 데이터 과학자들이 데이터 분석에 집중할 수 있도록 기계 학습 모델을 만드는 작업의 상당 부분을 자동화하여 편리하게 할 것이기 때문에 앞으로 10년 후 데이터 과학자들이 AutoML을 다루는 것에 익숙해져야 한다는 것이었다.
결국 인공지능 기술이 데이터 과학자들의 직장을 없애기보다는 데이터 과학자 본연의 역할에 충실할 수 있도록 기계 학습 기반의 분석 모델을 만드는 작업의 상당수를 자동화하고 편리하게 할 AutoML기술을 데이터 과학의 좋은 도구로 삼으라는 것이다.
이 글에서 말하고 싶은 필자의 결론도 그와 크게 다르지 않다. 흔히 앞서 소개한 글과 같이 인공지능 기술의 발전이 데이터 과학자가 할 일을 없애 데이터 과학자를 인공지능이 대체한다는 식의 자극적인 제목의 글을 꽤 접하게 된다. 이는 데이터 과학자와 데이터 과학의 역할을, 이들이 사용하는 일부 소프트웨어 기술과 도구로 국한해서 잘못 이해한 것 때문에 생기는 오해에 불과하다.
데이터 과학은 인간의 편견과 생각의 오류 때문에 생겼던 기업과 비즈니스 의사 결정 과정의 문제를 데이터를 기반으로 한 과학적 문제 해결 과정으로 변화시키는 여정을 안내해주는 길잡이이다. 예전에 필자가 데이터 과학에서 중요한 것은 “데이터”가 아니라 “과학”이라고 얘기한 바 있다. “데이터”는 “과학”을 하기 위해 필요한 정보를 다루기 쉽도록 만든 것에 불과하기 때문이고, 데이터 과학이 궁극적으로 지향하는 것은 과학적인 문제 해결이기 때문이다.
빅데이터 소프트웨어 기술은 데이터 과학자들이 빅데이터로부터 필요한 정보를 적절하게 추출해내는 작업을 돕고, 데이터 과학의 본질인 과학적 문제 해결에 집중할 수 있도록 돕는 도구의 하나다. 이 데이터 과학자들의 도구는 앞으로 빅데이터를 처리하는데 사용되는 컴퓨터 아키텍처와 소프트웨어 기술의 발전과 함께 또 다른 양상으로 발전해갈 것이고, 빅데이터 소프트웨어 엔지니어들과 데이터 과학자들은 이렇게 새롭게 발전해가는 빅데이터 소프트웨어 기술을 이용해 데이터 과학의 본질을 더 낫고 효과적인 방식으로 추구하게 될 것이다.
지난 마흔여섯 번째 글에서 인공지능 기술의 가을이 오고 있다고 얘기하였다[14]. 인공지능 기술에 대한 기대와 현실의 차이 때문에 인공지능 기술의 가을이 잠깐 찾아오고 있지만, 데이터 과학의 필요성은 오히려 더 높아지고 있는 상황이다.
필자의 지인이 전해준 바에 따르면, 실리콘 밸리에서도 이미 많이 배출된 데이터 과학자들 간 경쟁이 심해져 예전보다 데이터 과학자로서 직장을 구하기가 쉽지 않아졌다고 한다. 그렇지만 실리콘 밸리 기업들이 데이터 과학 자체를 하지 않겠다는 얘기는 들리지 않는다.
오히려 데이터 과학과 빅데이터를 이용한 비즈니스 모델 혁신 시도는 점점 더 늘어나고 있고, 새로운 비즈니스 표준이 되어가고 있는 상황이다. COVID-19때문에 생긴 글로벌 시장의 불확실성이 데이터를 기반으로 한 합리적이고 과학적인 의사 결정과 문제 해결의 중요성을 더 높여가고 있으며, 모든 기업들이 이 불확실성을 조금이라도 해소하기 위해 데이터 기반의 문제 해결과 의사 결정에 더 매달려가는 모습이다.
빅데이터 소프트웨어 기술은 비즈니스에 유용한 정보를 찾아내기 점점 더 힘들어지는 복잡다단한 시장에서 폭발적으로 늘어나는 넘쳐나는 데이터로부터 기업들이 금괴를 찾아낼 수 있도록 돕는 유용한 도구이다. 좋은 도구를 갖추는 것은 데이터 과학을 잘하기 위해서 필요하지만, 반대로 좋은 도구를 갖추었다고 해서 데이터 과학이 저절로 되는 것은 아니다.
앞으로 발전하는 컴퓨터 하드웨어, 소프트웨어 기술은 빅데이터 소프트웨어 기술도 발전시킬 것이고, 이렇게 더 나아진 빅데이터 소프트웨어 기술을 이용하면 데이터 과학을 좀 더 잘 할 수 있게 되는 것이다. 이를 통해 우리의 비즈니스도 더 나아지고 수익성이 높은 비즈니스로 변화해갈 수 있을 것이다.
앞서 언급한 네 가지 기술 트렌드 때문에 새로운 양상으로 발전해갈 빅데이터 소프트웨어 기술을 잘 활용하고 우리가 가진 데이터 과학 기술(art)을 더욱 날카롭게 갈고 닦도록 하자. 앞으로 달라질 빅데이터 소프트웨어 기술을 이용하면 우리가 해결할 수 있는 문제 영역도 지금은 상상할 수 없는 수준으로 넓어져 있을 것이다. 현재의 인공지능 기술은 결코 데이터 과학을 없앨 수 없고, 인공지능 기술도 데이터 과학을 위한 도구에 불과하다.
인간의 창의력과 과학적, 합리적 정신으로 무장한 문제 해결 능력은 이 세상 그 어떤 기계도 아직 넘볼 수 없는 인간만의 영역이다. 필자는 독자들이 데이터 과학의 가치를 믿고, 기업의 비즈니스를 기하급수적으로 성장시킬 수 있는 해답을 발견해내는 창조적인 일을 하는 전문가로서 자부심을 가지고 세상을 변화시켜 가는 데이터 과학자로 성장하길 기대한다.
새로운 양상으로 발전하게 될 빅데이터 소프트웨어 기술이, 5G로 상징되는 차세대 통신 기술을 통해 전례 없는 스케일로 통합되는 사이버 물리 시스템을 현실로 실현해 나가는 광경도 기대를 가지고 바라보도록 하자.
새로운 빅데이터 소프트웨어 기술을 가지고, 사이버 물리 시스템을 이용해 발전하는 지능형 서비스와 인프라를 개발하게 될 빅데이터 소프트웨어 엔지니어들은 미래 사회 인프라의 변화를 이끌어가는 첨병들이다. 이 글의 독자들이 영화에서나 볼 법한 새로운 사회 인프라를 만들고 이를 통해 세상을 바꾼다는 자부심으로 일하는 빅데이터 전문가들이 되길 필자는 다시 한번 기대한다.
[참고문헌]
[1] 김진철, “LHC에서 배우는 빅데이터와 machine learning 활용 방안”, 2016년 9월 28일, A CIO Conversation for Technology Leadership – Breakfast Roundtable 발표 자료
[2] Billy Tallis, “Intel Shares New Optane And 3D NAND Roadmap – Barlow Pass DIMMs & 144L QLC NAND in 2020,” AnandTech, September 25, 2019. (https://www.anandtech.com/show/14903/intel-shares-new-optane-and-3d-nand-roadmap)
[3] 김진철, “김진철의 How-to-Big Data | 빅데이터와 클라우드 기술 (1)”, CIO Korea, 2017년 9월 25일자. (http://www.ciokorea.com/column/35688)
[4] 김진철, “김진철의 How-to-Big Data | 빅데이터의 미래 (1)”, CIO Korea, 2019년 11월 27일자.
[5] 김진철, “김진철의 How-to-Big Data | 빅데이터의 미래 (2)”, CIO Korea, 2019년 12월 30일자.
[6] 김진철, “김진철의 How-to-Big Data | 빅데이터의 미래 (3)”, CIO Korea, 2020년 1월 28일자.
[7] 김진철, “김진철의 How-to-Big Data | 빅데이터의 미래 (4)”, CIO Korea, 2020년 2월 27일자.
[8] 김진철, “김진철의 How-to-Big Data | 빅데이터의 미래 (5)”, CIO Korea, 2020년 3월 26일자.
[9] 김진철, “김진철의 How-to-Big Data | 빅데이터의 미래 (6)”, CIO Korea, 2020년 4월 27일자.
[10] 김진철, “김진철의 How-to-Big Data | 빅데이터의 미래 (7)”, CIO Korea, 2020년 5월 27일자.
[11] 김진철, “김진철의 How-to-Big Data | 빅데이터의 미래 (9)”, CIO Korea, 2020년 7월 27일자.
[12] 김진철, “김진철의 How-to-Big Data | 빅데이터의 미래 (10)”, CIO Korea, 2020년 8월 26일자.
[13] 김진철, “김진철의 How-to-Big Data | 빅데이터의 미래 (11)”, CIO Korea, 2020년 9월 28일자.
[14] 김진철, “김진철의 How-to-Big Data | 빅데이터의 미래 (12)”, CIO Korea, 2020년 10월 30일자.
[15] “함수형 프로그래밍”, (https://ko.wikipedia.org/wiki/%ED%95%A8%EC%88%98%ED%98%95_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D, https://en.wikipedia.org/wiki/Functional_programming)
[16] 하스켈 프로그래밍 언어, (https://ko.wikipedia.org/wiki/%ED%95%98%EC%8A%A4%EC%BC%88)
[17] OCaml, (https://ko.wikipedia.org/wiki/OCaml)
[18] 존 매카시, (https://ko.wikipedia.org/wiki/%EC%A1%B4_%EB%A7%A4%EC%B9%B4%EC%8B%9C_(%EC%BB%B4%ED%93%A8%ED%84%B0_%EA%B3%BC%ED%95%99%EC%9E%90)
[19] 로빈 밀너, (https://en.wikipedia.org/wiki/Robin_Milner)
[20] A Brief History of Functional Programming, (http://www.cse.psu.edu/~gxt29//historyOfFP/historyOfFP.html)
[21] GeoSpock, Ltd., “GeoSpock DB: The world’s most advanced analytics database – Simplify real-world complexity and enable contextual understanding for the everything-connected world”. (https://geospock.com/en/)
[22] Eric Miller, “10년 후, 데이터 과학자 사라진다? – ‘오토ML’로 싹 달라진다!”, CIO Korea, 2020년 11월 21일. (https://www.ciokorea.com/news/172879)
* 김진철 박사는 1997년 한국과학기술원에서 물리학 학사, 1999년 포항공과대학교에서 인공신경망 연구로 석사 학위를, 2005년 레이저-플라즈마 가속기 연구로 박사 학위를 받았다. 2005년부터 유럽입자물리학연구소(CERN)의 LHC 데이터 그리드 구축, 개발에 참여, LHC 빅데이터 인프라를 위한 미들웨어 및 데이터 분석 기술을 연구했다. 이후 한국과학기술정보연구원(KISTI), 포항공과대학교, 삼성SDS를 거쳐 2013년부터 SK텔레콤에서 클라우드 컴퓨팅과 인공지능 기술을 연구하고 있다. 빅데이터와 인공지능 기술의 기업 활용 방안에 대해 최근 다수의 초청 강연 및 컨설팅을 수행했다. dl-ciokorea@foundryco.com