API 참조
NetFUNNEL React Native Agent 함수, 콜백 및 응답 형식에 대한 완전한 참조입니다.
기본 제어 함수
기본 제어는 서비스에 대한 진입 속도를 제한합니다. 시작 함수가 호출되면 키가 발급되고 대기실이 나타납니다. 종료 함수가 호출되면 키가 반납됩니다.
Netfunnel.nfStart
목적: 작업 시작 시 키를 발급하고 대기실을 표시합니다.
함수 시그니처:
Netfunnel.nfStart(projectKey, segmentKey, callback)
매개변수:
| 매개변수 | 유형 | 설명 |
|---|---|---|
projectKey | String | 콘솔의 기본 제어 프로젝트 키 |
segmentKey | String | 콘솔의 기본 제어 세그먼트 키 |
callback | Function | 대기실 이벤트 처리를 위한 사용자 정의 콜백 함수 |
반환값: undefined
예제:
Netfunnel.nfStart("{{PROJECT_KEY}}", "{{SEGMENT_KEY}}", function(response) {
// 응답 처리 - 콜백 함수 섹션 참조
nfCallback(response);
});
콜백 처리: 자세한 응답 처리 내용은 콜백 함수 섹션을 참조하세요.
Netfunnel.nfStop
목적: 진입이 완료된 후 키를 반환합니다.
함수 시그니처:
Netfunnel.nfStop(projectKey, segmentKey)
매개변수:
| 매개변수 | 유형 | 설명 |
|---|---|---|
projectKey | String | 콘솔의 기본 제어 프로젝트 키 |
segmentKey | String | 콘솔의 기본 제어 세그먼트 키 |
반환값: undefined
예제:
Netfunnel.nfStop("{{PROJECT_KEY}}", "{{SEGMENT_KEY}}");
종료 함수를 실행하지 않으면 세그먼트 타임아웃 설정에 따라 키가 자동으로 반납됩니다 (기본 타임아웃: 20초).
구간 제어 함수
구간 제어는 특정 애플리케이션 구간 내의 동시 사용자 수를 고정된 값으로 유지합니다. 시작 함수가 호출되면 키가 발급됩니다. 종료 함수가 호출될 때까지 사용자는 활성 구간에 있는 것으로 간주되며, 대기열의 다음 사용자는 허용되지 않습니다.
Netfunnel.nfStartSection
목적: 구간 제어를 위한 키를 발급하고 대기실을 표시합니다.
함수 시그니처:
Netfunnel.nfStartSection(projectKey, segmentKey, callback)
매개변수:
| 매개변수 | 유형 | 설명 |
|---|---|---|
projectKey | String | 콘솔의 구간 제어 프로젝트 키 |
segmentKey | String | 콘솔의 구간 제어 세그먼트 키 |
callback | Function | 대기실 이벤트 처리를 위한 사용자 정의 콜백 함수 |
반환값: undefined
예제:
Netfunnel.nfStartSection("{{PROJECT_KEY}}", "{{SEGMENT_KEY}}", function(response) {
// 응답 처리 - 콜백 함수 섹션 참조
nfCallback(response);
});
콜백 처리: 자세한 응답 처리 내용은 콜백 함수 섹션을 참조하세요.
Netfunnel.nfStopSection
목적: 사용자가 활성 구간을 종료할 때 키를 반환합니다.
함수 시그니처:
Netfunnel.nfStopSection(projectKey, segmentKey)
매개변수:
| 매개변수 | 유형 | 설명 |
|---|---|---|
projectKey | String | 콘솔의 구간 제어 프로젝트 키 |
segmentKey | String | 콘솔의 구간 제어 세그먼트 키 |
반환값: undefined
예제:
Netfunnel.nfStopSection("{{PROJECT_KEY}}", "{{SEGMENT_KEY}}");
중지 함수를 실행하지 않으면 사용자는 활성 구간에 남아있는 것으로 간주되며, 다음 사용자의 허용이 지연될 수 있습니다.
콜백 함수
기본/구간 제어 시작 함수의 콜백 함수(세 번째 매개변수)에서 NetFUNNEL 서버로부터 응답을 받을 수 있습니다. 응답 결과에 따라 다양한 처리 로직을 수행할 수 있습니다.
필수 상태 처리
다음 세 가지 상태를 반드시 대응해야 합니다:
Success: 진입 허용 또는 우회 모드Error: 시스템 오류 발생NetworkError: 네트워크 연결 문제
Success, Error, NetworkError 외의 상태값은 처리하지 않아도 서비스에 영향이 없습니다.
샘플 콜백 구현
function nfCallback(response) {
const { status, statusCode, message } = response;
switch(status) {
case 'Success':
// 진입 또는 우회 응답을 받은 경우로, 넷퍼넬을 적용하기 전의 기존 서비스 로직을 실행합니다.
// ex - 페이지 이동, 함수 실행, API 요청
break;
case 'Error':
// 시스템 에러가 발생한 경우로, 원활한 서비스 이용을 위해 일반적으로 Success와 동일하게 기존 서비스 로직을 실행합니다.
// ex - 페이지 이동, 함수 실행, API 요청
break;
case 'NetworkError':
// 네트워크 에러가 발생한 경우로, 기존 서비스 로직을 실행하거나 알림 후 다시 대기열에 진입하도록 합니다.
// ex - 페이지 이동, 함수 실행, API 요청, modal("네트워크가 불안정합니다. 다시시도 하시겠습니까? Y/N");
break;
case 'Block':
// 진입 상태가 차단인 경우로, 차단을 알리거나 아무 처리하지 않아도 됩니다.
break;
case 'IpBlock':
// 반복 요청으로 인해 차단된 경우로, 차단을 알리거나 아무 처리하지 않아도 됩니다.
break;
case 'Close':
// 대기실의 닫기 또는 취소버튼을 클릭한 경우로, 대기 취소를 알리거나 아무 처리하지 않아도 됩니다.
// ex - alert("대기를 취소하였습니다.");
break;
default:
console.log(`[NF] status: ${status}, code: ${statusCode}, message: ${message}`);
}
}
응답 객체 스키마
콜백에 전달되는 response 객체에는 다음 필드가 포함됩니다:
| 필드 | 유형 | 예제 / 설명 |
|---|---|---|
status | String | Success / Error / NetworkError / Block / IpBlock / Close |
statusCode | Number | 200, 201, 300, 303, 500, 1001, 1002, 301, 302, 49x 등 |
message | String | Success, Bypass, Express, Server Error, Network Timeout 등 |
key | String | 발급된 진입 키(ID) |
예제 응답 객체:
// 성공 응답
{
status: "Success",
statusCode: 200,
message: "Success",
key: "key_12345"
}
// 우회 응답
{
status: "Success",
statusCode: 300,
message: "Bypass",
key: "key_12345"
}
// 네트워크 오류 응답
{
status: "NetworkError",
statusCode: 1002,
message: "Network Timeout",
key: "key_12345"
}
상태 코드 참조
가능한 모든 상태 코드와 그 의미에 대한 완전한 참조입니다.
| status | statusCode | message | 설명 |
|---|---|---|---|
| Success | 200 | Success | 대기열을 정상적으로 통과하여 서비스에 진입 |
| 300 | Bypass | 구독/라이선스 만료 프로젝트/세그먼트 비활성화 data-nf-error-bypass=true로 설정 | |
| 303 | Express | 진입 성공 시 동작 | |
| Error | 500 | Server Error | 존재하지 않는 프로젝트/세그먼트 키 사용 대기 중 세그먼트 삭제 서버 에러로 인한 응답 누락 |
| NetwrokError | 1002 | Network Timeout | 네트워크 지연 유효하지 않은 대기실 html 주소 넷퍼넬 서버 다운 |
| Block | 301 | Block | 세그먼트 차단 |
| IpBlock | 302 | Macro Block | 블랙리스트 BotManager Basic 활성화 |
| Close | 499 | Canceled Waiting Room | 기본 대기실의 취소 버튼 클릭 |
| 498 | Closed Blocking Room | 차단실의 닫기 버튼 클릭 | |
| 497 | Closed Macro Blocking Room | 매크로 차단실의 닫기 버튼 클릭 | |
| 496 | Closed PreWaiting Room | 사전 대기실의 닫기 버튼 클릭 | |
| 495 | Closed PostWaiting Room | 사후 대기실의 닫기 버튼 클릭 |
모범 사례
중앙 집중식 구성
// 키를 한 곳에 저장
const NETFUNNEL_CONFIG = {
projectKey: 'service_1',
segmentKey: 'segKey_8612'
};
// 모든 곳에서 동일한 구성 사용
Netfunnel.nfStart(
NETFUNNEL_CONFIG.projectKey,
NETFUNNEL_CONFIG.segmentKey,
callback
);
Netfunnel.nfStop(
NETFUNNEL_CONFIG.projectKey,
NETFUNNEL_CONFIG.segmentKey
);
완전한 오류 처리
function handleNetFunnelResponse(response, businessLogic) {
switch (response.status) {
case 'Success':
businessLogic(); // 로직 진행
break;
case 'Error':
// 시스템 오류 - 서비스 실행 유지를 위해 계속 진행
console.error('NetFUNNEL 시스템 오류:', response.message);
businessLogic();
break;
case 'NetworkError':
// 네트워크 문제 - 계속 진행하거나 재시도
console.log(`NetFUNNEL 네트워크 오류: ${response.message}`);
businessLogic(); // 계속 진행하거나 재시도 로직 구현
break;
case 'Block':
Alert.alert('서비스 사용 불가', '이 서비스는 일시적으로 사용할 수 없습니다.');
break;
case 'IpBlock':
Alert.alert('액세스 거부', '이 문제가 계속되면 지원팀에 문의하세요.');
break;
case 'Close':
// 사용자가 취소함 - 작업 필요 없음
break;
}
}
키 반환
// 성공적인 작업 후 키 반환
try {
await performAction();
Netfunnel.nfStop(projectKey, segmentKey);
} catch (error) {
console.error('작업 실패:', error);
// 오류 발생 시에도 키 반환
Netfunnel.nfStop(projectKey, segmentKey);
}