검수요청.png검수요청.png

얼랭

해시넷
이동: 둘러보기, 검색
얼랭(Erlang)
얼랭(Erlang)

얼랭(Erlang)은 1998년 오픈소스로 공개된 실시간 시스템을 위한 함수형 프로그래밍 언어이다. 얼랑, 에어랑, 에를랑이라고도 한다.

개요[편집]

얼랭(Erlang)은 다양한 전자 통신 프로젝트를 관리할 수 있는 소프트웨어를 쉽게 개발하도록 하기 위해 Ericsson에서 개발했다. Erlang은 다른 언어에는 없거나 다른 언어에서는 관리하기 어려운 표준 기능이 많이 있다. Erlang은 전자 통신 분야에서 사용할 목적으로 개발되었기 때문에 이러한 기능이 대부분 존재한다.[1] 덴마크의 수학자이자 통신이론을 연구한 아그너 크라루프 얼랭(Agner Krarup Erlang, 1878년 1월 1일 ~ 1929년 2월 3일)의 이름에서 따온 말이다. 초기에는 전화 및 통신 애플리케이션을 개발할 때 사용된 사설 프로그래밍이었다. 1998년 오픈소스로 전환한 후 페이스북 메신저 같은 프로젝트와 카우치디비 문서 지향 데이터베이스 관리 시스템 같은 현실적인 오픈소스 프로젝트에서 사용되어 유명세를 얻게 되었으며 현재는 널리 쓰이는 병행성 프로그래밍 언어로 자리매김하였다.

역사[편집]

  • 1986년 : 첫 번째 버전 출시
  • 1998년 : 첫 번째 오픈 소스 출시[2]

특징[편집]

과거 멀티코어 시스템이 퍼지며 주목받은, 기존과 다른 방식으로 영향을 미친 수학 함수 기반 함수형 언어이며, 운영체제가 아닌 프로그래밍 언어에 병행성이 들어 있는 언어이다. 때문에, 문법에 대한 접근 방식도 달라 그 이전까지의 언어들과는 달리 많이 낯설 수 있다. 하지만 OTP(Open Telecom Platform)라는 얼랭 전용 애플리케이션 플랫폼이 존재하여 개발 환경을 기본적으로 제공해주므로 처음 접하는 경우에도 비교적 쉽게 진행할 수 있다. 메시지를 주고받는 것만으로도 상호 작용할 수 있는 병렬 프로세스들의 집합으로 모델링 한 것이다. 얼랭에 잠금, 동기화 메소드, 애초에 존재하지 않는 공유 메모리의 위반이 없는 점이 그에 따른 장점이다. 또, 얼랭으로는 수천, 수만에서 수백만, 수천만에 이르는 극단적으로 경량인 프로세스들을 만들 수 있는데, 만들어진 프로세스들은 단일 프로세서, 멀티코어 프로세서, 프로세서들의 네트워크에서 실행될 수 있다. Erlang에는 매우 간단한 동시성 모델이 포함되어 있으며 이 모델을 이용하면 동일한 호스트에서 개별 코드 블록을 비교적 쉽게 여러 번 실행할 수 있다. 이러한 동시성 이외에도 이러한 프로세스 내에서 발생하는 실패를 새로운 프로세스를 통해 식별하고 처리할 수 있는 오류 모델을 사용한다. 따라서 개발자는 고장 허용 기능이 우수한 애플리케이션을 매우 쉽게 빌드할 수 있다. 마지막으로 Erlang에는 분산 처리 기능이 내장되어 있어서 이 기능을 이용하면 한 시스템에서는 컴포넌트를 실행하면서 다른 시스템에서는 요청을 받을 수 있다. 종합해서 말하자면 Erlang은 최신 네트워크와 웹 기반 애플리케이션을 지원하기 위해 자주 사용하는 확장 가능한 분산된 고성능 이산 애플리케이션 유형을 빌드하는 데 매우 적합한 환경을 제공한다.[1]

일반적인 특징[편집]

  • 루프 제어문이 없다.
  • 함수형 언어이기 때문에 모든 식은 값을 가져야 한다.
  • 데이터형에 대한 선언이 없다.(알아서 한다.)
  • =는 할당문이 아니다.(Lhs = Rhs의 뜻 : 오른쪽을 계산한 다음 왼쪽에 있는 패턴과 매차하라는 뜻)
  • 엄청나게 큰 숫자도 쉽게 계산할 수 있다.
  • Garbage Collector가 있다.

