한빛출판네트워크

IT/모바일

창시자가 말하는 엘릭서 언어의 탄생, “실용적으로 접근한 함수형 프로그래밍”

한빛미디어

|

2022-04-19

by 조제 발림

 

9582.jpg

[조제 발림(José Valim), 엘릭서 창시자]
(사진: https://github.com/josevalim)

 

 

“엘릭서는 함수형 프로그래밍을 실용적으로 접근한 결과물”

 

저는 하드웨어의 발달이 소프트웨어 개발에 

어떤 영향을 미치는지에 항상 주목해왔습니다.

 

수십년 전에는 메모리가 대단히 귀중한 자원이었습니다. 

 

그 시절에는 프로그램이 메모리를 필요한 만큼 할당받고 

필요할 때마다 수정하는 게 일반적이었습니다. 

 

하지만 메모리를 할당하고 사용하지 않는 메모리를 

정리하는 작업은 잦은 오류를 동반했습니다. 

 

어떤 메모리 영역은 영원히 해제되지 않았고, 

때로는 이미 사용 중인 영역에 할당되어 

프로그램을 고장 내기도 했습니다. 

 

당시에도 가비지 컬렉션이라는 개념은 알려져 있었지만, 

이를 일반적인 소프트웨어 개발에 사용해 

수동 메모리 관리에서 벗어나기에는 더 빠른 CPU가 필요했습니다. 

 

시간이 흘러 CPU의 속도가 향상되었고, 

우리가 사용하는 대부분의 프로그래밍 언어들은 

이제 가비지 컬렉션을 지원합니다. 

 

최근에도 비슷한 현상이 일어나고 있습니다. 

 

CPU의 속도를 올리는 일이 한계에 부딪히자 

코어 개수가 늘어나기 시작했습니다. 

 

이제 머신을 최대한 사용하기 위해서는 

가능한 한 많은 코어를 사용해야 하지만, 이 방식은 

현재 우리가 프로그램을 작성하는 방식과는 크게 다릅니다.

 

실제로 여러 코어를 사용하는 프로그램에서 

메모리의 상태를 수정하는 것은 

소프트웨어의 성능을 떨어뜨립니다. 

 

만약 4개의 코어가 같은 메모리 영역을 참조하고 

수정하려 한다면 서로 간에 충돌이 일어날 겁니다. 

 

어떤 동기화 로직이 들어가지 않는 이상 

언젠가는 메모리의 값을 깨뜨릴 겁니다.

 

저는 이 동기화가 수동이고 

오류를 쉽게 발생시키며 

성가신 작업인 데다가 

퍼포먼스에도 좋을 게 없음을 깨달았습니다. 

 

앞으로 커리어 내내 이렇게 

시간을 낭비하고 싶지는 않다는 생각이 들어서 

새로운 언어와 기술을 공부해보기로 했습니다.

 

 

이것이 제가 얼랭 가상 머신(Erlang VM)과 

그 생태계에 빠지기까지의 이야기입니다. 

 

 

얼랭 가상 머신에서는 모든 코드가 

여러 작은 프로세스에서 동시에 실행됩니다. 

 

각 프로세스는 각자의 상태를 가지고 

메시지를 통해 서로 소통합니다. 

 

모든 커뮤니케이션이 메시지 전달을 통해 일어나므로 

얼랭 가상 머신의 중개를 통해 같은 네트워크 안에 있는 

서로 다른 머신끼리도 메시지를 주고받을 수 있습니다. 

 

분산 소프트웨어를 만들기에는 최적의 환경이지요!

 

하지만 얼랭 생태계에는 

뭔가 부족한 부분이 있다고 느꼈습니다. 

 

메타프로그래밍, 다형성, 프로덕션 환경에서 사용할 수 있는 툴과 같이 

일상적으로 사용하는 기능에 대한 지원이 더 필요했지요. 

 

 

엘릭서(Elixir)는 그런 필요로부터 탄생했습니다.

 

 

logo.png

 

 

엘릭서는 함수형 프로그래밍을 실용적으로 접근한 결과물입니다. 

함수형 프로그래밍에 가치를 두면서도 생산성에 초점을 맞췄지요. 

 

동시성은 엘릭서 소프트웨어의 뼈대입니다. 

 

가비지 컬렉션이 메모리 관리의 늪에서 개발자를 해방했듯 

엘릭서는 낡은 동시성 관리 메커니즘으로부터 

많은 이들을 해방해줄 겁니다. 

 

그리고 동시성 관리 코드를 작성하는 일이 

즐거워질 겁니다.

 

함수형 프로그래밍 언어를 사용하다 보면 

데이터를 변형하는 관점에서 생각하게 될 겁니다. 

 

각각의 함수는 데이터를 수정하는 대신 

새로운 데이터를 만들어냅니다. 

 

이 방식은 데이터 동기화 메커니즘을 

작성할 필요를 크게 줄입니다.

 

엘릭서는 매크로를 통해 개발자에게 

더 많은 자유를 주기도 합니다. 

 

엘릭서 코드는 그저 데이터일 뿐이므로, 

매크로를 사용해 코드 역시도 다른 값들과 마찬가지로 

조작할 수 있습니다.

 

또한 엘릭서는 다형성을 비롯해, 

객체지향 프로그래밍에 익숙한 개발자들이 

꼭 필요하다고 생각하는 기술들도 포함합니다.

 

이 모든 것은 얼랭 VM 위에서 만들어졌습니다. 

견고한 동시성 분산 소프트웨어를 만들기 위해 

밑바닥부터 구축된, 20여 년간 활약해온 가상 머신이죠. 

 

엘릭서와 얼랭 VM은 여러분이 

소프트웨어를 작성하는 방식을, 

 

앞으로 다가올 프로그래밍 커리어를 

바꿔줄 겁니다.

 

 

- 폴란드 텐치네크에서, 조제 발림(José Valim) -

 


 

이 글은 <처음 배우는 엘릭서 프로그래밍> 

도서 내용 일부를 발췌하여 작성되었습니다. 

 

엘릭서 창시자 조제 발림의 서문으로 시작하는 이 책은 

이미 해외에서는 대표적인 엘릭서 입문서로 알려진 

데이브 토머스의  <Programming Elixir 1.6>의 번역판입니다. 

 

데이브 토머스는 최근 20주년 기념판이 발간되며 

국내에도 잘 알려진 <실용주의 프로그래머>의 

공저자이기도 합니다. 

 

데이브 토머스와 함께 엘릭서로 떠나는 

여행을 즐기시길 바랍니다. 

 

국내에 첫 출간되는 엘릭서 바이블인만큼 

국내판에서는 엘릭서 최신 버전을 반영한 예제 코드와 

원서 출간 이후 업데이트된 내용을 정리한 

부록까지 추가해 꼼꼼하게 준비했습니다.  

 

M_535_1_300.jpg

 

『처음 배우는 엘릭서 프로그래밍』

 

댓글 입력