콘텐츠로 이동
📣 인포그랩에서 OpenAI 기술 기반으로 자체 개발한 자동화 번역 프로그램을 통해 n8n 공식 문서의 한글판을 국내 최초로 제공합니다.

구성#

기능 사용 가능 여부

Embed 기능을 사용하려면 Embed 라이선스가 필요합니다. Embed 사용 시점, 비용 및 라이선스 프로세스에 대한 자세한 내용은 n8n 웹사이트의 Embed 페이지를 참고하세요.

인증#

n8n의 사용자 관리를 설정하여 n8n을 보안할 수 있으며, 이는 n8n의 내장 인증 기능입니다.

n8n은 LDAPSAML을 지원합니다.

자격 증명 덮어쓰기#

사용자에게 OAuth 로그인을 제공하기 위해, 자격 증명을 전역적으로 덮어쓰는 것이 가능합니다. 이 자격 증명 데이터는 사용자에게는 보이지 않지만 백엔드에서는 자동으로 사용됩니다.

에디터 UI에서는 n8n이 기본적으로 모든 덮어쓰기된 필드를 숨깁니다. 즉, 사용자는 자격 증명에서 "연결" 버튼을 눌러 OAuth를 사용하여 인증할 수 있습니다.

n8n은 자격 증명 덮어쓰기를 적용하는 두 가지 방법을 제공합니다: 환경 변수를 사용하는 방법과 REST API를 사용하는 방법입니다.

환경 변수를 사용하는 방법#

환경 변수를 설정하여 CREDENTIALS_OVERWRITE_DATA{ CREDENTIAL_NAME: { PARAMETER: VALUE }}로 설정함으로써 자격 증명 덮어쓰기를 할 수 있습니다.

/// 경고 비록 가능하긴 하지만 권장되지 않습니다. 환경 변수는 n8n에서 보호되지 않기 때문에 데이터가 사용자에게 유출될 수 있습니다. ///

REST API를 사용하는 방법#

추천하는 방법은 사용자 지정 REST 끝점을 통해 데이터를 로드하는 것입니다. CREDENTIALS_OVERWRITE_ENDPOINT를 이 끝점을 제공해야 하는 경로로 설정합니다.

/// 노트 보안상의 이유로 끝점은 한 번에 하나만 호출할 수 있습니다. ///

예를 들어:

  1. n8n이 실행되는 환경에서 환경 변수를 설정하여 끝점을 활성화합니다:

    1
    export CREDENTIALS_OVERWRITE_ENDPOINT=send-credentials
    
  2. 덮어쓸 자격 증명이 포함된 JSON 파일이 필요합니다. 예를 들어, Asana 및 GitHub의 자격 증명을 덮어쓰기 위한 oauth-credentials.json 파일은 다음과 같을 수 있습니다:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    {
        "asanaOAuth2Api": {
            "clientId": "<id>",
            "clientSecret": "<secret>"
        },
        "githubOAuth2Api": {
            "clientId": "<id>",
            "clientSecret": "<secret>"
        }
    }
    
  3. 그런 다음 curl을 사용하여 인스턴스에 적용합니다:

    1
    curl -H "Content-Type: application/json" --data @oauth-credentials.json http://localhost:5678/send-credentials
    

/// 노트 일부 자격 증명은 다른 자격 증명에 기반 하는 경우가 있습니다. 예를 들어, googleSheetsOAuth2ApigoogleOAuth2Api를 확장합니다. 이 경우, 모든 자식 자격 증명(googleSheetsOAuth2Api)이 사용할 수 있도록 부모 자격 증명(googleOAuth2Api)의 매개변수를 설정할 수 있습니다. ///

환경 변수#

n8n은 구성할 수 있는 많은 환경 변수를 제공합니다. 호스팅 솔루션에 가장 관련성이 높은 환경 변수는 다음과 같습니다:

변수 유형 기본값 설명
EXECUTIONS_TIMEOUT Number -1 n8n이 실행을 중지하는 워크플로에 대한 기본 타임아웃(초 단위)을 설정합니다. 사용자는 EXECUTIONS_TIMEOUT_MAX에 설정된 기간까지 개별 워크플로에 대해 이를 재정의할 수 있습니다. EXECUTIONS_TIMEOUT-1로 설정하여 비활성화합니다.
EXECUTIONS_DATA_PRUNE Boolean true 지나간 실행 데이터를 순차적으로 삭제할지 여부를 결정합니다.
EXECUTIONS_DATA_MAX_AGE Number 336 삭제되기 전에 실행의 나이(시간 단위)입니다.
EXECUTIONS_DATA_PRUNE_MAX_COUNT Number 10000 데이터베이스에 유지할 최대 실행 횟수입니다. 0 = 제한 없음
NODES_EXCLUDE Array of strings - 어떤 노드를 로드하지 않을지 지정합니다. 예를 들어, 사용자가 신뢰할 수 없는 경우 보안 위험이 될 수 있는 노드를 차단하기 위해: NODES_EXCLUDE: "[\"n8n-nodes-base.executeCommand\", \"n8n-nodes-base.readWriteFile\"]"
NODES_INCLUDE Array of strings - 로드할 노드를 지정합니다.
N8N_TEMPLATES_ENABLED Boolean true 워크플로 템플릿을 활성화(true)하거나 비활성화(false)합니다.
N8N_TEMPLATES_HOST String https://api.n8n.io 자체 워크플로 템플릿 라이브러리를 만들고 있다면 이를 변경합니다. 자체 워크플로 템플릿 라이브러리를 사용하려면 API가 n8n과 동일한 끝점 및 응답 구조를 제공해야 합니다. 자세한 내용은 워크플로 템플릿을 참조하십시오.

백엔드 훅#

n8n이 특정 작업을 실행할 때마다 실행하는 외부 훅을 정의하는 것이 가능합니다. 예를 들어, 데이터를 기록하거나, 데이터를 변경하거나, 오류를 발생시켜 작업을 금지하는 데 이러한 훅을 사용할 수 있습니다.

사용 가능한 훅#

인수 설명
credentials.create [credentialData: ICredentialsDb] 새 자격 증명이 생성되기 전에 호출됩니다. 자격 증명의 수를 제한하는 데 사용합니다.
credentials.delete [id: credentialId] 자격 증명이 삭제되기 전에 호출됩니다.
credentials.update [credentialData: ICredentialsDb] 기존 자격 증명이 저장되기 전에 호출됩니다.
frontend.settings [frontendSettings: IN8nUISettings] n8n 시작 시 호출됩니다. 표시된 OAuth URL과 같은 프론트엔드 데이터를 덮어쓰는 데 사용합니다.
n8n.ready [app: App] n8n이 준비되면 한 번 호출됩니다. 사용자 정의 API 엔드포인트를 등록하는 데 사용할 수 있습니다.
n8n.stop n8n 프로세스가 중지될 때 호출됩니다. 일부 프로세스 데이터를 저장할 수 있습니다.
oauth1.authenticate [oAuthOptions: clientOAuth1.Options, oauthRequestData: {oauth_callback: string}] OAuth1 인증이 수행되기 전에 호출됩니다. OAuth 콜백 URL을 덮어쓰는 데 사용합니다.
oauth2.callback [oAuth2Parameters: {clientId: string, clientSecret: string \| undefined, accessTokenUri: string, authorizationUri: string, redirectUri: string, scopes: string[]}] OAuth2 콜백에서 호출됩니다. OAuth 콜백 URL을 덮어쓰는 데 사용합니다.
workflow.activate [workflowData: IWorkflowDb] 워크플로우가 활성화되기 전에 호출됩니다. 활성 워크플로우 수를 제한하는 데 사용합니다.
workflow.afterDelete [workflowId: string] 워크플로우가 삭제된 후 호출됩니다.
workflow.afterUpdate [workflowData: IWorkflowBase] 기존 워크플로우가 저장된 후 호출됩니다.
workflow.create [workflowData: IWorkflowBase] 워크플로우가 생성되기 전에 호출됩니다. 저장된 워크플로우 수를 제한하는 데 사용합니다.
workflow.delete [workflowId: string] 워크플로우가 삭제되기 전에 호출됩니다.
workflow.postExecute [run: IRun, workflowData: IWorkflowBase] 워크플로우가 실행된 후 호출됩니다.
workflow.preExecute [workflow: Workflow: mode: WorkflowExecuteMode] 워크플로우가 실행되기 전에 호출됩니다. 워크플로우 실행 수를 계산하거나 제한할 수 있습니다.
workflow.update [workflowData: IWorkflowBase] 기존 워크플로우가 저장되기 전에 호출됩니다.

훅 등록#

훅 함수를 포함한 훅 파일을 등록하여 훅을 설정합니다.
훅을 등록하려면 환경 변수 EXTERNAL_HOOK_FILES를 설정합니다.

변수를 단일 파일로 설정할 수 있습니다:

EXTERNAL_HOOK_FILES=/data/hook.js

또는 세미콜론으로 구분된 여러 파일을 포함하도록 설정할 수 있습니다:

EXTERNAL_HOOK_FILES=/data/hook1.js;/data/hook2.js

백엔드 훅 파일#