변수의 특징[편집]

  • 변수는 대문자로 시작해야 한다.
  • 변수는 초기값이 없을 경우에만 값을 삽입(bound)할 수 있다. 값이 없는 변수는 Unbound된 변수라고 한다.
  • 기본적으로 한 번 Bound된 변수는 다시 값을 할당할 수 없다.
  • 변수는 어떤 값에 대한 참조일 뿐이다. 그러므로 Atom, Tuple, Function과 같은 것들도 Bound 될 수 있다.[3]

병행성[편집]

병행성 프로그래밍 언어인 Erlang은 가벼운 프로세스를 아주 빠르게 생성한다. 각각의 프로세스들은 메시지 패싱에 의해 작업 지시를 받고 결과를 출력하며, ETS, DETS 메모리 영역을 제외하면 공유 메모리가 전혀 없도록 설계되어 있다. 이는 언뜻보기에 MPI(Message Passing Interface)와 유사하지만, MPI가 하나의 프로세스를 생성하는 데에 상당한 비용이 드는 것과 다르게 Erlang의 프로세스는 평범한 PC에서도 수십만개의 프로세스를 아무 문제 없이 실시간으로 생성하고, 실행하고, 지울 수 있다. 또한 서로 다른 컴퓨터라 하여도 통신망을 통해 원격에서 프로세스가 제어될 수 있으므로 대량의 하드웨어를 묶는 데에 유리하다.

  • 3.2. 패턴 매칭

패턴매칭이라고 하면 보통의 함수형 언어들에서 가지고 있는 특징이긴 한데, Erlang의 패턴매칭은 Prolog의 것을 함수형 문법으로 고친 것이라서 통상적인 함수형 언어들 보다도 유연하다는 특징이 있다. 따라서 특정한 자료의 형태를 선언하거나 읽어들이는 작업이 아주 편리하다. 특히 내부 데이터 타입이 아닌 단순 바이너리 데이터를 패턴매칭하는 기능이 있어 프로토콜 개발에 매우 유용하다.

  • 3.3. 강력한 내장 기능

Erlang은 통신 인프라를 위한 언어인 만큼 Erlang 자체만으로 통신망에서 요구되는 모든 기능들을 수행 할 수 있도록 다양한 내장 기능들을 포함하고 있다. 대표적인 것이 메모리 Key Value 저장소인 ETS[4], ETS의 디스크 저장소인 DETS, 트랜젝션이 지원되는 DBMS인 Mnesia[5], 에릭슨의 인프라 플랫폼인 OTP[6] 등이 있으며, 모두 인프라 구축용으로 검증되어있어 신뢰성이나 성능면에서 높은 수준을 자랑한다.

  • 3.4. 장애 허용

본래 인프라 구축을 위한 언어였기 때문에 장애허용 구조를 내장하고 있다는 것도 특징이다. 아이디어 자체는 아주 단순해서 병행 프로세스 가운데 일부를 감시자로 사용해서 오류가 발생한 프로세스를 깨끗하게 정리하고 재시작 시킨다는 것이다. 이때 프로세스는 아주 작은 작업 단위들이라서 하나의 프로세스가 전체 작동의 일부에 불과하므로 부분적인 장애를 무시하고 전체 프로그램은 계속 살아서 돌아가게 된다[7]. 또한 프로세스는 각자 자기만의 힙과 스택을 할당받아서 작동하기 때문에 한 프로세스에서 발생한 오류가 다른 프로세스에 영향을 줄 수 없다. 그래서 Java가 "write once, run everywhere"라면 Erlang은 "write once, run forever"가 특징이라고 말하기도 한다. 실제 Erlang으로 작성된 통신장비 소프트웨어는 가용성 99.9999999%를 찍기도 한다.[4]

활용[편집]

카우치디비(Couch DB)

얼랭은 시스템 운영 중에도 프로그램을 변경할 수 있는 핫스왑 기능이 지원되고 높은 가용성이 요구되는 대규모의 확장이 가능한 실시간 시스템(Soft Real-time System)을 구축하는 데 사용되는 프로그래밍 언어이다. 또한, 얼랭 런타임 시스템(Run-time System)은 동시성(Concurrency), 분산(Distribution), 결함 방지 능력(Fault Tolerance) 지원 시스템을 내장하고 있다. 그러다 보니 장점을 살려 통신사, 은행, 전자상거래, 통신, 모바일 메신저, 게임 등 대량의 데이터를 처리하는 서버 시스템 구축에 쓰이고 있다.[5]

