북로그/독서 기록

처음 배우는 엘릭서 프로그래밍 리뷰(feat. 함수형 코딩을 빠르고 쉽게!)

동사힐 2022. 4. 20.

한빛미디어에서 국내 최초로 엘릭서를 제대로 다룬 신간이 나왔습니다.


<처음 배우는 엘릭서 프로그래밍> 표지


지난 3월 14일 화이트데이에 한빛미디어에서 사탕보다 더 달콤한 신간 <처음 배우는 엘릭서 프로그래밍 : 쉽고 빠르게 익히는 함수형 프로그래밍>을 출간했습니다. <처음 배우는 엘릭서 프로그래밍>은 엘릭서를 국내애 제대로 소개한 책이라고 할 수 있습니다. 그전에는 함수형 프로그래밍을 소개할 때 간간히 엘릭서를 언급한 서적들이 국내에 있었습니다만, 엘릭서만을 전문적으로 다룬 서적은 존재하지 않았습니다. 실제로 온라인 서점에서 엘릭서를 검색해보면, 인터넷 소설만 나오거나 2016년에 한빛미디어에서 발간한 <7가지 동시성 모델 : 프로그래머라면 알아야 할 미래를 품은>이 검색됩니다. 그만큼 엘릭서를 다룬 책이 국내에는 없었다는 것을 반증합니다. 이러한 상황에서 한빛미디어에서 이번에 발간한 <처음 배우는 엘릭서 프로그래밍>은 매우 의미있는 책이라고 할 수 있습니다.

반응형

엘릭서란?


모험을 즐기는 개발자라면 함수형 프로그래밍이자 동시성 프로그래밍 엘릭서의 세계로 떠나보자


엘릭서는 2011년에 발표된 함수형 프로그래밍 언어입니다. 2011년에 발표되었음에도 불구하고 무려 11년 동안 국내에 정식으로 소개된 책이 없었기에, 이번에 나온 <처음 배우는 엘릭서 프로그래밍>은 그동안 엘릭서를 학습하고 싶었던 많은 개발자들의 갈증을 해소할 책이라고 할 수 있습니다. <처음 배우는 엘릭서 프로그래밍>을 구체적으로 살펴보기 전에 먼저 엘릭서가 도대체 무엇인지 부터 살펴보고자 합니다.

엘릭서라 하면 아마 대부분의 독자들은 게임이나 애니메이션에 나오는 포션(물약)을 떠올릴 것입니다. 고대 연금술사의 비법으로 만들어진 엘릭서를 복용하면 HP, MP가 모두 회복하는 그런 아이템말입니다. 저는 영웅전설 시리즈 게임을 하면서 엘릭서를 처음 접했는데요. 어릴 때라서 엘릭서를 포션이 아니라 서책나 문서의 일종이라고 생각을 했고, 엘릭서를 읽으면 체력과 마력이 회복되는 개념이라고 생각하기도 했습니다. 하지만 엘릭서는 ELIXIR로 서책이나 문서와는 아무런 관련이 없는 것이었죠. 

각설하고, 엘릭서에 대해서 조금 더 자세히 설명드리겠습니다. 엘릭서는 얼랭 가상 머신(Erlang VM) 위에서 동작하는 프로그래밍 언어입니다. 기존에 흔히 알고 있는 객체지향 프로그래밍 언어와는 다르게 엘릭서는 함수형 프로그래밍 언어입니다. 수많은 프로그래밍 언어가 있는데, 왜 엘릭서가 등장을 했는지 그 이유부터 생각을 해봐야 하는데요. 그 이유에 대해서 엘릭서의 창시자이자 <처음 배우는 엘릭서 프로그래밍>의 추천사를 쓴 조제 발림은 다음과 같이 말합니다.

