본문으로 건너뛰기
버전: 4.6.2-saas

Node.js Agent

개요​

NetFUNNEL Node 에이전트는 NetFUNNEL 서버와 통신하는 전용 클라이언트입니다.

최소 요구 사항​

  • Node.js 18 이상

에이전트 설치​

라이브러리 주입​

의존성 추가​

아래 코드를 복사하여 package.json에 의존성을 추가해주세요. 정확한 주소는 콘솔의 에이전트탭에서 확인가능합니다.

package.json

{
"dependencies": {
"netfunnel-node-agent": "{{AGENT_URL}}"
}
}

패키지 설치​

프로젝트 루트 경로에서 아래의 명령어를 사용하여 패키지를 설치합니다.

npm install

미들웨어 적용 방법​

서버의 요청을 먼저 수신하는 미들웨어에 아래와 같은 코드를 작성합니다.

Nuxt​

Nuxt 3에서는 defineEventHandler를 통해 NetFUNNEL 에이전트를 등록합니다. Netfunnel.run() 호출 후 allowed가 false이면 대기실 진입 후 리다이렉트 URL로 이동하며, 그렇지 않으면 라우팅 처리를 계속 진행합니다. Express와 달리 next() 호출이 필요 없습니다.

// server/middleware/netfunnelAgent.ts

import { sendRedirect } from 'h3';
import { Netfunnel } from 'netfunnel-node-agent';

export default defineEventHandler(async event => {
Netfunnel.initialize({
clientId : '{{CLIENT_ID}}',
secretKey: '{{SECRET_KEY}}'
});

console.log('[APP] NetFUNNEL Version:', Netfunnel.getVersion());
const allowed = await Netfunnel.run(event.node.req, event.node.res);

if (!allowed) {
const redirectUrl = (event.node.req as any)._nfRedirect || '/';
console.log(`Redirecting now to: ${redirectUrl}`);
return sendRedirect(event, redirectUrl);
}
});

Express​

Express에서는 전역 미들웨어로 NetFUNNEL을 적용합니다. Netfunnel.run()의 결과가 false이면 대기실 진입 후 리다이렉트되며, 그렇지 않으면 next()를 호출하여 다음 라우터로 진행합니다. 초기화는 app.ts에서 서버 시작 시 1회 수행합니다.

// middleware/netfunnel-middleware.ts

import { Netfunnel } from 'netfunnel-node-agent';

export function netfunnelMiddleware(req, res, next) {
Netfunnel.run(req, res).then(allowed => {
if (!allowed) {
return res.redirect(302, req._nfRedirect || '/');
}
next();
});
}
// app.ts

import express from 'express';
import { router } from './routes.js';
import { netfunnelMiddleware } from './middleware/netfunnel-middleware.js';
import { Netfunnel } from 'netfunnel-node-agent';

const app = express();
const PORT = 3000;

/* NetFUNNEL 전역 초기화 */
Netfunnel.initialize({
clientId : '{{CLIENT_ID}}',
secretKey: '{{SECRET_KEY}}'
});

app.use(netfunnelMiddleware);

app.use('/', router);

app.listen(PORT, () => {
console.log(`[APP] listening on ${PORT} (NetFUNNEL ${Netfunnel.getVersion()})`);
});

NetFUNNEL 미들웨어를 전역으로 등록하여, 모든 요청에 대해 대기열 제어를 적용합니다.

// routes.ts

import { Router } from 'express';
export const router = Router();

router.get('/', (_req, res) => res.send('Home'));
router.get('/page1', (_req, res) => res.send('Page 1'));
router.get('/page2', (_req, res) => res.send('Page 2'));
router.get('/page3', (_req, res) => res.send('Page 3'));

Initialize 설정 값​

