Elixir/Phoenix

Elixir

우리는 2020 년대에 함수형 언어 Elixir이 Web 어플리케이션 개발의 세계에서 주류가 될 것으로 예측하고 있습니다.

왜 "함수형 언어"인 것입니까? 왜 Elixir있는 것입니까.

그것은 Web 응용 프로그램을 둘러싼 환경이 빠르게 복잡해지고 있기 때문입니다. 우리는 다수의 코어와 큰 메모리를 가진 컴퓨터를 쉽게 취급 할 수있게되었습니다. 그 결과, 좋든 싫든에 관계없이 우리는 더 복잡한 Web 어플리케이션을 만들고 유지하는 것입니다.

복잡한 시스템을 제대로 작동시키기 위해 중요한 것은 시스템을 간단한 부품의 집합으로 분해하는 것입니다. 가능하면 그 부품 군은 서로 독립적으로 자율적 · 병렬 적으로 움직이는 것이 바람직합니다. 함수형 언어는 이러한 시스템을 구축하는 데 적합합니다.

함수형 언어의 종류는 많지만, 우리는 특히 Elixir 기대하고 있습니다. Elixir의 문법은 Python, PHP, Ruby, Perl 등의 Web 개발에서 인기있는 언어의 문법과 유사하며, 전환 장벽은 매우 낮습니다. 또한 패턴 매칭 및 파이프 라인 연산자 등 프로그래머의 마음을 자극하는 재미있는 특징도 가지고 있습니다.

Elixir는 2012 년에 탄생 한 새로운 언어입니다. 2019 년 현재는 기술 수명주기의 첫 단계 (Innovators)에 있다고 생각할 수 있지만1, 우리는 2020 년대의 어딘가에서 Early Adopters 단계에서 Early Majority 단계로 나아갈 것이라고 예측하고 있습니다 있습니다.

  1. 1 Programming Languages InfoQ Trends Report - October 2019

함수형 언어의 특징

대부분의 프로그래밍 언어에는 "함수"라는 개념이 존재합니다. 언어는 그것을 서브 루틴, 방법 또는 절차 부를 수도 있지만, 본질적으로 동일합니다.

따라서 처음 "함수형 언어"라는 말을들은 사람은 위화감이 있습니다. 그것은 프로그래밍 언어 전반을 지칭하는 말처럼 들린다 때문입니다. 하지만 그렇지 않습니다.

사실, "함수형 언어"라는 용어는 널리 받아 들여진 명확한 정의가 없습니다. 그래서 두 구체적인 언어, Ruby와 Elixir를 비교하여 "함수형 언어"의 특징 (의 끝)에 대해 설명합니다.

Ruby에서도 Elixir에도 프로그램의 실행에 필요한 각종 데이터 (정수, 문자열, 시간 등)에 이름으로 취급합니다. 이 이름을 '변수'라고합니다. 예를 들어, 변수 s가 문자열을 가리 키지 만,이 문자열의 길이가 3 이하인 경우에 끝에 "!"를 추가하는 처리를 생각합시다.

지금 s가 문자열 "abc"를 가리 킵니다. 이 문자열은 메모리 공간에 저장되어 있습니다. Ruby에서이 데이터를 직접 "abc!"로 변경하는 것이 가능합니다. 그러나 Elixir는 데이터 자체를 변경할 수 없습니다. 대신, 데이터를 다른 데이터로 변환합니다. 구체적으로는 "abc""!"를 연결하고 "abc!"라는 문자열을 만들고 다시 그것을 변수 s로 묶습니다.

사소한 차이처럼 보이지만 사실 결정적인 의미를 갖습니다. 만약 동일한 컴퓨터에서 두 프로그램 XY가 병렬 적으로 동작하고, 양자의 변수 s가 메모리의 동일한 위치에 저장되어있는 문자열 "abc"를 참조하고있는 상태에서 2 하나의 프로그램이 위의 작업을 거의 동시에 실행하면 어떻게 될까요.