얼랭 가상 머신(Erlang VM) 에서는 모든 코드가 여러 작은 프로세스에서 동시에 실행됩니다. 각 프로세스는 각자의 상태를 가지고 메시지를 통해 서로 소통합니다. 모든 커뮤니케이션이 메시지 전달을 통해 일어나므로 얼랭 가상 머신의 중개를 통해 네트워크 안에 있는 서로 다른 머신끼리도 메시지를 주고 받을 수 있습니다. (중략) 하지만 얼랭은 메타프로그래밍, 다형성, 프로덕션 환경에서 사용할 수 있는 툴과 같이 일상적으로 사용하는 기능에 대한 지원이 더 필요했지요. 엘릭서는 그런 필요로부터 탄생했습니다. -<처음 배우는 엘릭서 프로그래밍> 5쪽

이처럼 엘릭서는 함수형 프로그래밍을 실용적으로 하면서 동시에 생산성을 높이기 위해 태어났습니다. 그러다보니 엘릭서는 함수형 프로그래밍 언어이면서, 동시성 프로그래밍 언어입니다. 특히 얼랭 가상 머신(Erlang VM)은 무려 세상에 나온지 30여년이 지난 가상 머신입니다. 얼랭 가상 머신(Erlang VM)은 매우 견고하게 구축되어 동시성 분산 소프트웨어가 원활하게 작동할 수 있도록 돕습니다. 

 

지금 함수형 프로그래밍 언어, 엘릭서가 중요한 이유는?


이 책은 <실용주의 프로그래머>와 <프로그래밍 루비>로 유명한 데이브 토머스가 집필했다.


엘릭서는 위에서 언급한 것처럼 얼랭 가상 머신(Erlang VM) 위에서 구동하는 함수형, 동시성 프로그래밍 언어입니다. 높은 확장성과 생산성을 가진 언어로서 메타프로그래밍을 가능케하는 혁신적인 언어인데요. 우리는 질문을 던질 수 있습니다. 엘릭서가 세상에 등장을 한 것은 2011년입니다. 그리고 <처음 배우는 엘릭서 프로그래밍>은 사실 2018년에 <Programming Elixir 1.6> 2판으로 출간된 번역한 책입니다. 하루가 빠르게 급변하는 IT 세계에서 4년 전에 출간된 책을 2022년에 번역하여 출간을 했다면, 많이 늦은 것 아닐까요? 도대체 4년 전 책을 지금 번역하여 출간한 이유가 무엇일까요? 지금 함수형 프로그래밍 언어, 엘릭서가 중요한 이유를 살펴보겠습니다.

엘릭서는 불변 데이터 구조와 액터 기반의 동시성 모델을 깔끔하고 현대적인 문법으로 감싼 함수형 프로그래밍 언어로, 업계에서 검증된 고성능의 분산 얼랭 VM 위에서 동작한다. -<처음 배우는 엘릭서 프로그래밍> 31쪽

바로 위 글의 의미를 이해하면 왜 지금 엘릭서가 중요한지에 대해서 알 수 있습니다. 동시에 객체지향 프로그래밍 언어만을 활용하던 개발자가 함수형 프로그래밍 언어를 함께 활용함으로써 얻게 되는 이점까지 알 수 있습니다. <처음 배우는 엘릭서 프로그래밍>의 저자 데이브 토머스는 "엘릭서를 사용하면 그동안 시간을 잡아먹었던 여러 문제를 더는 걱정하지 않아도 됩니다. 이제 멀티스레드 환경에서 데이터 정합성을 맞추느라 크게 고민하지 않아도 되며, 애플리케이션 스케링에 대해 걱정도 줄어듭니다. 특히 프로그래밍을 다른 방식으로 생각할 수 있습니다."라고 말합니다.

엘릭서를 학습해야 하는 이유를 조금 더 명료하고 쉽게 말하면 대규모 접속자로 인해 서버에 과부하가 생길 때 분산 시스템을 통해 서버의 부담을 줄이고, 동시에 코드를 더욱 단순하게 쉽게 작성할 수 있게 만들 수 있습니다. 이를 통해 자신이 작성한 프로그래밍 코드를 개선할 수 있고, 더 나아가서는 마치 새로운 세상을 발견한 것처럼 프로그래밍을 바라보는 자세와 관점이 완전히 달라지는 것입니다. 이는 결국 개발자에게 가장 중요한 역량인 문제해결력을 키우는 데 크게 기여합니다.

