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

통합 공통 질문

Q. NetworkError는 어떻게 처리해야 하나요?

A. 사용자에게 알리고 재시도하거나 원래 로직을 진행하세요:

Web Javascript 통합의 경우

function handleNetworkError(response) {
if (confirm('네트워크 오류가 발생했습니다. 다시 시도하시겠습니까?')) {
nfStart(keys, callback); // 재시도
} else {
performOriginalLogic(); // 계속 진행
}
}

Android 통합의 경우

private val callback = object : NetfunnelCallback() {
override fun onNetworkError(statusCode: Int, message: String) {
when (statusCode) {
1001 -> {
// 네트워크 연결되지 않음
showNetworkErrorDialog()
}
1002 -> {
// 네트워크 타임아웃 - 재시도
retryWithDelay()
}
}
}
}

private fun retryWithDelay() {
Handler(Looper.getMainLooper()).postDelayed({
Netfunnel.nfStart(projectKey, segmentKey, callback, this)
}, 2000)
}

Q. 키를 반환하는 것을 잊어버리면 어떻게 되나요?

A. 키는 서버 타임아웃에 의해 자동으로 반환될 수 있지만, 이로 인해 병목 현상이 발생할 수 있습니다. 항상 명시적으로 반환하세요:

Web Javascript 통합의 경우

// 추천: 항상 키 반환
nfStart(keys, function(response) {
if (response.status === 'Success') {
performAction()
.then(() => nfStop(keys))
.catch(() => nfStop(keys)); // 오류 발생 시에도 반환
}
});

Android 통합의 경우

// 추천: 항상 키 반환
private val callback = object : NetfunnelCallback() {
override fun onSuccess(statusCode: Int, message: String) {
performAction()
.onSuccess {
Netfunnel.nfStop(projectKey, segmentKey, completeCallback)
}
.onFailure {
Netfunnel.nfStop(projectKey, segmentKey, completeCallback) // 에러가 발생해도 반환
}
}
}

Q. NetFUNNEL 통합을 어떻게 디버깅하나요?

A. 로깅을 활성화하고 콘솔을 확인하세요:

Web Javascript 통합의 경우

<script
src="https://agent-lib.stclab.com/agents/client/javascript/netfunnel-javascript-agent.js"
data-nf-client-id="your-client-id"
data-nf-print-log="true"
></script>

이후 DevTools 콘솔에서 NetFUNNEL 로그 메시지를 확인하세요.

Android 통합의 경우

Netfunnel.initialize(
clientId = "{{CLIENT_ID}}",
printLog = true // 로깅 활성화
)

이후 Logcat에서 NetFUNNEL 로그 메시지를 확인하세요.

Q. URL 트리거와 코드 기반 방법을 모두 사용할 수 있나요?

A. 네, 단일 서비스 내에서 두 방법을 함께 사용할 수 있습니다:

  • URL 트리거를 페이지 진입 속도 제어에 사용
  • 코드 기반을 비즈니스 동시 사용자 수 제어에 사용
// 랜딩 페이지 보호를 위한 URL 트리거
// (콘솔에서 구성)

// 로그인을 위한 기본 제어
function handleLogin() {
Netfunnel.nfStart("login_project", "login_segment", loginCallback);
}

// 결제를 위한 구간 제어
function startCheckout() {
Netfunnel.nfStartSection("checkout_project", "checkout_segment", checkoutCallback);
}

일반적인 패턴:

  • 페이지 진입 보호를 위해 URL 트리거 통합 사용
  • 진입점(로그인, 주요 기능)에 기본 제어 (코드 기반 통합) 사용 - 화면 로드 후 빠른 키 반환
  • 중요한 프로세스(결제, 결제 처리)에 구간 제어 (코드 기반 통합) 사용 - 전체 프로세스 완료까지 키 보유

그러나 운영 복잡성을 줄이기 위해 하나의 방법을 우선적으로 사용하는 것이 권장됩니다.

Q. 같은 앱에서 기본 제어와 구간 제어를 모두 사용할 수 있나요?

A. 예, 같은 애플리케이션에서 두 방법을 모두 사용할 수 있습니다:

iOS

// 로그인을 위한 기본 제어
func handleLogin() {
Netfunnel.shared.nfStart(projectKey: "login_project", segmentKey: "login_segment")
}

// 체크아웃을 위한 구간 제어
func startCheckout() {
Netfunnel.shared.nfStartSection(projectKey: "checkout_project", segmentKey: "checkout_segment")
}

일반적인 패턴:

  • 진입점(로그인, 주요 기능)에는 기본 제어 (코드 기반 통합) 사용 - 뷰 컨트롤러 로드 후 빠른 키 반환
  • 중요한 프로세스(체크아웃, 결제)에는 구간 제어 (코드 기반 통합) 사용 - 전체 프로세스 완료까지 키 보유

Android

// 로그인용 기본 제어
fun handleLogin() {
Netfunnel.nfStart("login_project", "login_segment", loginCallback, this)
}

// 체크아웃용 구간 제어
fun startCheckout() {
Netfunnel.nfStartSection("checkout_project", "checkout_segment", checkoutCallback, this)
}

일반적인 패턴:

  • 진입 지점(로그인, 주요 기능)에는 기본 제어 (코드 기반 통합) 사용 - Activity 로드 후 빠른 키 반환
  • 중요한 프로세스(체크아웃, 결제)에는 구간 제어 (코드 기반 통합) 사용 - 전체 프로세스 완료까지 키 보유

Q. NetFUNNEL을 여러 번 초기화할 수 있나요?

A. 아니요, NetFUNNEL은 Application 클래스에서 한 번만 초기화해야 합니다. 여러 번 초기화하면 예기치 않은 동작이 발생할 수 있습니다.