Ruby의 경우시기에 따라 맛이 일어납니다. X가 변수 s가 가리키는 문자열의 길이가 3임을 확인 한 직후에 Y가 같은 문자열 "!"를 더한하면 다음에 X"!"를 추가하기 위하여 결국 변수 s가 가리키는 문자열 "abc!!"로 변경되어 버립니다.

그러나 Elixir는 이런 일이 발생하지 않습니다. 왜냐하면 바탕이되는 데이터는 그대로 간직한에 곁에 두어 다른 데이터를 새롭게 창출 때문입니다. 즉, Elixir는 데이터를 변경하지 않고 변환하는 것입니다.

이와 같이 변경 변환 사이에는 큰 차이가 있습니다. 함수형 언어 Elixir의 가장 큰 특징은 데이터를 변경할 수 없다는 것입니다. Elixir로 작성된 프로그램은 데이터 변환의 사슬을 통해 처리가 나갑니다. 이 데이터 변환이 수학 용어 '함수'와 유사하기 때문에 Elixir 같은 언어는 "함수"라는 것입니다.

물론 Ruby도주의 깊게 프로그래밍을하면 위와 같은 문제는 발생하지 않습니다. 그러나 인간은 실수를하게됩니다. 병렬 처리가 관계되는 장면에서는 Elixir의 것이 안전합니다.

Phoenix Framework

Phoenix Framework (이하 Phoenix)는 Elixir로 작성된 Web 애플리케이션 개발 프레임 워크입니다. Ruby on Rails에서 큰 영향을 받고 있습니다. 특히 라우팅 설정 방법 컨트롤러와 HTML 템플릿의 작성은 비슷합니다. 데이터베이스를 다루는 부분이되면 조금 분위기가 달라집니다 만, 근본적인 발상은 공통적 있습니다.

Phoenix 대해 우리가 특히 좋아하는 것은 매우 쉽게 WebSocket을 취급 할 것입니다. WebSocket은 Web 애플리케이션에서 양방향 통신을 실현하기위한 기술 표준입니다. WebSocket을 사용하면 Single Page Application (SPA)의 개발이 매우 쉬워집니다.

WebSocket 관련이 Phoenix LiveView에도 주목해야한다. 이것은 서버 측에서 HTML 데이터를 조립하여 그 차이를 WebSocket 브라우저 측에 보내 DOM을 다시 작성하는 방법으로 브라우저 화면을 업데이트합니다.

LiveView를 이용하면 지금까지 JavaScript로 작성했던 코드를 Elixir에서 쓸 수있게됩니다. 그 것은 두 가지 장점이 있습니다. 하나는 검증 처리 등을 2 개의 언어로 쓸 필요가 없어지는 것입니다. 또 하나는 대부분의 처리가 서버에서 실행되기 때문에 비밀 누설되거나 훼손 위험이 줄어든다는 것입니다.

Elixir/Phoenix에 따르면 Teamgenik 개발

우리는 2016 년에 Elixir/Phoenix에 따르면 Web 개발의 가능성을 발견하고 시험적인 응용 프로그램 개발을 통해 노하우를 획득갔습니다.

2018 년 여름, 우리는 Elixir/Phoenix을 이용하여 새로운 도전을 시작했습니다. 그것이 Teamgenik (팀 제닉)입니다.

Teamgenik는 사용자에게 "미니 SNS '의 소유자가되는 경험을 제공 서비스이지만 브라우저에서"미니 애플리케이션 "을 만들어"미니 SNS'기능을 추가 할 수있는 점에 특징이 있습니다. 우리는이 "미니 애플리케이션"의 효율적인 구현에 Elixir/Phoenix (특히 Phoenix LiveView)를 활용할 수있는 것을 간파했다.

현재 우리는 Teamgenik 개발을 밤낮으로 계속하고 있습니다. 2019 년 12 월 상순에 프리뷰 버전을 공개 할 예정입니다. 그리고 버전 1.0을 2020 년 봄에 공개 할 것을 계획하고 있습니다.