게다가 객체지향 언어인 자바스크립트도 함수형 라이브러리를 지원함으로써 함수형 프로그래밍을 작성할 수 있습니다. 결국 엘릭서를 통해서 함수형 프로그래밍에 대한 이해를 단단하게 만들면, 자바스크립트 등 다양한 방면으로 유용하게 활용할 수 있는 것입니다. 

더 나아가서는 하드웨어의 발전에 따른 더욱 유용한 코드 설계를 가능케 합니다. 사실 불과 몇년전만 하더라도 공간복잡도가 코딩테스트에서 중요한 평가 기준일 정도로 메모리는 매우 소중한 자원이었습니다. 그때에는 프로그램이 메모리를 할당받고 필요할 때마다 수정하고는 했습니다. 그러다보면 메모리에서 여러가지 오류가 발생하고는 했습니다. 

하지만 이제는 CPU 속도가 향상되었고, 대부분의 프로그래밍 언어들은 가비지 컬랙션을 지원합니다. 예전만큼 메모리가 중요하지는 않은 시대가 온 것입니다. 그러면서 CPU 속도에 한계가 오자 이제는 코어 갯수가 늘어나기 시작했습니다. 이러한 코어의 증가에 따른 최적화된 성능을 보이는 언어가 바로 엘릭서인 것입니다.

<처음 배우는 엘릭서 프로그래밍>은 이런 분들에게 추천합니다.


함수형 프로그래밍을 이해하기 위해서는 위와 같은 낯선 코드에 우선 익숙해져야 한다.


먼저 이 책은 이제 막 프로그래밍에 입문한 주니어 개발자라면, 피해야 합니다. 대부분의 주니어 개발자는 절차지향에서 시작해서 객체지향으로 넘어가는 과정을 거칩니다. 절차지향도, 객체지향도 모두 프로그래밍의 방법론일뿐인데요. 이 개념들이 명확하게 수립되지 않은 상태에서 함수형 프로그래밍까지 접하게 되면 지식의 간섭 현상이 발생할 것입니다. 물론 충분히 생각하고, 고민하고, 틀리고, 연습하고, 반복하면 모두다 섭렵 가능하겠지만, 어느 것도 온전하지 않은 상황이라면 매우 힘들 수 있습니다. 


객체지향 언어에 익숙한 개발자라면 우선 당연하게 여기는 것들을 깨야 한다.


그리고 이제 막 학교를 졸업하고, 실무에 투입된 개발자도 참아야 합니다. 자신이 투입된 프로젝트의 언어에 완전히 익숙해지고, 프로젝트를 완성할 때까지 해당 언어에 몰입하는 것이 효과적이기 때문입니다. 게다가 실무에서 코드는 혼자 구현하지 않습니다. 여럿이 함께 협업하여 작성을 하는데, 이제 막 프로젝트에 투입된 개발자가 자신만의 효율적인 코드를 작성하면 팀워크를 해치고, 다른 개발자가 코드를 이해하는데 어려움을 줄 수 있습니다. 이는 코드의 개선 및 유지에도 어려움을 끼치는데요. 대한민국 IT 기업의 특수성 상 코드를 짠 개발자와 코드를 유지보수하는 개발자가 다르다는 특성을 감안한다면 납득이 갑니다.


이처럼 엘릭서는 결국 코드의 개선을 이끌어 낸다.


그렇다면 도대체 누가 이 책을 읽어야 할까요? 저는 적어도 실무에서 4~5년, 아니면 그 이상의 경험을 가진 개발자나 리드가 읽어야 한다고 생각합니다. 특히 점차 규모가 커지고 복잡해지는 프로젝트에서 코드를 개선하고자 하는 욕구를 지닌 개발자라면 <처음 배우는 엘릭서 프로그래밍>을 읽어보면 좋다고 생각합니다. 실제로 이 책을 옮긴 권두호 역자도 비슷한 고민을 하면서 엘릭서를 접했습니다. 역자의 이야기를 잠시 들어보겠습니다.