필드명타입기본값필수설명에이전트 버전
clientIdstringN/AO콘솔에서 발급받은 클라이언트 아이디를 입력합니다.4.0.1 이상
secretKeystringN/AO콘솔에서 발급받은 암호화 키를 입력합니다.4.0.1 이상
serverUrlstringN/AXNetFUNNEL 서버의 URL입니다. CNAME을 사용하지 않고, clientId 기반의 URL 조합이 아닌 별도의 URL로 서버에 접근할 때 사용합니다.
(기존 방식과의 호환성을 위해 지원됩니다.)
4.0.1 이상
settingUrlstringN/AXNetFUNNEL 환경설정 파일의 URL입니다. CNAME을 사용하지 않고, clientId 기반의 URL 조합이 아닌 별도의 URL로 설정 파일을 불러올 때 사용합니다.
(기존 방식과의 호환성을 위해 지원됩니다.)
4.0.1 이상
vwrPageUrlstringN/AXNetFUNNEL VWR Page의 URL입니다. CNAME을 사용하지 않고, clientId 기반의 URL 조합이 아닌 별도의 URL로 대기실 페이지에 진입해야 할 때 지정합니다.4.0.1 이상
returnKeybooleantrueX사용자가 대기열을 통과해 페이지에 진입하면 즉시 다음 사용자가 입장할 수 있습니다.
옵션을 비활성화하면, 사용자가 페이지에 진입한 뒤에도 일정 시간동안 다음 사용자가 대기하게 됩니다.
(타임아웃 설정은 콘솔의 세그먼트 설정 > 고급설정에서 가능합니다.)
4.0.1 이상
printLogbooleanfalseX디버그 로그 출력 여부를 설정합니다.4.0.1 이상
goodBotsarrayN/AX선의의 봇(검색엔진 등)이 NetFUNNEL 진입 요청에서 제외되도록 설정합니다. 문자열의 배열로 값을 받습니다.
예시: ["Googlebot", "Bingbot"]
4.0.1 이상
userIdstringN/AX이 값을 입력하면 화이트리스트 및 영구 차단 사용자 구분에 ID가 사용됩니다. 콘솔의 반복 요청 차단 > 사용자 설정 > 접속자 관리에서 설정한 ID가 적용됩니다.4.0.1 이상
vwrPageDomainstringN/AXCNAME 도메인만으로 VWR Page URL을 구성할 때 사용합니다.
예시: https://vwr.example.com
4.0.1 이상
cookieDomainstringN/AX발급되는 NetFUNNEL 쿠키의 도메인(Domain) 값을 직접 지정할 수 있습니다.4.0.1 이상

에이전트 적용​

대기열 제어 지점은 NetFUNNEL 콘솔의 세그먼트 트리거 규칙을 통해 설정할 수 있습니다. 사용자가 접속한 페이지의 URL과 트리거 규칙을 비교하여 일치하는 경우 대기열이 적용됩니다.

설정 옵션​

  • Logical Operator: 두 개 이상의 트리거 규칙을 생성할 때, 서로의 관계를 and 또는 or 연산자로 결정합니다.
  • Validator: 트리거 규칙이 적용될 대상의 최상위 범위를 정의합니다. 현재는 URL만 제공하고 있습니다.
  • Component: Validator에 의해 정의된 범위 내에서 더 세부적으로 규칙을 적용할 대상을 지정합니다. 이는 URL 전체 또는 경로(Path) 등이 될 수 있으며, 특정 페이지나 자원에 규칙을 적용하는 데 사용됩니다.
  • Negate: 설정한 조건의 반대 경우를 적용하고 싶을 때 사용합니다. 예를 들어, 특정 조건이 '참'이 아닐 때 규칙을 적용하고자 할 때 이 옵션을 활성화합니다.
  • Match: 규칙이 적용될 조건의 유형을 정의합니다. 'Equals', 'Exists' 등의 옵션을 통해 특정 값과 일치하는 경우, 또는 특정 조건이 존재하는 경우 등을 기준으로 규칙을 적용할 수 있습니다.
  • Value: 규칙 적용 시 비교 대상이 되는 구체적인 값을 지정합니다. 이 값은 'Match' 조건과 함께 사용되어, 규칙이 어떤 경우에 활성화될지를 결정합니다.
  • Aa: Value에 대해 비교할 때 대소문자를 구분할지 결정합니다.

Match 옵션​

  • Exists: URL에 해당 Component가 존재하는지 확인합니다. (Component가 Path일 때만 사용 가능합니다.)
  • Equals: Component의 값과 Value가 완전히 일치하는지를 확인합니다.
  • Contains: Component의 값에 지정된 Value가 포함되어 있는지를 확인합니다.
  • StartsWith: Component의 값이 지정된 Value로 시작하는지를 확인합니다.
  • EndsWith: Component의 값이 지정된 Value로 끝나는지를 확인합니다.

트리거 규칙 테스트​

대기열을 적용하고자하는 URL이 트리거 규칙에 부합하는지 미리 확인하기 위하여 사전에 테스트할 수 있습니다.