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

빠른 시작

이 빠른 시작 가이드로 5-10분 안에 NetFUNNEL 4 Java Agent를 시작하세요.

이 가이드에서 할 수 있는 것

  • URL-Triggered 통합: 트리거 규칙 기반 자동 대기열 제어
통합 방법 선택

통합 방법에 대한 자세한 설명은 통합 방법 개요를 참조하세요.


사전 요구사항

  • NetFUNNEL 콘솔 액세스
  • Java 프로젝트 (Spring Boot 3.x 이상)
  • Java 1.7 이상

1단계: Client ID 및 Secret Key 가져오기

  1. NetFUNNEL 콘솔로 이동
  2. 우측 상단의 프로필 아이콘 클릭
  3. 통합 자격 증명 (Integration Credentials) 메뉴 선택
  4. Client IDSecret Key 복사

2단계: 라이브러리 설치

Gradle (Kotlin DSL)

build.gradle.kts에 다음 의존성을 추가합니다:

implementation(files("libs/netfunnel-agent.jar"))
implementation("com.google.code.gson:gson:2.9.1")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")

Gradle (Groovy DSL)

build.gradle에 다음 의존성을 추가합니다:

implementation files('libs/netfunnel-agent.jar')
implementation 'com.google.code.gson:gson:2.9.1'
// Java 사용시
implementation 'com.fasterxml.jackson.module:jackson-module-kotlin'

Maven

pom.xml에 다음 의존성을 추가합니다:

<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.9.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-kotlin</artifactId>
<version>2.15.2</version>
</dependency>

netfunnel-agent.jar 파일은 libs 폴더에 추가하고 다음 설정을 추가합니다:

<dependency>
<groupId>com.stclab</groupId>
<artifactId>netfunnel-agent</artifactId>
<version>4.0.1</version>
<scope>system</scope>
<systemPath>${project.basedir}/libs/netfunnel-agent.jar</systemPath>
</dependency>

3단계: Interceptor 또는 Filter 적용

프로젝트 구조에 맞게 Interceptor와 Filter 중 하나만 선택하여 적용합니다.

Interceptor 방식

1. Interceptor 생성

import com.stclab.Netfunnel;
import com.stclab.servlet.NetFunnelServletService;
import com.stclab.utils.NetFunnelInitialize;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Component
public class NetFunnelInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
NetFunnelInitialize config = NetFunnelInitialize.Companion.builder()
.clientId("{{CLIENT_ID}}") // 1단계에서 가져온 Client ID
.secretKey("{{SECRET_KEY}}") // 1단계에서 가져온 Secret Key
.build();
Netfunnel netfunnel = new Netfunnel(config, new NetFunnelServletService(request, response), null, null);
return netfunnel.run();
}
}

2. Interceptor 등록

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {
private final NetFunnelInterceptor netFunnelInterceptor;

@Autowired
public WebConfig(NetFunnelInterceptor netFunnelInterceptor) {
this.netFunnelInterceptor = netFunnelInterceptor;
}

@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(netFunnelInterceptor)
.addPathPatterns("/**");
}
}

Filter 방식

1. Filter 생성

import com.stclab.Netfunnel;
import com.stclab.servlet.NetFunnelServletService;
import com.stclab.utils.NetFunnelInitialize;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.boot.web.servlet.FilterRegistrationBean;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class NetFunnelFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
NetFunnelInitialize config = NetFunnelInitialize.Companion.builder()
.clientId("{{CLIENT_ID}}") // 1단계에서 가져온 Client ID
.secretKey("{{SECRET_KEY}}") // 1단계에서 가져온 Secret Key
.build();
Netfunnel netfunnel = new Netfunnel(config, new NetFunnelServletService(request, response), null, null);
if (!netfunnel.run()) {
return;
}
chain.doFilter(servletRequest, servletResponse);
}
}

2. Filter 등록

import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FilterConfig {
@Bean
public FilterRegistrationBean<Filter> filterRegistrationBean() {
FilterRegistrationBean<Filter> registration = new FilterRegistrationBean<>();
registration.setFilter(new NetFunnelFilter());
registration.addUrlPatterns("/*");
registration.setOrder(1);
return registration;
}
}

4단계: 트리거 규칙 설정

  1. 콘솔에서 세그먼트 생성:

    • NetFUNNEL 콘솔 → ProjectsSegmentCreate Segment로 이동
    • 세그먼트 이름 입력
    • 진입 상태를 Waiting으로 설정
    • 진입 허용수를 0으로 설정 (테스트용)
  2. 트리거 규칙 설정:

    • Trigger Rules 섹션에서 규칙 추가
    • Validator: URL
    • Component: Path 또는 URL
    • Match: Equals, Contains, StartsWith, EndsWith
    • Value: 적용할 URL 경로 입력 (예: /checkout, /login)

5단계: 테스트

  1. 트리거 규칙 테스트: 콘솔의 트리거 규칙 테스트 기능으로 URL이 규칙에 부합하는지 확인
  2. 대기실 확인: 규칙에 부합하는 URL로 접속 시 대기실이 표시되는지 확인
  3. 진입 확인: 진입 허용수를 증가시켜 정상적으로 진입되는지 확인

도움이 필요하신가요?

  • 문제 해결: 일반적인 문제 및 해결 방법
  • API 참조: 완전한 함수 사양
  • 콘솔의 프로젝트/세그먼트 키가 정확히 일치하는지 확인