엘릭서 개발을 시작하기 전까지 저는 함수형 프로그래밍을 거의 해본 적이 없었습니다. 굳이 찾자면 자바스크립트의 함수형 라이브러리를 조금 써본 정도일까요. 함수형 프로그래밍은 저에게 매우 어려운 이미지로 다가왔고, 지금까지의 언어와 전혀 다를 것 같은 느낌을 줬습니다. 동시성 처리도 마찬가지였습니다. (중략)

그래도 일단 팀에서 선택한 기술이니 안 배울 수는 없겠지 싶어서, 간단한 코딩 문제를 푸는 웹사이트에서 엘릭서로 이것저것 풀어보기 시작했습니다. 문제를 조금 풀면서 '함수형이 생각보다 그렇게까지 다르지는 않다'라는 생각이 들기 시작하더니, 파이프라인을 본격적으로 사용하면서 엘릭서를 대하는 자세가 크게 바뀌었습니다. (중략)

엘릭서는 참 재미있는 언어입니다. 메인 언어로 두기는 쉽지 않더라도 서브 언어로, 또는 취미로 알아두면 '이런 것도 있구나'하고 시야가 넓어지는 경험을 가져다주는 언어라고 생각합니다. 동시에 아직 열려 있는 언어입니다. 언어의 기반은 튼튼하지만 생태계는 한창 성장하고 있습니다. 이미 많은 것이 갖추어진 다른 언어들에는 없는 참여의 기회가 엘릭서에는 열려 있습니다. -<처음 배우는 엘릭서 프로그래밍> 9쪽

이 책의 권두호 역자의 말처럼 엘릭서는 무궁무진한 기회를 열어갈 언어입니다. 이를 통해서 프로그래밍을 사고하는 방식을 바꾸고, 코드를 개선하고, 대규모 시스템을 구축할 수 있게 되어 갑니다. 동시에 개발자로서 역량을 한층 더 성장하여, 말 그대로 어나 더 레벨의 개발자로 도약하는 계기가 될 것입니다. 

다만, 권두호 역자의 말처럼 엘릭서를 메인 언어로 하기는 어렵습니다. 여러 테크기업의 개발팀에서 엘릭서를 선택하기도 쉽지는 않습니다. 그럼에도 불구하고 엘릭서 생태계에 진입하고자 하는 개발자라면 <처음 배우는 엘릭서 프로그래밍>은 필수 교과서라고 할 수 있습니다.

동시에 함수형 프로그래밍 개념을 확실하게 이해하고, 개발까지 하고 싶은 독자에게도 <처음 배우는 엘릭서 프로그래밍>은 매우 유용한 책입니다.

<처음 배우는 엘릭서 프로그래밍>의 특징은?

<처음 배우는 엘릭서 프로그래밍>의 특징을 크게 3가지로 정리할 수 있습니다.

  1. 실용주의적 접근 방식을 취한다.
  2. 최신 엘릭서 버전 1.13에 맞춰 설명한다.
  3. 역자의 꼼꼼한 주석으로 이해를 돕는다.

그러면 하나씩 설명해보겠습니다. <처음 배우는 엘릭서 프로그래밍>은 엘릭서 입문서입니다. 그런데 문법이나 프레임워크에 대한 상세한 설명이나 사용법을 풀어 쓴 입문서를 흔히들 떠올립니다. 하지만 <처음 배우는 엘릭서 프로그래밍>은 그러한 상세한 사용법에 집중하지 않습니다. 아시겠지만 그러한 사용법에 집중한 책은 결국 독자로 하여금 어떠한 문제 상황에 직면했을 때 발췌독을 하게 만듭니다. 하지만 대부분의 개발자는 문제 상황에 직면하면 책을 찾지 않고 구글링이나 스택 오버플로우에서 검색을 하겠죠. 결국 그러한 입문서의 효용성은 떨어지기 마련입니다.