카우치디비(Couch DB)는 얼랭 프로그래밍 언어를 사용하여 만들었다.

전망[편집]

보고서에 따르면, 2015년 6월 기준으로 가장 많이 활용되고 언급된 언어는 자바스크립트였다. 자바가 근소한 차이로 2위를 차지했다. PHP, 파이선 등이 3위와 4위를, C#과 C++, 루비 등이 공동 5위를 차지했다. CSS가 8위, C가 9위, 오브젝트C가 10위를 기록했다. 오그레이디는 형식적인 순위이며, 1위부터 10위 간 격차는 크지 않다고 설명했다. 이밖에 펄(Perl), 셸(shell), R, 스칼라(Scala), 고(Go), 하스켈(Haskell), 매트랩(Matlab), 스위프트(Swift), 클로저(Clojure), 그루비(Groovy), 비주얼베이직 등 순으로 상위 20위권이 형성됐다. 상위 10권은 최근 몇 년 사이 큰 변화를 보이지 않고 있다. 반면, 10위권 밖에서 변화가 활발히 벌어지고 있다. 오그레이디는 고, 얼랭(Erlang), 줄리아(Julia), 러스트(Rust), 커피스크립트(Coffeescript), 다트(Dart), 비주얼베이직, 스위프트 등에서 눈에 띄는 움직임이 나타났다고 설명했다. 그는 1년 전 “구글의 고가 6~12개월 안에 상위 20위권에 진입할 것이라 예측했었는데, 6개월 전 순위에서 17위에 올랐고, 다시 6개월 뒤 15위까지 올라섰다”고 적었다. 2015년 기준, 주목되고 있는 언어는 얼랭(Erlang)이다. 동시성(concurrency) 프로그래밍을 위한 언어로 주목받아온 얼랭은 6개월전보다(2015년 기준) 1단계 상승한 25위를 기록했다. 얼랭은 향후 세를 넓힐 기회를 얻었다. 라이선스 체계를 ‘얼랭 퍼블릭 라이선스’에서 ‘아파치v2’로 변경한 것이다. 오그레이디는 “라이선스 변화로 얼랭이 더 대중화되진 않을지라도 언어 채택 시 라이선스 간 마찰을 제거하고, 더 많은 기여자를 끌어들일 수 있을 것”이라 전망했다.[6]

긍정적 측면[편집]

동시성(Concurrency) 프로그래밍 언어로 장시간 주목받아온 얼랭은 라이선스를 얼랭 퍼블릭 라이선스(Erlang Public License)에서 아파치v2(Apache Version 2.0) 체제로 변경하면서 또 한 번 세를 넓힐 기회를 잡았다. 라이선스 변화로 얼랭이 기존보다 대중화되지는 않더라도, 언어 채택 시에 라이선스 간 마찰을 제거하고, 더 많은 사용자를 끌어들일 수 있을 것으로 보인다.[7]

부정적 측면[편집]

코볼의 행보를 따라갈 가능성이 높은 개발 언어이다. 1980년대 많은 이들의 촉망을 받으며 등장했던 신예 프로그래밍 언어 얼랭은 어느새 시간이 지나 하나의 노장 개발 언어가 되었다. 통신사, 은행, 전자상거래, 통신, 모바일 메신저, 게임 등의 실시간 환경에는 여전히 사용되고 있지만, 신생 경쟁 언어와 비교해보면 배우기가 어렵다. 다행스러운 것은 40대 이상의 중급 이상 프로그래머들에게는 아직 인기가 많다는 점이다.[8]

각주[편집]

  1. 1.0 1.1 한국데이터산업진흥원 - http://a.to/19y4hyO
  2. o테리o,〈Erlang 프로그래밍 소개, Part 1 : 기본사항〉,《티스토리》, 2013-08-26
  3. 이재학, 〈Erlang의 특징과 개념〉, 《개인 wiki》, 2018-04-13
  4. Erlang〉, 《나무위키》
  5. 출처 : 얼랭 공식 홈페이지 - https://www.erlang.org/
  6. 미도쌤, 〈요즘 뜨는 프로그래밍 언어는〉, 《네이버 블로그》, 2015-07-06
  7. 김우용 기자, 〈요즘 뜨는 프로그래밍 언어는?〉, 《지디넷 코리아》, 2015-07-07
  8. Dan Swinhoe, 〈일부러 배울 필요는 없는 프로그래밍 언어 5가지〉, 《아이티 월드》, 2018-04-02

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 얼랭 문서는 프로그래밍에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.