2P by neo 2023-11-11 | favorite | 댓글 1개

Elixir로 전환하기

  • 새로운 직장에서 Elixir를 주요 백엔드 언어로 사용함.
  • Elixir나 Erlang 경험은 없었으나, Ruby와 유사한 문법 덕분에 쉽게 배움.
  • 객체지향 언어의 상태 관리 문제를 피하고, 불변성과 함수형 프로그래밍의 장점을 누림.

Elixir의 장점

  • 가변 상태를 가진 코드는 유지보수가 어려움.
  • Elixir는 Ruby처럼 DSL을 지원하지만, 컴파일 시간 매크로를 사용하여 런타임 코드 생성.
  • 테스트 작성 없이도 매크로 사용 오류를 컴파일 시간에 발견할 수 있음.

문법과 표현식

  • Elixir의 파이프라인 문법이 좋지만, Clojure의 'threading' 연산자를 선호함.
  • 'with' 표현식을 통해 복잡한 함수를 성공 경로와 에러 처리 부분으로 나눌 수 있음.

예외 처리

  • Ruby에서는 예외를 제어 흐름에 사용하는 것이 일반적임.
  • Elixir에서는 예외보다는 Result / Either 모나드를 사용하여 ok와 error를 반환값으로 사용함.

GN⁺의 의견

이 글에서 가장 중요한 것은 Elixir 언어가 가지는 프로그래밍의 즐거움과 유지보수의 용이성임. 객체지향 언어의 복잡한 상태 관리 문제를 해결하고, 불변성과 함수형 프로그래밍을 통해 코드의 안정성과 가독성을 높인 점이 흥미롭다. 특히, 컴파일 시간에 오류를 발견할 수 있는 매크로 시스템은 개발자에게 더욱 안정적인 코드 작성 환경을 제공한다. 이러한 특징들은 초급 소프트웨어 엔지니어들에게도 Elixir 언어 학습의 매력을 느끼게 할 것이다.

Hacker News 의견
  • Elixir 언어에 대한 관심이 최근 몇 주 동안 유튜브 비디오를 통해 증가함.

    • Elixir는 Erlang의 아이디어를 좋아하지만 실제로 사용해본 경험은 다소 기이함.
    • 분산 프로그래밍의 미래로서 격리된 프로세스와 메시지 전달(Actors)에 대한 긍정적인 전망.
    • 패턴 매칭 기능에 대한 호감, 하지만 Elixir의 LiveView와 LiveBook 같은 '마법'에 대한 회의적인 시각.
    • GenServers와 같은 Elixir 특유의 용어와 개념에 대한 낯섦.
    • 소규모 커뮤니티에 대한 위험성 인식, 하지만 커뮤니티의 성취에 대한 칭찬.
    • 타입 시스템 구현에 대한 기대감 표현.
  • Elixir/Erlang의 주요 장점으로 백그라운드 작업의 용이성 강조.

    • 이전 직장에서의 경험을 통해 Elixir의 Task를 사용하면 서버가 중단되지 않고 HTTP 요청을 처리할 수 있음을 인식.
  • Sasa Juric의 "The Soul of Erlang and Elixir" 강연을 통해 언어의 강력함을 강조.

  • 1991년부터 Erlang을 사용해온 경험 공유.

    • 다른 언어들도 사용해봤지만 Erlang이 가장 즐거움을 주는 언어임.
    • 은퇴하기 전까지 Erlang 사용을 계속할 계획.
  • Elixir를 배우고 사용하는 것이 즐거움을 주며, BEAM/OTP의 간결함과 기능성에 대한 만족감 표현.

  • Elixir의 장점으로 루비와 같은 재미와 객체지향 프로그래밍의 단점을 제거한 불변성 및 함수형 특성 강조.

    • 타입 시스템의 추가를 희망함으로써 큰 코드베이스에 대한 이해도 향상을 기대.
  • 루비에서 예외를 제어 흐름에 사용하는 것에 대한 오해 지적.

  • F# 사용자로서 Elixir의 혼란스러움을 표현.

    • 함수의 시그니처가 타입 정보를 제공하지 않아 대규모 라이브러리에서 사용이 어려움.
    • Elixir의 주요 매력 포인트에 대한 질문.
  • Elixir 사용 경험에서 배우기 쉬움, 패턴 매칭, 불변 데이터의 장점을 강조.

    • CQRS 시스템 구축에서의 뛰어남을 경험.
    • BEAM의 안정성과 GenServer의 오류 처리 방식에 대한 칭찬.
  • 새로운 기술에 대한 초기 단계의 낙관적인 인식에 대한 경고.

    • 실제로 오랜 기간 사용해본 후의 경험을 공유할 것을 권장.