Phoenix.Endpoint behaviour

에단(손형규)·2022년 7월 7일

Phoenix endpoint를 정의합니다.

엔드포인트는 웹 애플리케이션에 대한 모든 요청이 시작되는 경계입니다. 또한 애플리케이션이 기본 웹 서버에 제공하는 인터페이스입니다.

전반적으로 끝점에는 세 가지 책임이 있습니다.

  • 감독 트리의 일부로 끝점을 시작 및 중지하기 위한 래퍼 제공

  • 통과할 요청에 대한 초기 플러그 파이프라인을 정의하기 위해

  • 애플리케이션에 대한 웹 특정 구성을 호스팅하기 위해

Endpoints

Endpoints는 단순히 Phoenix.Endpoint의 도움으로 정의된 모듈입니다. mix phx.new 생성기를 사용한 경우 엔드포인트가 애플리케이션의 일부로 자동 생성되었습니다.

defmodule YourAppWeb.Endpoint do
  use Phoenix.Endpoint, otp_app: :your_app

  # plug ...
  # plug ...

  plug YourApp.Router
end

엔드포인트는 애플리케이션 감독 트리의 일부로 명시적으로 시작되어야 합니다. 엔드포인트는 기본적으로 생성된 애플리케이션의 감독 트리에 추가됩니다. 엔드포인트는 다음과 같이 감독 트리에 추가할 수 있습니다.

children = [
  YourAppWeb.Endpoint
]

Endpoint configuration

모든 엔드포인트는 애플리케이션 환경에서 구성됩니다. 예를 들어:

config :your_app, YourAppWeb.Endpoint,
  secret_key_base: "kjoy3o1zeidquwy1398juxzldjlksahdk3"

엔드포인트 구성은 두 가지 범주로 나뉩니다. 컴파일 시간 구성은 컴파일 중에 구성을 읽고 런타임에 변경해도 아무런 영향이 없음을 의미합니다. 컴파일 타임 구성은 대부분 오류 처리와 관련이 있습니다.

대신 런타임 구성은 애플리케이션이 시작되는 동안이나 시작된 후에 액세스되며 config/2 기능을 통해 읽을 수 있습니다.

YourAppWeb.Endpoint.config(:port)
YourAppWeb.Endpoint.config(:some_config, :default_value)

Dynamic configuration

환경 변수 또는 구성 파일에서 데이터를 로드하는 것과 같이 엔드포인트를 동적으로 구성하기 위해 Phoenix는 엔드포인트에서 init/2 콜백을 호출하여 atom :supervisor를 첫 번째 인수로, 엔드포인트 구성을 두 번째 인수로 전달합니다.

아래의 컴파일 시간 구성을 제외한 모든 Phoenix 구성은 init/2 콜백에서 동적으로 설정할 수 있습니다.

Compile-time configuration

  • :code_reloader - true인 경우 코드 다시 로드 기능을 활성화합니다. 코드 리로더 구성 옵션 목록은 Phoenix.CodeReloader.reload/1을 참조하세요. 코드 재로딩은 파일 시스템을 기반으로 하므로 개발 중인 코드 재로딩으로 동일한 앱의 두 인스턴스를 동시에 실행할 수 없습니다. 서로 경쟁하고 하나만 파일을 효과적으로 재컴파일하기 때문입니다. . 이러한 경우 구성 파일을 조정하여 앱 중 하나에서만 코드 다시 로드가 활성화되도록 하거나 MIX_BUILD 환경 변수를 설정하여 앱에 고유한 빌드 디렉토리를 제공하십시오.

  • :debug_errors - true인 경우 응용 프로그램에서 오류를 디버깅하기 위해 Plug.Debugger 기능을 사용합니다. 디버깅하는 동안 애플리케이션 소스 코드를 나열할 수 있으므로 개발 시에만 true로 설정하는 것이 좋습니다. 기본값은 false

  • :force_ssl - HTTP를 통해 데이터가 전송되지 않도록 하고 항상 HTTPS로 리디렉션합니다. Plug.SSL에 전달되는 옵션 목록이 필요합니다. 기본적으로 HTTPS 요청에서 "strict-transport-security" 헤더를 설정하여 브라우저가 항상 HTTPS를 사용하도록 합니다. 안전하지 않은 요청(HTTP)이 전송되면 :url 구성에 지정된 :host를 사용하여 HTTPS 버전으로 리디렉션됩니다. 현재 요청의 호스트로 동적으로 리디렉션하려면 :force_ssl 구성에서 :host를 nil로 설정하십시오.

