Quick Iteration in Elixir (Jason Axelson, ElixirConf 2022) 발표 리뷰 - 도구 벼리기 자극
’ElixirConf 2022 - Jason Axelson - Quick Iteration in Elixir - Tips from 6 Yrs of Elixir Development’ 발표를 재미있게 봤다. 팁을 가볍게 정리하고 넘기려다가 발표자의 매일 자신의 도구를 익히는 자세를 ...
’ElixirConf 2022 - Jason Axelson - Quick Iteration in Elixir - Tips from 6 Yrs of Elixir Development’ 발표를 재미있게 봤다. 팁을 가볍게 정리하고 넘기려다가 발표자의 매일 자신의 도구를 익히는 자세를 ...
Elixir에서는 두 종류의 설정 파일이 있다. 빌드 타임 설정에 사용하는 config.exs 파일과 런타임 설정에 사용하는 runtime.exs 파일이다. 두 파일 모두 사용할 수밖에 없다. 빌드 타임에 모든 걸 결정할 수 없기 때문이다. DB 접속 정보가 대표적인 예다.
Elixir 표준 라이브러리 중 key-value 자료구조에 규칙을 가진 것처럼 보이는 함수가 있다. get, fetch, fetch! 와 같은 값을 가져오는 함수이다. 자료 구조에서 값을 가져오는 함수로 fetch 를 사용하는 게 낯설었다. 어떤 규칙으로 설계했는지 궁금해졌다.
무료 ARM architecture 인스턴스를 사용하려고 Oracle Cloud 회원가입을 했다. ’Arm 기반 Ampere A1 코어 및 24GB 메모리’라니 후발주자라지만 너무 퍼주는 거 아냐? 남 걱정해 주긴 이르다. 여분 인스턴스가 없다고 안 만들어진다. 유료 서비스를 사용...
“변수 이름을 어떻게 지어야 하지?” ChatGPT와 Copilot이 도와주고 있지만 여전히 어려운 문제다. 규모가 어느 정도 되는 Codebase에서 작업을 한다면 이름 짓기 이전에 넘어야 할 산이 하나 더 있다. “어디에 코드를 넣어야 할까?”
Elixir가 아닌 다른 프로그래밍 언어를 사용해 협업하다 보면 그리운 라이브러리 중 하나가 Credo이다. code review에서 정적 분석기가 거를 수 있는 것들을 수정 요청할 때 그립다. 잔소리는 기계가 해야 한다. 개인 프로젝트를 할 때는 코드 일관성이 제대로 안 지켜지고...
Elixir, OTP, Phoenix로 웹 애플리케이션을 짜는 걸 설명하는 책이다. 어떤 애플리케이션을 만들까? 번갈아 가며 섬의 위치를 추측하는 Island Game이라는 게임을 만든다. 책 한 권을 할애해 처음부터 끝까지 짜면서 설명하기 적당한 예제다.
Elixir에서 Behaviour란 용어가 나온다. Erlang의 어깨 위에 올라서서 만든 언어라 Erlang에서 사용하는 Bahaviour라는 용어를 그대로 가져온 것 같다. C++의 pure virtual function만 정의한 클래스 혹은 C#의 interface와 비슷한 ...
Task 모듈부터 시작해 GenServer, GenStage, Flow, Broadway까지 간다. 동시성 데이터 처리에 관련된 유용한 라이브러리를 망라하고 있다. 마지막으로 나오는 Broadway가 막판 대장이다. 여러 stage를 GenStage로 꾸역꾸역 구현해서 사용하고 있...
’테스트’라고 하면 ’유닛 테스트(Unit Testing)’를 떠올린다. 좀 더 해상도를 높여서 테스트 코드를 상상하면 ’예제 기반 테스트(Example-based Testing)’을 떠올린다.
Enum.all?/1 함수를 사용한 함수 테스트할 때였던 걸로 기억한다. 비어 있는 리스트를 넣어서 테스트했을 때, 기대하지 않은 값이 나와서 의아했다. 비어 있는 리스트를 인자로 넘겼을 때, false 값이 나올 것으로 기대했다. 하지만 true 로 나오는 것이었다. Enum.a...
이제는 Clojure를 거의 안 쓴다. 요즘 많이 쓰고 있는 Elixir로 다시 구현해 볼까? 언제 이런 생각이 들었을까? 아마 Heroku에서 무료 인스턴스(dyno)를 중지한단 소식을 들었을 때였던 걸로 기억한다.
Heroku란?
프로그램에 실행 옵션을 넘기는 방법
어떤 상황에서 이런 걸 고민하게 됐는가?
구성이 마음에 들어서 책을 읽었다. otp, ecto schemas, ecto queries, phoenix를 테스트하는 방법이 목차에 담겨있다. 언어만 elixir로 바꾼 일반 테스팅 책이 아니라는 기대가 있었다. 하지만 막 감탄하면서 읽지는 않았다. 주제가 달라진다고 테스트하는...
We believe good software design is about building layers, so perhaps the most important aspect of this book is helping good programmers understand where l...
피닉스(phoenix) 웹 프레임워크를 사용하다 보면 plug 매크로를 자주 보게 된다. 어떻게 구현했는지 궁금해서 찾아보고 편의 기능과 예외 처리를 제외한 간단한 버전을 구현해봤다.
```elixir defmodule Loader do def load_some_a() do Process.sleep(:timer.seconds(1)) end
그룹 채팅 툴 slack의 elixir 클라이언트 라이브러리인 Elixir-Slack을 보다가 재미있는 코드를 발견했다. 명색이 slack 클라이언트면 slack api 호출을 편하게 할 수 있는 래핑 함수 정도는 제공해야 한다. 하지만 이게 몇 개여. 호출하는 함수를 일일이 언제...
Metaprogramming Elixir 책에서 간단한 예제를 가져왔다. HTML DSL(Domain-specific language)를 매크로로 구현하는 예제를 가져오고 싶었지만 멋진 만큼 설명이 많이 필요했다. 그래서 이거 매크로로 만들어서 어디에 쓸 거야? 하는 unless ...
GenStage - elixir로 비트코인 시세 스크랩 (feat. 업비트) 1/3 JWT - elixir로 비트코인 시세 스크랩 (feat. 업비트) 2/3 prometheus, grafana - elixir로 비트코인 시세 스크랩 (feat. 업비트) 3/3
GenStage - elixir로 비트코인 시세 스크랩 (feat. 업비트) 1/3 JWT - elixir로 비트코인 시세 스크랩 (feat. 업비트) 2/3 prometheus, grafana - elixir로 비트코인 시세 스크랩 (feat. 업비트) 3/3
GenStage - elixir로 비트코인 시세 스크랩 (feat. 업비트) 1/3 JWT - elixir로 비트코인 시세 스크랩 (feat. 업비트) 2/3 prometheus, grafana - elixir로 비트코인 시세 스크랩 (feat. 업비트) 3/3
강력한 매크로(macro)를 배우는 재미에 푹 빠졌다. 예제 코드가 다 훌륭하다.
elixir 언어에서 표준으로 쓰는 데이터베이스 래퍼(wrapper)이자 쿼리 생성기 라이브러리인 ecto를 설명한 책이다. 잘못 사용하고 있는 게 있지 않을까? 편한 걸 놔두고 어렵게 사용하고 있지 않을까? 이런 걸 배우고 싶어서 이 책을 선택했다. 생각보단 영양가가 없었다. e...
deadtrickster/prometheus.erl은 모니터링 시스템인 prometheus.io의 erlang 클라이언트다. 각종 메트릭(metric)을 프로메테우스가 파싱할 수 있는 포맷으로 텍스트를 만든다. deadtrickster/prometheus.ex는 prometheus...
telemetry는 erlang과 elixir에서 표준처럼 쓰는 메트릭(metric) 및 계측(instrumentation) 용도로 사용하는 동적 디스패치(dynamic dispatching) 라이브러리다.
우와~ elixir를 지원하네. 바로 도입해서 사용했다. elixir를 지원하는 서비스가 없어서 비교도 필요 없었다. 써보니 웬걸. 좋구나.
phoenix 웹 프레임워크는 지표(metrics) 내보내기를 쉽게 할 수 있는 prometheus_plugs 패키지가 있어서 쉽게 프로메테우스 연동을 했다. slack 봇인 slab은 어떻게 프로메테우스를 연동할 수 있을까? phoenix 웹 프레임워크를 쓰지 않은 애플리케이션이...
수집하고 분석할 지표(metric)를 phoenix 웹 프레임워크로 만든 프로젝트에서 노출한다. 프로메테우스(prometheus)는 주기적으로 노출한 지표 정보를 긁어서 저장한다. 이 데이터를 그라파나(grafana)가 보기 좋게 가공해서 보여준다.
map을 합치고 싶을 때, Map.merge/2 함수 또는 Enum.into/2 함수를 사용할 수 있다. Enum.into/2 함수는 모듈 이름처럼 더 범용적이다. map뿐만 아니라 다른 자료구조에도 사용할 수 있다.
elixir 언어로 만든 웹 프레임워크 phoenix를 설명한다. phoenix에 관심이 없더라도 추천하고픈 책이다. 잘 만든 웹 프레임워크를 내공 짱짱 맨들이 설명해주기 때문이다. elixir 언어를 만든 Jose Valim도 저자 중 한 명이다. 설명도 좋고 예제 코드도 좋다....
본격적인 사이드 프로젝트 시작에 앞서 몸풀기로 만들었다. 재미있는 주제가 안 떠올랐다. 조금 시간을 들여 뭘 만들지 고민하다가 만만한 검색 랭킹을 골랐다. 동작은 간단하다. 텔레그램 봇에 /start 명령을 입력하면 1분마다 네이버 검색 랭킹 알림이 온다. 그만 받아보려면 /end...
텔레그램은 훌륭한 메신저이자 클라이언트다. 훌륭한 클라이언트가 된 건 bot api 덕분이다. 간단한 iOS 앱을 만들려고 했는데, 텍스트로 제어가 충분하다고 생각하니 텔레그램 봇으로 만들면 되겠단 생각이 들었다. 혼자 쓸 거라 만들어 본 슬랙(slack) 봇은 과하다.
Enum 모듈과 다르게 Stream 모듈은 지연 열거를 지원한다. Stream 모듈 설명 페이지에 있는 비교 예제를 보면 차이가 명확하다.
url을 입력하면 프리뷰를 url 밑에 붙여주는 unfurling links 기능이 필요했다. gitlab을 내부망에 설치해 사용하고 있다. 내부망에 접근할 방법이 없어 slack이 기본으로 제공하는 gitlab 이슈 프리뷰가 안 나온다. slack과 gitlab에 접근할 수 있는...
다음 사이드 프로젝트는 slack 봇(bot)이다. 관리 시간을 줄일 아이디어가 떠올랐다. 언어는 요즘 쓰고 있는 elixir 언어로 결정했다. 처음부터 만들어야 하는 거 아니야? 노노. 이쪽 생태계를 무시하면 안 된다. 1986년에 발표된 32살 erlang 언어가 뒤를 든든하게...
elixir 기본을 익히기엔 <#book Programming Elixir 1.3 / Dave Thomas> 책으로 충분했다. 책에서 맛만 보여주고 만 OTP(Open Telecom Platform)를 더 보고 싶어서 고른 책이다. 만족. 두 번째 elixir 책으로 부...
{:poison, "~> 3.1"}
챕터 배치 신경 많이 썼네. 처음부터 pattern matching을 설명한다. = operator가 다른 것을 본다. 다른 세계에 왔구나. 이걸 처음부터 느낄 수 있었다. 그래서 그런지 아껴서 쓰는 control flow는 미루고 미루다가 뒤에 설명한다.