- Erlang 생태계의 강력한 기능 중 하나는 핫 코드 업데이트임
- 이 기능은 거의 다른 런타임에서는 불가능하며 매우 독특함
- Elixir는 Erlang 위에서 빌드되었으며 동일한 기능을 지원함
Elixir에서 핫 코드 업데이트 적용
- 표준적인 Elixir 릴리스(
mix release) 방식은 Erlang 핫 코드 업데이트를 기본적으로 지원하지 않음 - 핫 코드 업데이트를 구현하려면 여러 블로그 포스트를 참고하거나 Erlang 공식 문서를 세부적으로 연구해야 함
- 관련 자료:
- Learn You Some Erlang: Relups 문서
- AppSignal: Elixir 핫 코드 리로딩 가이드
핫 코드 업데이트의 실제 활용 사례
- 핫 코드 업데이트는 실무에서 크게 두 가지로 나뉨:
- 간단한 코드 리로드
- 예: 개발 중
IEx에서r MyModule또는recompile명령을 실행하는 것 - 이는 간단하고 유용하지만, 새로운 컴파일러나 빌더의 일부처럼 느껴짐
- 예: 개발 중
- 더 복잡한 응용
- Nerves 프로젝트에서 핫 코드 업데이트를 자주 활용:
- 내장 Elixir 디바이스에서 숫자를 튜닝하거나 모듈을 수정할 때, 펌웨어 업로드 및 재부팅을 기다리는 대신
IEx로 업데이트 - 애플리케이션의 특정 부분을 시작/중지하거나,
GenServer를 종료하여 상태를 초기화
- 내장 Elixir 디바이스에서 숫자를 튜닝하거나 모듈을 수정할 때, 펌웨어 업로드 및 재부팅을 기다리는 대신
- NervesHub를 통해 원격 디바이스에 핫 코드 업데이트 적용:
- 예: 실시간 클럭 디버깅 시 I2C 호출을 직접 실행하며 문제를 빠르게 파악
- Nerves 프로젝트에서 핫 코드 업데이트를 자주 활용:
- 간단한 코드 리로드
핫 코드 업데이트의 도구 및 주의사항
- Elixir의
mix release나 기존distillery도구 위에 핫 코드 업데이트를 지원하는 툴링이 늘어나길 희망 - 핫 코드 업데이트는 데이터베이스 마이그레이션처럼 세심한 주의가 필요:
- 종속성들이 핫 코드 업데이트에 어떻게 반응하는지 이해해야 함
- 기타 고려해야 할 다양한 주제 존재