2020.11.27

김진철의 How-to-Big Data | 빅데이터의 미래 (13)

김진철 | CIO KR

지난 서른다섯 번째 글에서 빅데이터 현상이 왜 일어나는지 같이 생각해본 바 있다. 빅데이터 현상은 사실 컴퓨터의 컴퓨팅 능력의 한계가 데이터 처리의 수요와 요구사항을 따라잡지 못하기 때문에 나타나는 현상이며, 결국 컴퓨터 기술 발전의 역사는 빅데이터 문제를 극복하는 과정의 역사라고 볼 수 있다고 설명하였다.

최근의 빅데이터 붐을 일으킨 것은 아파치 하둡(Apache Hadoop)으로 대표되는 빅데이터 병렬 처리 소프트웨어 기술들이 중심이기는 했지만, 사실 빅데이터 비즈니스에 관련된 기술과 비즈니스 요소들은 생각보다 광범위하고 다양하다는 것도 지금까지 How-to-Big Data 시리즈를 통해서 설명해왔다.

지난 서른여섯 번째 글에서 빅데이터 트렌드의 미래로서 사이버 물리 시스템(Cyber-Physical System)으로 표현할 수 있는 지능형 인프라와 서비스를 제시하였고, 이 사이버 물리 시스템을 구성하는 다양한 기술들의 역할과 미래의 가능성에 대해 지금까지 열두 편의 글을 통해 소개하였다. 
 

ⓒGetty Images


그렇지만 지금까지 사이버 물리 시스템과 클라우드 컴퓨팅, 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)와 같은 기존의 객체 지향 프로그래밍 언어, 절차적 프로그래밍 언어에서 함수형 프로그래밍 스타일을 도입하는 방식을 통해 확산되어 나갈 것으로 보인다. 

어떤 식이 됐건, 빅데이터 컴퓨팅의 프로그래밍 모델을 제공하는 추상 인터페이스로서 함수형 프로그래밍 패러다임의 확산은 빅데이터 소프트웨어 기술 발전에 깊은 영향을 미치게 될 것이다.
 




2020.11.27

김진철의 How-to-Big Data | 빅데이터의 미래 (13)

김진철 | CIO KR

지난 서른다섯 번째 글에서 빅데이터 현상이 왜 일어나는지 같이 생각해본 바 있다. 빅데이터 현상은 사실 컴퓨터의 컴퓨팅 능력의 한계가 데이터 처리의 수요와 요구사항을 따라잡지 못하기 때문에 나타나는 현상이며, 결국 컴퓨터 기술 발전의 역사는 빅데이터 문제를 극복하는 과정의 역사라고 볼 수 있다고 설명하였다.

최근의 빅데이터 붐을 일으킨 것은 아파치 하둡(Apache Hadoop)으로 대표되는 빅데이터 병렬 처리 소프트웨어 기술들이 중심이기는 했지만, 사실 빅데이터 비즈니스에 관련된 기술과 비즈니스 요소들은 생각보다 광범위하고 다양하다는 것도 지금까지 How-to-Big Data 시리즈를 통해서 설명해왔다.

지난 서른여섯 번째 글에서 빅데이터 트렌드의 미래로서 사이버 물리 시스템(Cyber-Physical System)으로 표현할 수 있는 지능형 인프라와 서비스를 제시하였고, 이 사이버 물리 시스템을 구성하는 다양한 기술들의 역할과 미래의 가능성에 대해 지금까지 열두 편의 글을 통해 소개하였다. 
 

ⓒGetty Images


그렇지만 지금까지 사이버 물리 시스템과 클라우드 컴퓨팅, 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)와 같은 기존의 객체 지향 프로그래밍 언어, 절차적 프로그래밍 언어에서 함수형 프로그래밍 스타일을 도입하는 방식을 통해 확산되어 나갈 것으로 보인다. 

어떤 식이 됐건, 빅데이터 컴퓨팅의 프로그래밍 모델을 제공하는 추상 인터페이스로서 함수형 프로그래밍 패러다임의 확산은 빅데이터 소프트웨어 기술 발전에 깊은 영향을 미치게 될 것이다.
 


X