Runtime configuration

  • :adapter - 웹 요청을 처리하는 데 사용할 웹 서버 어댑터. 아래의 "어댑터 구성" 섹션을 참조하십시오.

  • :cache_static_manifest - 정적 파일과 요약된 버전이 포함된 json 매니페스트 파일의 경로입니다. 이것은 일반적으로 mix phx.digest에 의해 자동으로 생성되는 파일인 "priv/static/cache_manifest.json"으로 설정됩니다. 파일 시스템 경로를 포함하는 문자열 또는 응용 프로그램 이름과 해당 응용 프로그램 내의 경로가 포함된 튜플 중 하나일 수 있습니다.

  • :cache_static_manifest_latest - 다이제스트 버전을 가리키는 정적 파일의 맵. 이것은 부팅 시 cache_static_manifest에서 자동으로 로드됩니다. 그러나 고유한 정적 처리 메커니즘이 있는 경우 이 값을 명시적으로 설정할 수 있습니다. 이것은 클라이언트가 모든 자산의 최신 버전에서 실행되고 있는지 감지하기 위해 LiveView와 같은 프로젝트에서 사용됩니다.

  • :cache_manifest_skip_vsn - true인 경우 정적 자산에 대한 일반 경로인 경우 추가된 쿼리 문자열 "?vsn=d"를 건너뜁니다. 이 쿼리 문자열은 Plug.Static에서 긴 만료 날짜를 설정하는 데 사용되므로 Plug.Static을 사용하여 자산을 제공하지 않는 경우(예: CDN을 사용하는 경우)에만 이 옵션을 true로 설정해야 합니다. 이 옵션을 설정하는 경우 --no-vsn을 전달하여 phx.digest를 혼합하는 것도 고려해야 합니다. 기본값은 false입니다.

  • :check_origin - 전송에 대한 기본 :check_origin 설정을 구성합니다. 옵션은 socket/3을 참조하십시오. 기본값은 true입니다.

  • :secret_key_base - 데이터 암호화 및 서명을 위한 비밀을 생성하기 위한 기반으로 사용되는 비밀 키입니다. 예를 들어 쿠키와 토큰은 기본적으로 서명되지만 원하는 경우 암호화될 수도 있습니다. 애플리케이션별로 설정해야 하므로 기본값은 nil입니다.

  • :server - true인 경우 엔드포인트 감독 트리가 시작될 때 웹 서버를 시작합니다. 기본값은 false입니다. mix phx.server 작업은 이를 자동으로 true로 설정합니다.

  • :url - 앱 전체에서 URL을 생성하기 위한 구성입니다. :host, :scheme, :path 및 :port 옵션을 허용합니다. :path를 제외한 모든 키는 런타임에 변경할 수 있습니다. 기본값:

[host: "localhost", path: "/"]

:port 옵션에는 정수 또는 문자열이 필요합니다. :host 옵션에는 문자열이 필요합니다.

:scheme 옵션은 "http" 및 "https" 값을 허용합니다. 기본값은 최상위 수준 :http 또는 :https 옵션에서 유추됩니다. 로드 밸런서 또는 역방향 프록시 뒤에서 Phoenix를 호스팅하고 거기에서 SSL을 종료할 때 유용합니다.

:path 옵션을 사용하여 루트 경로를 재정의할 수 있습니다. URL 재작성 규칙이 있는 역방향 프록시 뒤에서 Phoenix를 호스팅할 때 유용합니다.

:static_url - 정적 파일에 대한 URL을 생성하기 위한 구성입니다. 옵션이 제공되지 않으면 URL로 대체됩니다. url과 동일한 옵션을 허용합니다.

