Lessons: Advanced

Taking our knowledge to the next level, these lessons get cover the advanced topics of Elixir and the BEAM.

지난 강의에서는 Elixir의 동시성에 대해 살펴보았습니다만, 더 정밀한 조작이 필요한 경우가 있습니다. 그럴 때에는 Elixir의 바탕이 된 OTP 비헤이비어를 사용할 수 있습니다.

이번 강의에서는 가장 큰 부분인 GenServer에 대해서 다루겠습니다.

슈퍼바이저(Supervisor)는 다른 프로세스의 감시라는 단 하나의 목적에 특화된 프로세스입니다. 자식 프로세스가 실패하면 자동으로 재시작해주는 것으로 장애에 대한 내성이 높은(Fault-tolerant) 애플리케이션을 만들 수 있게 해줍니다.

메타 프로그래밍은 코드를 사용해서 코드를 작성하는 방법입니다. 이를 통해 Elixir에서는 필요에 따라 언어를 확장할 수 있으며, 동적으로 코드를 변경할 수도 있습니다. Elixir가 어떤 식으로 표현되고 있는지를 확인하는 부분부터 시작해서, 이를 변경하고 확장하는 법을 배워보겠습니다.

주의: 메타 프로그래밍은 다루기 어려우며, 필요할 때에만 사용해야 합니다. 과도한 사용은 이해하기도 어렵고 디버깅하기도 어려운 복잡한 코드를 만듭니다.

때로는 프로젝트가 커지고 커져서 아주아주 커질 수도 있습니다. Mix 빌드 도구를 사용해서 작성한 코드를 여러 앱으로 나누고, 이렇게 Elixir 프로젝트가 계속해서 커져나가도 관리하기 쉽도록 유지할 수 있습니다.

이번 수업에서 @spec@type 구문을 공부해보도록 하겠습니다. @spec이 문서화 도구가 코드를 분석해서 문서화에 힘을 실어주는 구문이라면, @type은 읽고 이해하기에 더 쉬운 코드를 쓸 수 있게 도와주는 구문입니다.

이전 강좌에서 타입스펙에 관해 배웠습니다. 여기서는 모듈에서 그 사양을 구현하도록 요구하는 방법을 배우겠습니다. Elixir에서 이 기능은 비헤이비어(behaviour)라는 이름으로 불립니다.

여기에서는 프로토콜을 들여다보고, 이것이 무엇인지, Elixir에서 어떻게 사용하는지에 대해서 알아봅니다.