Contents

사용자 정보 활용

사용자 아이디나 Session 아이디 등의 정보를 입력 받아서 넷퍼넬 서버로 전달하고 해당 사용자 정보를 이용하여 사용자를 차단하거나 로그에 기록하는 방법을 다음에서 확인하세요.

이 기능을 이용하면 사용자가 얼마나 많은 접속을 했는지 확인이 가능하고, 짧은 시간에 많은 요청을 하는 사용자에게는 경고 메시지를 출력하거나 차단을 할 수도 있습니다.

사용자 정보 전달하기(Client)

Client(웹 브라우저)에서 넷퍼넬 서버로 사용자 정보를 전달하는 방법은 두 가지가 있습니다.

Config Overriding을 통한 전달

가장 일반적인 방법으로 NetFunnel_Action() 함수를 실행할 때 전달한 사용자 정보를 함께 전송하는 방식입니다.

...
var user_id = "boss"

NetFunnel_Action({user_data:user_id},function(ev,ret){
	myform.submit();
});	
...	

netfunnel.js 설정을 통한 전달

  • netfunnel.js 파일에서 기본 값을 변경하는 설명

    만약 쿠키나 특정 변수에 이미 사용자 아이디가 저장되어 있다면 netfunnel.js 파일에서 기본 값을 설정하여 쉽게 전달할 수 있습니다.

    아래 코드는 쿠키 값 중에서 “CookieSavedUserID” 라는 변수에 사용자의 아이디가 저장된 경우 그 값을 읽어서 user_data 자료로 활용하도록 하는 코드입니다.

    ...
    // Input UserData Key & Type(c=cookie, v=variable)
    NetFunnel.TS_USER_DATA_KEYS = [{"key":"CookieSavedUserID","type":"c"}]
    ...	
    
  • netfunnel.js 파일이 아닌, 실제 페이지 내에서 적용하는 방식에 대한 설명

    위 방식을 Config Overriding 방식으로 변경하면 아래와 같은 코드로 나타낼 수 있습니다.

    ...
    var user_id = NetFunnel.Cookie.get("CookieSavedUserID");
    
    NetFunnel_Action({user_data:user_id},function(ev,ret){
    	myform.submit();
    });		
    ...
    

엑세스 제어 활용

Client(웹 브라우저)로 부터 전달된 사용자 정보는 엑세스 제어에서 활용이 가능합니다. 하나는 Express 아이디로 활용하는 방법이고, 다른 하나는 차단의 기준 값으로 활용하는 방법입니다.

Express 아이디로 활용

  • Express 아이디란?

    대기 없이 서비스에 빠르게 진입할 수 있는 권한이 주어진 아이디를 의미합니다. VIP 회원이나 내부 작업자에게 적용이 가능합니다.

    [엑세스 제어 설정][Express] 탭에 아래와 같이 “boss”라는 아이디를 추가하여 “boss”라는 값으로 사용자 정보가 입력되면 대기 없이 진입하게 됩니다.

    Express에 ID입력

    위의 설정을 위한 웹 페이지의 소스는 아래와 같습니다.

    ...
    var user_id = "boss";
    
    NetFunnel_Action({user_data:user_id},function(ev,ret){
    	myform.submit();
    });	
    ...	
    

차단 응답 메시지 활용

[엑세스 제어 설정]에서 [ ]을 클릭하면 팝업 화면이 나옵니다.

엑세스 제어 설정에 대한 자세한 내용은 엑세스 제어를 참고하세요.

“차단 유형” 에서 아이디를 체크하고 “차단 모드”를 “응답”으로 설정하면, “확인 시간” 동안 설정된 요청량을 초과하는 동일한 아이디(사용자 정보)의 사용자에게 차단 메시지를 출력합니다.

엑세스 제어 설정

웹 페이지에서는 아래와 같이 ipblock Callback을 지정할 수 있으며, 지정된 엑세스 제어 설정에 의해 차단되었다면 ipblock Callback을 실행하게 됩니다. 만약 ipblock Callback이 설정되어 있지 않다면 기본으로 설정된 “Service Block!”이라는 Alert창이 나타납니다.

...
var user_id = "normal_user_1";

NetFunnel_Action({user_data:user_id},
	{
		success:function(ev,ret){
			myform.submit();
		},
		ipblock:funcion(ev,ret){
			alert("잠시 후 다시 이용해 주세요!");
		}
	}
);				
...	

엑세스 제어 설정에 의해 차단되었던 아이디 정보는 [통계 로그][NetFUNNEL][차단 순위]에서 확인이 가능합니다.

차단 순위

엑세스 로그 파일 분석

사용자 정보를 사용하는 경우 넷퍼넬 서버의 엑세스 로그를 분석하여 어떤 아이디로부터 얼마나 많은 호출이 발생했는지를 확인할 수 있습니다. 넷퍼넬의 엑세스 로그는 /usr/local/netfunnel2/logs 디렉터리에 존재하며, 엑세스 로그를 쓰도록 설정해야 다음의 내용을 확인할 수 있습니다.

엑세스 로그 설정 방법

TS서버의 넷퍼넬 설치 경로 아래의 conf 디렉터리에 존재하는 netfunnel.ts.propertis 파일에 엑세스 로그를 쓰는 설정이 있습니다.

service.http.access.log=accesslog와 같이 설정되어 있어야만 엑세스 로그가 쌓입니다. Default 값은 엑세스 로그가 쌓이도록 설정되어 있습니다.

호출 Top 100 아이디

호출된 사용자 정보 중에서 가장 많이 호출된 아이디의 Top 100 리스트와 함께 호출 횟수를 출력해 주는 명령어입니다.

엑세스 로그 파일은 일 단위로 생성되므로 아래 스크립트의 “access.ts.2015-02-12. log” 부분은 원하는 날짜의 파일로 변경하세요.

cat access.ts.2015-02-12.log | grep "user_data" | awk -F"user_data=" '{print $2}' | awk -F\& '{print $1}' | sort | uniq -c | sort -rn | head -n 100
 

특정 아이디의 분당 요청수 확인

특정 아이디의 분당 요청수를 출력해 주는 명령어입니다. (아이디 예: jacojang) 아래 요청수에서 주의해야 할 것은 대기 중에 발생하는 요청수도 포함되어 있다는 것입니다.

cat access.ts.2015-02-12.log | grep "user_data=jacojang&" | awk '{print $4" "$5" "$6" "$7}' | awk -F\: '{print $1":"$2}' | sort | uniq -c 

특정 아이디의 진입 요청수(웹 브라우저의 버튼 클릭수)만을 출력하려면 아래와 같은 명령어를 사용하세요. (아이디 예: jacojang)

cat access.ts.2015-02-12.log | grep "opcode=5101" | grep "user_data=jacojang&" | awk '{print $4" "$5" "$6" "$7}' | awk -F\: '{print $1":"$2}' | sort | uniq -c