Wonny Log,

Hello Phoenix! | 설치 방법
Engineering

Hello Phoenix! | 설치 방법

Phoenix 설치해보기

Wonny (워니)
Wonny (워니)·2022년 08월 13일 08:47

엘릭서와 언랭 설치

asdf 사용하여 설치한다. 설치 방법은 이 문서에 잘 정리되어 있다.

 

엘릭서 코드는 언랭 바이트 코드로 컴파일되고, 컴파일된 코드가 언랭 가상 머신에서 실행되므로 엘릭서와 언랭을 모두 설치해야 한다.

 

hex 설치

mix local.hex

hex는 npm과 같은 엘릭서/언랭 패키지 매니저

 

피닉스 설치

피닉스 어플리케이션 제너레이터 설치

mix archive.install hex phx_new

다음과 같이 phx.new 명령어를 사용하여 어플리케이션을 생성할 수 있고, 명령어 옵션에 대한 설명은 mix help hpx.new 명령어로 볼 수 있다.

 

# Create a new application
mix phx.new application_name

# Show detailed description of hpx.new
mix help hpx.new

 

데이터베이스 설정

피닉스는 기본적으로 PostgreSQL을 사용하도록 설정되어 있다. 어플리케이션 생성 시 --database 플래그로 다른 데이터베이스를 설정할 수도 있다.

mix phx.new application_name --database mysql

 

데이터베이스를 다루기 위해 또 다른 엘릭서 패키지인 ecto를 사용한다. 만일 어플리케이션에서 데이터베이스를 사용하지 않을 거라면 --no-ecto 플래그를 사용한다.

mix phx.new application_name --no-ecto

 

PostgreSQL 설치

로컬에 PostgreSQL를 설치하거나 도커를 사용하여 PostgreSQL를 사용한다.

 

로컬에 설치하는 방법

이 문서를 참고한다.

 

도커를 사용하는 방법

  1. 도커를 설치한 후 다음 명령어를 통해 도커를 실행한다.
    docker run --name postgres -p 49302:5432 -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -e POSTGRES_DB=postgres -d postgres
  2. 개발 환경 변수를 설정하는 파일(dev.exstest.exs)에서 데이터베이스 정보에 명령어에서 설정한 정보로 변경해준다.
    # dev.exs or test.exs
    
    config :phoenix_practice, PhoenixPractice.Repo,
      username: "postgres",
      password: "postgres",
      hostname: "localhost",
      port: 49302,
      database: "postgres",
      stacktrace: true,
      show_sensitive_data_on_connection_error: true,
      pool_size: 10

 

docker-compose를 이용하여 실행하는 방법

  1. 프로젝트 루트에 docker-compose.yaml 파일을 생성한다.
    version: "3.8"
    
    services:
      postgres:
        image: postgres:14.2
        environment:
          POSTGRES_PASSWORD: postgres
        ports:
          - "45432:5432"
  2. 개발 환경 변수를 설정하는 파일(dev.exstest.exs)에서 데이터베이스 정보에 docker-compose.yaml에 작성한 포트 번호를 추가해준다. 위의 코드 같은 경우에는 45432 포트이다.
    # dev.exs or test.exs
    
    config :db_test, DbTest.Repo,
    username: "postgres",
    password: "postgres",
    hostname: "localhost",
    port: 45432,
    database: "db_test_test#{System.get_env("MIX_TEST_PARTITION")}",
    pool: Ecto.Adapters.SQL.Sandbox,
    pool_size: 10
  3. 도커를 실행한다.
    docker compose up
    
    # 현재 터미널이 아닌 백그라운드에서 실행하고 싶을 때
    docker compose up -d

 

Hello Phoenix

피닉스 어플리케이션 생성

mix phx.new application_name
  • 어플리케이션 이름은 영어 소문자, 숫자, 언더바(_)로만 구성되어야 한다.
  • 피닉스는 git 사용을 추천하므로 어플리케이션 생성 시 .gitignore를 함께 생성한다.

 

데이터베이스 설정

피닉스는 PostgreSQL 데이터베이스 정보를 기본적으로 다음과 같이 설정해놨다. 만일 데이터베이스 정보나 계정 정보를 바꾸고 싶다면 mix ecto.create 명령어 관련 설정이 필요하다.

# dev.exs

config :db_test, DbTest.Repo,
username: "postgres",
password: "postgres",
hostname: "localhost",
database: "postgres",
stacktrace: true,
show_sensitive_data_on_connection_error: true,
pool_size: 10

 

데이터베이스 생성

mix ecto.create

실행하기

# Install deps
mix deps.get

# Run the server
mix phx.server

# Run on IEx
iex -S mix phx.server

IEx에서 실행하면 터미널에서 함수 호출 등 엘릭서 코드를 사용할 수 있다.

 

트러블 슈팅

위와 같이 피닉스 어플리케이션을 실행하는 경우 다음과 같은 경고가 나온다.

warning: the :gettext compiler is no longer required in your mix.exs.

경고 로그에 나온 것처럼 mix.exs 파일에서 다음과 같이 컴파일러 설정 부분에 [:gettext] ++를 삭제해주면 된다. 정확히 어떤 이유로 이 부분만 삭제해주면 되는 것인지는 이후에 알아봐야 할 거 같다. 현재 지식으로는 잘 모르겠다.

# mix.exs

defmodule PhoenixProject.MixProject do
  use Mix.Project

  def project do
    [
      app: :phoenix_project,
      version: "0.1.0",
      elixir: "~> 1.12",
      elixirc_paths: elixirc_paths(Mix.env()),
      compilers: Mix.compilers(), # here
      start_permanent: Mix.env() == :prod,
      aliases: aliases(),
      deps: deps()
    ]
  end
...
end
elixir
phoenix

광고를 붙이기 싫어서 후원 버튼을 추가해보았습니다. 😉 여러분의 작은 후원이 워니에게 큰 힘이 됩니다! 🥰