그러나 <처음 배우는 엘릭서 프로그래밍>은 엘릭서 이면에 깔린 함수형 프로그래밍, 액터 기반 설계를 위한 프로그래머의 사고방식 변화에 초점을 맞춥니다. 


C의 중괄호는 엘릭서의 do블록과 유사하다.


위 <처음 배우는 엘릭서 프로그래밍> 80쪽처럼 C의 코드와 엘릭서 코드를 비교하면서 설명을 하고 있습니다.

<처음 배우는 엘릭서 프로그래밍>의 파트1의 챕터에서 먼저 패턴 매칭, 불변성, 튜플, 리스트, 익명 함수, 기명 함수, 재귀 등의 개념을 먼저 집중적으로 다룹니다. 이를 통해 함수형 프로그래밍에 입문서로 역할을 합니다.


저자의 질문은 독자의 성장을 이끌어 낸다.


이후 파트2에서는 동시성 프로그래밍 관련 내용을 다루어, 독자의 이해를 돕습니다. 


엘릭서에서 함수를 사용할 수 있는 경우에는 절대 매크로를 사용하지 말라고 저자는 경고한다.


파트3에서는 심화된 내용을 다루는데 특히 매크로, 프로토콜과 다형성을 자세하게 설명하고 있습니다.


시길(sigil)은 ~로 시작하는 리터럴이며, 여러 앱으로 구성된 엘릭서 프로젝트를 엄브렐라 프로젝트라 부른다.


<처음 배우는 엘릭서 프로그래밍>의 원서는 엘릭서 1.6을 기준으로 쓰였습니다. 번역 시점의 엘릭서 최신 버전은 1.13입니다. 원서의 코드는 대부분 최신 버전에서도 돌아가지만, 역자 권두호는 이 부분을 꼼꼼하게 살펴서 최신 버전에 따른 코드 및 실행 결과를 수정해서 책에 반영했습니다. 역자의 꼼꼼함을 알 수 있는 부분이비다. 그뿐만 아니라 엘릭서 1.6 이후 추가되어 책 본문에 소개되지 않는 기능은 책 본문의 주석이나 부록 파트를 따로 집필하여 추가를 했습니다. 


이 책은 2022년 3월 현재 최신 마이너 버전 1.13에 추가된 내용도 꼼꼼하게 다루고 있다.


엘릭서 1.6 이후 추가된 기능은 다음과 같습니다.

  • 로거 개선(1.7)
  • 릴리스 기능 추가(1.9)
  • 설정 API 개선(1.9, 1.11)
  • 정렬 기능 개선(1.10)
  • 범위 타입 개선(1.12)
  • 파이프라이닝 강화(1.12)
  • 스크립팅 개선(1.12)

이 기능을 모두 <처음 배우는 엘릭서 프로그래밍>의 부록에 추가되어 있습니다.


엘릭서에 튜플에 대한 이해는 매우 중요한데, 역자의 각주로 더욱 쉽게 이해할 수 있었다.


마지막으로 이 책을 읽으면서 가장 인상 깊었던 점은 독자가 이해하기 어려운 지점마다 역자의 해설을 주석으로 단 점입니다. 저는 정말 이 부분에 대해서 매우 놀랐습니다. 어떻게 제가 막히는 부분마다 신기하게 역자의 주석이 달려 있는지 말입니다. 

저는 경영학과를 졸업한 찐문과생으로 프로그래밍에 대해서 깊은 이해를 갖고 있지는 못합니다. 그러다보니 <처음 배우는 엘릭서 프로그래밍>을 읽으면서 어려운 점이 많았는데요. 이는 객체지향 사고를 지닌 개발자 역시 함수형 언어를 접하면서 겪는 어려움보다 더 클 것입니다. 그런데 그런 제가 막히는 부분까지도 꼼꼼하게 주석을 달았다는 것은 역자가 얼마나 독자 친화적인 사고를 갖고 배려하면서 이 책을 번역했는지를 알 수 있는 부분입니다.