훅 파일은 다음 형식을 가진 일반 JavaScript 파일입니다:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
module.exports = {
    "frontend": {
        "settings": [
            async function (settings) {
                settings.oauthCallbackUrls.oauth1 = 'https://n8n.example.com/oauth1/callback';
                settings.oauthCallbackUrls.oauth2 = 'https://n8n.example.com/oauth2/callback';
            }
        ]
    },
    "workflow": {
        "activate": [
            async function (workflowData) {
                const activeWorkflows = await this.dbCollections.Workflow.count({ active: true });

                if (activeWorkflows > 1) {
                    throw new Error(
                        '활성 워크플로우 한도에 도달했습니다.'
                    );
                }
            }
        ]
    }
}

백엔드 훅 함수#

훅 또는 훅 파일은 여러 개의 훅 함수를 포함할 수 있으며, 모든 함수는 차례로 실행됩니다.

훅 함수의 매개변수가 객체인 경우, 해당 매개변수의 데이터를 변경하여 n8n의 동작을 변경할 수 있습니다.

또한, this.dbCollections를 사용하여 모든 훅 함수에서 데이터베이스에 접근할 수 있습니다 (자세한 내용은 백엔드 훅 파일 코드 샘플을 참조하세요).

프론트엔드 외부 훅#

백엔드 외부 훅과 마찬가지로, 특정 작업을 사용자가 수행할 때 n8n이 실행하는 외부 훅을 프론트엔드 코드에서 정의할 수 있습니다. 예를 들어, 데이터를 기록하고 변경하는 데 사용할 수 있습니다.

사용 가능한 훅#

설명
credentialsEdit.credentialTypeChanged 기존 자격 증명의 유형이 변경될 때 호출됩니다.
credentials.create 새로운 자격 증명이 생성될 때 호출됩니다.
credentialsList.dialogVisibleChanged
dataDisplay.nodeTypeChanged
dataDisplay.onDocumentationUrlClick 도움말 문서 링크를 선택할 때 호출됩니다.
execution.open 기존 실행이 열릴 때 호출됩니다.
executionsList.openDialog 기존 워크플로우 실행에서 실행을 선택할 때 호출됩니다.
expressionEdit.itemSelected
expressionEdit.dialogVisibleChanged
nodeCreateList.filteredNodeTypesComputed
nodeCreateList.nodeFilterChanged 노드 패널 필터에 대한 변경이 있을 때 호출됩니다.
nodeCreateList.selectedTypeChanged
nodeCreateList.mounted
nodeCreateList.destroyed
nodeSettings.credentialSelected
nodeSettings.valueChanged
nodeView.createNodeActiveChanged
nodeView.addNodeButton
nodeView.createNodeActiveChanged
nodeView.mount
pushConnection.executionFinished
showMessage.showError
runData.displayModeChanged
workflow.activeChange
workflow.activeChangeCurrent
workflow.afterUpdate 기존 워크플로우가 업데이트될 때 호출됩니다.
workflow.open
workflowRun.runError
workflowRun.runWorkflow 워크플로우가 실행될 때 호출됩니다.
workflowSettings.dialogVisibleChanged
workflowSettings.saveSettings 워크플로우의 설정이 저장될 때 호출됩니다.

훅 등록#

페이지에서 훅 스크립트를 로드하여 훅을 설정할 수 있습니다. 이를 수행하는 한 가지 방법은 프로젝트에 훅 파일을 만들고 editor-ui/public/index.html 파일에 스크립트 태그를 추가하는 것입니다:

1
<script src="frontend-hooks.js"></script>

프론트엔드 훅 파일#

프론트엔드 외부 훅 파일은 다음 형식을 가진 일반 JavaScript 파일입니다:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
window.n8nExternalHooks = {
  nodeView: {
    mount: [
      function (store, meta) {
        // 작업 수행
      },
    ],
    createNodeActiveChanged: [
      function (store, meta) {
        // 작업 수행
      },
      function (store, meta) {
        // 다른 작업 수행
      },
    ],
    addNodeButton: [
      function (store, meta) {
        // 작업 수행
      },
    ],
  },
};

프론트엔드 훅 함수#

각 훅에 대해 여러 개의 훅 함수를 정의할 수 있습니다. 각 훅 함수는 다음과 같은 인수를 사용하여 호출됩니다:

  • store: Vuex 스토어 객체. 이를 사용하여 스토어에서 데이터를 변경하거나 가져올 수 있습니다.
  • metadata: 훅에 의해 제공된 데이터를 포함하는 객체입니다. 전달된 내용을 확인하려면 editor-ui 패키지에서 훅을 검색해 보세요.
인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!