:watchers - 서버와 함께 실행할 감시자 집합입니다. 실행 파일과 해당 인수를 포함하는 튜플 목록이 필요합니다. 감시자는 응용 프로그램 디렉터리에서 실행되지만 서버가 활성화된 경우에만 실행됩니다(:force_watchers 구성이 true로 설정되지 않은 경우). 예를 들어 아래의 감시자는 서버가 시작될 때 웹팩 빌드 도구의 "감시" 모드를 실행합니다. 원하는 빌드 도구 또는 명령으로 구성할 수 있습니다.

[
  node: [
    "node_modules/webpack/bin/webpack.js",
    "--mode",
    "development",
    "--watch",
    "--watch-options-stdin"
  ]
]

:cd 및 :env 옵션은 감시자를 사용자 지정하기 위해 목록 끝에 제공될 수 있습니다.

[node: [..., cd: "assets", env: [{"TAILWIND_MODE", "watch"}]]]

감시자는 또한 그에 따라 호출되는 module-function-args 튜플일 수도 있습니다.

[another: {Mod, :fun, [arg1, arg2]}]
  • :force_watchers - true인 경우 :server 옵션이 false로 설정된 경우에도 감시자가 강제로 시작됩니다.

  • :live_reload - 라이브 다시 로드 옵션에 대한 구성입니다. 구성에는 감시할 파일 패턴 목록이어야 하는 :patterns 옵션이 필요합니다. 이러한 파일이 변경되면 다시 로드가 트리거됩니다. 개발 중에 pow와 같은 도구를 사용하는 경우 :url 옵션을 적절하게 설정해야 할 수 있습니다.

live_reload: [
  url: "ws://localhost:4000",
  patterns: [
    ~r{priv/static/.*(js|css|png|jpeg|jpg|gif)$},
    ~r{web/views/.*(ex)$},
    ~r{web/templates/.*(eex)$}
  ]
]
  • :pubsub_server - 채널 및 엔드포인트 브로드캐스트 기능을 통해 사용할 pubsub 서버의 이름입니다. PubSub 서버는 일반적으로 감독 트리에서 시작됩니다.

  • :render_errors - 응용 프로그램에 오류가 있을 때마다 템플릿을 렌더링하는 역할을 합니다. 예를 들어, HTML 요청 중에 응용 프로그램이 500 오류로 충돌하면 render("500.html", assigns)가 :render_errors에 지정된 보기에서 호출됩니다. 기본값:

[view: MyApp.ErrorView, accepts: ~w(html), layout: false, log: :debug]

연결에 아무 것도 설정되지 않은 경우 기본 형식이 사용됩니다.

Adapter configuration

Phoenix를 사용하면 사용할 웹 서버 어댑터를 선택할 수 있습니다. 기본값은 다음 최상위 옵션을 통해 구성할 수 있는 Phoenix.Endpoint.Cowboy2Adapter입니다.

  • :http - HTTP 서버에 대한 구성. Plug.Cowboy에서 정의한 모든 옵션을 허용합니다. 기본값은 false

  • :https - HTTPS 서버에 대한 구성. Plug.Cowboy에서 정의한 모든 옵션을 허용합니다. 기본값은 false

  • :drainer - 진행 중인 요청이 완료될 때까지 기다리기 위해 애플리케이션이 종료될 때 트리거되는 드레이너 프로세스입니다. Plug.Cowboy.Drainer가 정의한 모든 옵션을 허용합니다. 기본값은 []이며 구성된 각 끝점에 대해 드레이너 프로세스를 시작하지만 false로 설정하여 비활성화할 수 있습니다.

Endpoint API

이전 섹션에서는 엔드포인트에서 자동으로 생성되는 config/2 함수를 사용했습니다. 다음은 엔드포인트에서 자동으로 정의되는 모든 함수의 목록입니다.:

  • for handling paths and URLs: struct_url/0, url/0, path/1, static_url/0,static_path/1, and static_integrity/1

  • for broadcasting to channels: broadcast/3, broadcast!/3, broadcast_from/4, broadcast_from!/4, local_broadcast/3, and local_broadcast_from/4

  • for configuration: start_link/1, config/2, and config_change/2

  • as required by the Plug behaviour: Plug.init/1 and Plug.call/2

profile
asdasdasdasd

0개의 댓글