권두호 역자의 세심하고 꼼꼼한 각주는 이 책을 더욱 빛나게 만든다.


권두호 역자가 단순히 번역만 한 것이 아니라, 스스로 학습을 하면서 자신이 막히고 어려웠던 부분을 탐구하고 이해하면서 책을 번역하였기에 가능한 주석이라고 생각합니다. 역자의 주석만을 엮어도 소책자를 하나 발간할 수 있을 정도로 물 샐 틈없이 꼼꼼하게 해설을 작성했습니다. 

이러한 특징으로 <처음 배우는 엘릭서 프로그래밍>은 엘릭서 입문서이자 함수형 프로그래밍 개념서로 추천합니다. 

<처음 배우는 엘릭서 프로그래밍> 리뷰를 마치며

제가 처음 <처음 배우는 엘릭서 프로그래밍>을 받고 2주 가까이를 이 책에 빠져 있었습니다. 그 정도로 어려우면서도 재밌었던 책입니다. 사실 경영학을 전공해서, 어깨 너머로 코딩 관련 지식을 접한 저에게 이 책은 어찌보면 새로운 기회이기도 했습니다.

왜냐하면 기존의 개발자들이 이 책을 읽으면서 겪을만한 지식의 간섭 현상을 저는 겪지 않았기 때문입니다. 관련 배경 지식이 없으니, 백지에서 새롭게 이 책의 내용을 하나하나 뜯어볼 수 있었습니다. 


함수는 그 변형을 수행하는 자그마한 엔진이다.


특히 저는 <처음 배우는 엘릭서 프로그래밍>을 읽으면서 함수를 엔진에 빗댄 표현이 매우 인상 깊었습니다. 수많은 엔진인 함수를 동시에 돌리는 코드를 생각을 하니 가슴이 웅장해졌습니다.

물론 제가 이 책을 모두 읽어도, 사실 이 책의 절반도 이해하지 못했을 것이고, 제가 당장 엘릭서로 코드를 짤 수 있는 실력이 되지도 않았습니다. 하지만 이 책을 통해 객체지향도 함수형도 모두 프로그래밍의 방법론의 하나라는 생각을 갖게 되었으며, 함수형 코딩이 점차 IT 기업의 여러 개발팀에 확산이 되고, 이로 인해 수많은 엔진이 힘차게 돌아가는 멋진 상상을 혼자 해보았습니다. 

이는 함수형 프로그래밍 관련 서적들의 출간이 점점 늘어나는 추세만 봐도 쉽게 알 수 있습니다. 모름지기 <처음 배우는 엘릭서 프로그래밍>을 통해서 수많은 개발자들이 어나 더 레벨의 개발자로 성장하기를 바라면서, 이 글의 앞에서도 언급한 엘릭서의 창시자이자 <처음 배우는 엘릭서 프로그래밍>의 추천사를 쓴 조제 발림이 직접 말하는 엘릭서 탄생 이야기를 끝으로 이번 리뷰를 마칩니다.

 

"저는 이 동기화가 수동이고 오류를 쉽게 발생시키며 성가신 작업인 데다가 퍼포먼스에도 좋을 게 없음을 깨달았습니다. 앞으로 커리어 내내 이렇게 시간을 낭비하고 싶지는 않다는 생각이 들어서 새로운 언어와 기술을 공부해보기로 했습니다." -<처음 배우는 엘릭서 프로그래밍> 4쪽

 

 

끝으로 이 글은 한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성한 서평이지만, 철저히 주관적으로 상세하게 독자에게 도움이 되도록 적은 글임을 밝힙니다. 특히 책 외에는 일절 원고료나 광고비를 받지 않았습니다. 또한 미흡한 이해로 본문 내용 중 잘못된 내용이 있으면 댓글 부탁드립니다.
반응형

댓글

💲 추천 글