제니퍼 서버 시작과 중지
제니퍼 서버를 시작하려면 JENNIFER_HOME/server/bin
디렉토리에 있는 startup.sh
를 실행한다.
./startup.sh
단, 닷넷 에이전트만을 전용으로 모니터링을 할 경우에는 startup.net.bat를 사용하여 제니퍼 서버를 기동해야 한다.
제니퍼 서버를 기동하게 위해서는 JDK가 필요하다. 제니퍼 서버는 JDK1.5이후 버전의 사용을 권장한다. JDK 1.4.2를 사용하는 경우, 다음 작업을 수행한다.
JENNIFER_HOME/server/doc/jdk142/bin/jmx.jar 파일을 JENNIFER_HOME/server/bin 디렉토리로 복사한다.
그리고 JENNIFER_HOME/server/doc/jdk142/common/endorsed 디렉토리를JENNIFER_HOME/server/common 디렉토리 밑으로 복사한다.
제니퍼 서버를 시작한다.
표준 출력 로그는 JENNIFER_HOME/server/logs/catalina.out 파일에서 확인할 수 있다.
제니퍼 서버를 정지하려면 JENNIFER_HOME/server/bin 디렉토리에 있는 shutdown.sh 를 실행한다.
./shutdown.sh
제니퍼 서버 설정 파일
모니터링 수준과 방법, 네트워크 포트 번호 지정 등의 모든 설정은 제니퍼 서버 옵션을 통해서 이루어진다. JENNIFER_HOME/server/bin/jennifer.properties 파일이 제니퍼 서버 설정 파일이다.
설정 파일 형식
제니퍼 서버 옵션은 텍스트 형식의 설정 파일에 기록된다. 이 파일은 다음과 같은 특징을 갖는다.
키 = 값 형식으로 기술한다. 키는 제니퍼 서버의 옵션을 의미한다.
[#]으로 시작하는 줄은 주석이다. 그러나 문자열 중간에 있는 [#] 기호는 주석으로 인식되지 않는다.
[=] 대신 '공백'을 키와 값의 구분자로 사용할 수 있다.
앞의 이유로 인하여 키에 공백을 사용하는 것을 허용하지 않는다.
그러나 값에는 공백을 사용할 수 있다.
두 줄 이상을 사용하려면 라인의 끝에 [\] 문자를 사용한다. 만약, [\] 문자 자체가 필요한 경우에는, [\]대신 [\\]을 사용한다.
앞의 이유로 인하여 마이크로소프트 윈도우즈 환경에서 디렉토리 구분은 [\]가 아니라[\\]로 해야 한다. 윈도우즈 환경에서 유닉스처럼 [/]을 사용할 수 있기 때문에 윈도우즈 환경에서도 [/]을 사용하는 것을 권장한다.
일부 옵션을 제외한 대부분의 옵션들은 수정과 함께 실시간으로 반영된다. 수정된 옵션을 반영하기 위해 제니퍼 서버를 재시작해야 하는 경우에는 해당 옵션을 설명할 때 이를 명기하였다.
설정 파일에 기술되어 있지 않은 옵션들이 존재한다. 이 옵션들을 사용하는 경우에는 해당 옵션을 새로 추가한다.
설정 변경
설정 파일은 에디터를 통해서 직접 수정하거나, [구성 관리 | 구성 설정 ] 메뉴에서 수정한다. 단, 제니퍼 클리이언트에서는 관리자 그룹에 속한 사용자만이 옵션을 수정할 수 있다.
에이전트 선택 영역 - 제니퍼 서버 옵션 내용을 확인하거나 수정하려면 [서버]를 선택한다.
현재 설정 내용 - 왼쪽에 있는 현재 설정 내용에서 제니퍼 서버 옵션을 확인한다.
설정 내용 변경 - 오른쪽에 있는 설정 내용 변경 입력 폼에서 기존 옵션을 수정하거나 새로운 옵션을 추가한 후에, 하단에 있는 [수정] 버튼을 클릭한다.
제니퍼 서버 설정 파일은 제니퍼 서버의 config_refresh_check_interval 옵션으로 설정한 시간마다 변경 여부가 체크된다.
config_refresh_check_interval = 3000
제니퍼 서버 네트워크 구성
제니퍼 클라이언트 혹은 제니퍼 에이전트와 제니퍼 서버 사이에 일어나는 다양한 네트워크 통신을 처리하기 위한, 제니퍼 서버의 네트워크 구성에 대해서 설명한다. 주로 포트 번호 설정과 관련된 것으로, 기본 포트 번호를 다른 애플리케이션에서 이미 사용하고 있다면 이를 수정해야 한다. 또한 동일한 하드웨어에 복수의 제니퍼 서버를 설치한 경우에도 해당 포트 번호가 중복되지 않도록 설정해야 한다.
클라이언트를 위한 설정
제니퍼 서버와 제니퍼 클라이언트는 웹 기반 사용자 인터페이스 제공을 위해서 HTTP 프로토콜을 사용한다. 이 때 사용하는 기본 HTTP 포트 번호는 7900이다. 그리고 제니퍼 서버 정지를 위한 기본 포트 번호는 7999이다. 이 포트 번호를 변경하려면 JENNIFER_HOME/server/bin/catalina.sh(bat) 파일을 수정한다.
유닉스 혹은 리눅스의 경우에는 catalina.sh 파일의 다음 부분에서 포트 번호를 설정한다.
JAVA_HOME="$JAVA_HOME" if [ -z "${STARTUP_PORT}" ] then export STARTUP_PORT="7900" fi if [ -z "${SHUTDOWN_PORT}" ] then export SHUTDOWN_PORT="7999" fi
윈도우즈의 경우에는 catalina.bat 파일의 다음 부분에서 포트 번호를 설정한다.
set JAVA_HOME=%JAVA_HOME% if "%STARTUP_PORT%" == "" SET STARTUP_PORT=7900 if "%SHUTDOWN_PORT%" == "" SET SHUTDOWN_PORT=7999
자바 애플릿은 차트 구성에 필요한 데이터를 제니퍼 서버로부터 TCP 통신을 통해서 획득한다. 이 때 사용되는 제니퍼 서버의 기본 TCP 포트 번호는 제니퍼 서버의 server_tcp_port 옵션으로 설정하고, 기본 포트 번호는 6701이다.
server_tcp_port = 6701
제니퍼 에이전트를 위한 설정
제니퍼 에이전트는 성능 데이터를 UDP 방식으로 제니퍼 서버에 전송한다. 제니퍼 서버는 제니퍼 에이전트가 보내는 성능 데이터를 3개의 UDP 포트로 분리해서 받아들인다. 각각의 포트가 받아들이는 성능 데이터는 상이하다.
제니퍼 에이전트는 제니퍼 서버의 server_udp_runtime_port 옵션으로 설정한 UDP 포트로 모든 트랜잭션의 시작과 종료와 관련한 데이터를 전송한다. 이 데이터는 크기는 매우 작으며 주로 X-View 차트를 표현하는데 사용된다. 기본 포트 번호는 6901이다.
server_udp_runtime_port = 6901
제니퍼 에이전트는 제니퍼 서버의 server_udp_listen_port 옵션으로 설정한 UDP 포트로 1초마다 반복적으로 서비스 요청률, 평균 응답 시간 등의 일반 성능 데이터를 전송한다. 기본 포트 번호는 6902이다.
server_udp_listen_port = 6902
제니퍼 에이전트는 제니퍼 서버의 server_udp_lwst_call_stack_port 옵션으로 설정한 UDP 포트로 X-View 트랜잭션 프로파일 데이터를 전송한다. 기본 포트 번호는 6703이다.
server_udp_lwst_call_stack_port = 6703
앞에서 설명한 UDP 포트 번호를 수정할 때는 제니퍼 서버 뿐만 아니라 제니퍼 에이전트의 동일한 옵션도 함께 수정해야 한다.
그리고 제니퍼 에이전트가 UDP 방식으로 보내는 성능 데이터를 제니퍼 서버가 받을 때 사용할 IP 바인딩 주소를 지정할 필요가 있다. 이는 자바 TCP 소켓 프로그래밍에서 new java.net.DatagramSocket(port, ip) 생성자의 두번째 파라미터 IP에 해당하는 값이다. 하드웨어에 둘 이상의 네트워크 카드가 있다면, 특정 네트워크 카드로 들어오는 요청만 바인딩하고자 할 때 설정한다. udp_server_host 속성을 "0.0.0.0"으로 지정하면 모든 네트워크 카드에서 들어오는 패킷을 받을 수 있다.
udp_server_host = 0.0.0.0
제니퍼 서버에서 제니퍼 에이전트로의 TCP 역방향 연결에 대한 타임 아웃 시간을 설정할 수 있다. 소켓 연결에 대한 타임 아웃 시간은 제니퍼 서버의 agent_tcp_connect_timeout 옵션으로 설정한다. 기본 값은 3000이고 단위는 밀리 세컨드이다.
agent_tcp_connect_timeout = 3000
소켓 연결 후 데이터를 읽는 작업과 관련한 타임 아웃 시간은 제니퍼 서버의 agent_tcp_io_timeout 옵션으로 설정한다. 기본 값은 5000이고 단위는 밀리 세컨드이다.
agent_tcp_io_timeout = 5000
만약 네트워크 연결이 지연되는 현상이 발생하면, 제니퍼 서버 로그 파일에 에러가 기록된다. 이때는 옵션 값을 바꾸기 전에 먼저 제니퍼 에이전트와 서버 사이의 네트워크 환경을 튜닝하는 것을 권고한다.
제니퍼 사용을 위한 방화벽 설정
제니퍼 서버와 제니퍼 에이전트 혹은 제니퍼 클라이언트 사이에 방화벽이 존재하면, 앞에서 설정한 포트 번호가 방화벽을 정상적으로 통과하도록 설정해야 한다.
사용자 컴퓨터(제니퍼 클라이언트)에서 제니퍼 서버로 HTTP 7900 포트와 TCP 6701 포트를 통해서 접근할 수 있어야 한다.
제니퍼 에이전트에서 제니퍼 서버로 UDP 6901, 6902, 6703 포트를 통해서 접근할 수 있어야 한다.
제니퍼 서버에서 제니퍼 에이전트로 TCP 7750 포트를 통해서 접근할 수 있어야 한다.
UDP 네트워크에 대한 방화벽 테스트는 [네트워크 테스트]를 참조한다.
서버 로그 관리
제니퍼 서버의 로그 파일은 제니퍼 서버의 logfile 옵션으로 설정한다.
logfile = ../logs/jennifer.log
로그 파일을 일자별로 기록하려면 제니퍼 서버의 enable_logfile_daily_rotation 옵션을 true로 설정한다. 기본 값은 true이다.
enable_logfile_daily_rotation = true
기본 설정에 따르면 JENNIFER_HOME/server/logs/jennifer.YYYY-MM-DD.log 파일에 로그가 기록된다.
logfile 옵션을 변경하려면 제니퍼 서버를 재시작하여야 한다.
제니퍼 서버는 아파치 톰켓을 사용하고 톰켓 로그는 JENNIFER_HOME/server/logs 디렉토리에 일자별로 분리되어 기록된다.
로그 파일 | 설명 |
---|---|
admin.YYYY-MM-DD.log | 톰켓이 내부적으로 사용하는 로그 파일로 중요 메시지가 기록되지는 않는다. |
catalina.YYYY-MM-DD.log | 콘솔에 출력되는 메시지가 기록된다. |
host-manager.YYYY-MM-DD.log | 톰켓이 내부적으로 사용하는 로그 파일로 중요 메시지가 기록되지는 않는다. |
localhost.YYYY-MM-DD.log | 에러 및 예외 메시지가 기록된다. |
manager.YYYY-MM-DD.log | 톰켓이 내부적으로 사용하는 로그 파일로 중요 메시지가 기록되지는 않는다. |
톰켓 서버와 관련한 로그는 catalina.YYYY-MM-DD.log 파일과 localhost.YYYY-MM-DD.log 파일을 주로 참고한다.
동일한 하드웨어에서 복수의 제니퍼 서버 운영하기
동일한 하드웨어에서 복수의 제니퍼 서버를 운영하는 방법을 설명한다. 운영하려는 제니퍼 서버의 개수와 상관없이 하나의 제니퍼 서버만을 설치한다. 그리고 운영하려는 개수에 해당하는 시작/정지 스크립트를 작성한다. 시작/정지 스크립트에 제니퍼 서버가 사용하는 HTTP 포트 번호와 제니퍼 서버 정지 포트 번호, 그리고 제니퍼 서버 설정 파일 경로를 설정한다.
유닉스 혹은 리눅스의 경우에는 JENNIFER_HOME/server/bin/start_server_01.sh 파일을 다음과 같이 작성한다. 임의의 파일 이름을 사용할 수 있다.
export JAVA_HOME=/usr/java/jdk1.6.0_11 export STARTUP_PORT=7901 export SHUTDOWN_PORT=7991 export JAVA_OPTS=-Djennifer.config=/jennifer/data/conf/jennifer_01.properties ./startup.sh
그리고 JENNIFER_HOME/server/bin/shutdown_server_01.sh 파일을 다음과 같이 작성한다. 임의의 파일 이름을 사용할 수 있다.
export JAVA_HOME=/usr/java/jdk1.6.0_11 export STARTUP_PORT=7901 export SHUTDOWN_PORT=7991 export JAVA_OPTS=-Djennifer.config=/jennifer/data/conf/jennifer_01.properties ./shutdown.sh
윈도우즈의 경우에는 JENNIFER_HOME/server/bin/start_server_01.bat 파일을 다음과 같이 작성한다. 임의의 파일 이름을 사용할 수 있다.
set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_11 SET STARTUP_PORT=7901 SET SHUTDOWN_PORT=7991 set JAVA_OPTS=-Djennifer.config=C:/jennifer/data/conf/jennifer_01.properties startup run
그리고 JENNIFER_HOME/server/bin/shutdown_server_01.bat 파일을 다음과 같이 작성한다. 임의의 파일 이름을 사용할 수 있다.
set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_11 SET STARTUP_PORT=7901 SET SHUTDOWN_PORT=7991 set JAVA_OPTS=-Djennifer.config=C:/jennifer/data/conf/jennifer_01.properties shutdown run
각 제니퍼 서버별로 다르게 설정해야 하는 제니퍼 서버의 옵션은 다음과 같다.
domain_name
server_tcp_port
logfile
upload_directory
data_directory
system.derby.system.home
backup_root
자바 임시 디렉토리도 다르게 하려면 시작 스크립트에서 JAVA_OPTS 환경 변수로 java.io.tmpdir를 설정한다.
제니퍼 서버 디버깅
이벤트 로그 기록
사용자 및 권한 등과 관련한 주요 이벤트 로그를 관리자 데이터베이스 EVENT_LOG 테이블에 기록할 수 있다. 이벤트 로그를 기록하려면 제니퍼 서버의 enable_event_log 옵션을 true로 설정한다. 기본 값은 false이다.
enable_event_log = true
주요 이벤트 로그에 대한 설명은 다음과 같다.
이벤트 로그 아이디 | 설명 |
---|---|
JENNIFER_SERVER_START | 제니퍼 서버의 시작 이벤트 로그 |
JENNIFER_SERVER_STOP | 제니퍼 서버의 종료 이벤트 로그 |
ADD_USER | 사용자 추가 이벤트 로그(사용자에게 할당된 그룹 정보 포함) |
CHANGE_USER | 사용자 변경 이벤트 로그(사용자에게 할당된 그룹 정보 포함) |
REMOVE_USER | 사용자 삭제 이벤트 로그 |
ADD_GROUP | 그룹 추가 이벤트 로그(제니퍼 에이전트 목록 정보 포함) |
CHANGE_GROUP | 그룹 변경 이벤트 로그(제니퍼 에이전트 목록 정보 포함) |
REMOVE_GROUP | 그룹 삭제 이벤트 로그 |
ADD_ROLE | 권한 추가 이벤트 로그(권한에 할당된 그룹 정보 포함) |
CHANGE_ROLE | 권한 변경 이벤트 로그(권한에 할당된 그룹 정보 포함) |
REMOVE_ROLE | 권한 삭제 이벤트 로그 |
CHANGE_PASSWORD | 패스워드 변경 이벤트 로그 |
CHANGE_PASSWORD_BY_ADMIN | 권리자 그룹에 속한 사용자에 의한 패스워드 변경 이벤트 로그 |
LOGIN_SUCCESS | 로그인 성공 이벤트 로그 |
LOGIN_FAILURE | 로그인 실패 이벤트 로그로 로그인 실패 사유도 함께 기록된다. |
LOGOUT_SUCCESS | 로그아웃 성공 이벤트 로그로 사용자에 의한 로그아웃과 세션 타임아웃에 의한 로그아웃을 구분한다. |
LOGOUT_FAILURE | 로그아웃 실패 이벤트 로그 |
INVALID_LOGIN_LOCK | 사용자가 정해진 임계치 이상으로 패스워드를 틀리면 해당 사용자 계정을 사용할 수 없게 된다. 이 내용을 기록하는 이벤트 로그이다. |
제니퍼 서버 SQL 로깅
제니퍼 서버 튜닝을 위해서 제니퍼 서버가 사용하고 있는 내부 SQL과 에러 여부를 임의의 로그 파일에 기록할 수 있다. 이를 위해서는 제니퍼 서버의 enable_server_trace 옵션을 true로 설정한다. 기본 값은 false이다.
enable_server_trace = true
그리고 로그를 기록할 파일을 제니퍼 서버의 server_trace_filename 옵션으로 설정한다. 기본 값은 servertrace.log이다.
server_trace_filename = servertrace.log
그리고 SQL 실행 시간이 제니퍼 서버의 server_jdbc_trace_overthan 옵션으로 설정한 시간 이상인 경우에만 SQL을 로그 파일에 기록한다. 기본 값은 10000이고 단위는 밀리 세컨드이다.
server_jdbc_trace_overthan = 10000
제니퍼 클라이언트 TCP 연결 로깅 제니퍼 서버를 사용하는 사용자가 많은 경우에 Client TCP Worker 숫자가 부족하여 예외가 발생할 수 있다. 이 때 제니퍼 서버의 number_of_tcp_pooled_workers 옵션으로 Client TCP Worker 숫자를 늘려주기 전에 실제 유효한 사용자가 정상적으로 TCP 연결을 사용하는지를 테스트하려면 제니퍼 서버의 debug_tcp 옵션을 true로 설정한다. 기본 값은 false이다. 이를 true로 설정하면 제니퍼 서버 로그 파일에 제니퍼 클라이언트 TCP 요청 내역이 기록된다.
debug_tcp = true
제니퍼 스케줄러
제니퍼 서버는 데이터 관리 혹은 임의의 작업을 수행하기 위한 스케줄러를 지원한다. 제니퍼에서는 이런 스케줄러를 TimeActor라고 한다. 제니퍼는 몇 가지 기본 스케줄러를 제공하며, 필요시 임의의 스케줄러를 작성하여 추가할 수 있다.
기본 스케줄러
제니퍼는 CleanerActor, SummaryActor, ReportActor, FileCleanerActor 등의 기본 제니퍼 스케줄러를 제공한다.
CleannerActor - 파일과 데이터베이스에 저장된 성능 데이터를 주기적으로 삭제한다.
SummaryActor - 일자별 테이블에 대한 조회 성능 개선을 위한 통계 성능 데이터를 생성한다.
ReportActor - 보고서를 자동 생성한다.
FileCleanerActor - 제니퍼 서버의 로그 파일과 임시 파일을 삭제한다. 임시 파일은 자바 java.io.tmpdir 환경 변수로 설정한 디렉토리에 존재하는 파일을 의미한다.
BackupActor - 제니퍼 서버가 수집한 성능 데이터를 백업한다.
FileCleanerActor는 다음과 같이 설정한다.
time_actor_14 = com.javaservice.jennifer.server.timeactor.FileCleanerActor 02 30
첫번째 파라미터 02는 수행 시간을 의미하고, 두번째 파라미터 30은 기간을 의미한다. 따라서 기본적으로 매일 02시에 30일이 지난 로그 파일과 임시 파일을 삭제한다. 단, 확장자가 log와 png로 끝나는 파일만을 삭제한다.
나머지 스케줄러를 설정하는 방법은 해당 스케줄러와 관련된 부분에서 설명한다.
제니퍼 스케줄러 작성
임의의 스케줄러를 작성하는 방법은 다음과 같다.
스케줄러 클래스 작성
모든 스케줄러 클래스는 com.javaservice.jennifer.server.TimeActor 클래스를 상속해야 한다. TimeActor 클래스는 JENNIFER_HOME/server/common/lib/jenniferserver.jar 파일에 포함되어 있다. 따라서, 스케줄러 클래스를 작성하기 위해서는 jenniferserver.jar파일을 클래스 패스에 등록하여야 한다.
제니퍼 스케줄러 클래스는 process 메소드를 구현해야 한다.
package sample; import com.javaservice.jennifer.server.TimeActor; public class SampleActor extends TimeActor { public void process(String[] args) { } }
process 메소드의 파라미터는 스케줄러를 제니퍼 서버에 등록할 때 설정한 파라미터 목록이다. 예를 들어, 다음과 같이 스케줄러를 등록하면, process 메소드의 파라미터는 {"03", "sample"}이 된다. 파라미터의 의미는 스케줄러마다 다르지만, 첫번째 파라미터로 해당 스케줄러가 수행될 시간을 지정하는 것을 권장한다.
time_actor_32 = sample.SampleActor 03 sample
스케줄러의 process 메소드는 1분마다 반복적으로 호출된다. 따라서 특정 시점에 해당 스케줄러가 임의의 작업을 수행해야 할지에 대한 판단을 제니퍼 서버가 아닌 스케줄러가 스스로 결정해야 한다.
다음은 TimeActor 클래스가 제공하는 주요 메소드 API에 대한 설명이다.
메소드 | 설명 |
---|---|
public String getYYYYMMDD() | 현재 시간을 yyyyMMdd 포멧으로 반환한다. |
public static String toString(Calendar day) | 파라미터 java.util.Calendar 객체의 시간을 yyyyMMdd 포멧으로 반환한다. |
public String getYYYYMMDD(int type, int n) | 현재를 기준으로 이전이나 이후의 일자를 yyyyMMdd 포멧으로반환한다. 첫번째 파라미터 type에는 Calendar.YEAR나 Calender.DATE나 Calender.HOUR 등을 지정할 수 있다. 두번째 파라미터 n에는 변동 크기를 지정한다. 음수 값은 과거를, 양수값은 미래를 의미한다. 예를 들어 getYYYYMMDD(Calender.MONTH, -1)은 한달 전의 날짜를 반환한다. |
public String getHOUR() | 현재 시간을 HH 포멧으로 반환한다 |
Connection getAdmConn() throws SQLException | 제니퍼 관리자 데이터베이스에 대한 java.sql.Connection 객체를 반환한다. |
public Connection getDataConn() throws SQLException | 제니퍼 성능 데이터베이스에 대한 java.sql.Connection 객체를 반환한다. |
public void log(String message) | 제니퍼 서버 로그 파일에 로그 메시지를 기록한다. |
스케줄러로 제니퍼 데이터베이스에 대한 작업을 수행한 후에는 반드시 사용한 JDBC 자원(java.sql.Connection, java.sql.Statement, java.sql.ResultSet)을 반환(close)한다. 그렇지 않으면 제니퍼 서버에서 장애가 발생할 수 있다.
스케줄러 클래스 패키지 및 배포
컴파일한 스케줄러 클래스를 임의의 JAR 파일로 패키지한 후에, 해당 파일을 JENNIFER_HOME/server/common/lib 디렉토리에 복사한다.
스케줄러 설정
새로운 스케줄러는 제니퍼 서버의 time_actor 옵션을 사용해서 등록한다.
time_actor_32 = sample.SampleActor 03 sample
스케줄러를 등록할 때 사용하는 제니퍼 서버의 옵션은 time_actor_로 시작하고, 다른 스케줄러와 구분하기 위한 2자의 고유한 숫자로 끝나야 한다.
새로운 스케줄러의 추가나 기존 스케줄러의 변경은 제니퍼 서버의 재시작이 필요하다.
사용자, 권한 그리고 메뉴
사용자와 그룹의 관계를 설명하고 권한을 그룹에 할당하는 방법을 설명한다. 그리고 메뉴를 관리하는 방법과 사용자 혹은 그룹 별로 메뉴를 다르게 설정하는 방법 등을 설명한다.
사용자 관리
사용자는 제니퍼 서버에 로그인할 수 있는 계정을 의미한다. 사용자 별로 접근 가능한 메뉴를 다르게 설정할 수 있으며 권한의 수준을 다르게 지정할 수 있다.
제니퍼 서버를 설치하면 admin 사용자가 만들어진다. 기본적으로 admin 사용자는 모든 메뉴에 접근할 수 있고 모든 권한을 가진다. 사용자를 추가하거나 그 정보를 변경하려면 [구성 관리 | 사용자 관리 | 사용자 관리] 메뉴를 사용한다.
사용자와 그룹
사용자에 따라서 메뉴 구성을 다르게 하거나 권한을 다르게 부여할 수 있다. 사용자가 많아지면 이와 관련한 설정 작업이 불편할 수 있다. 제니퍼 서버는 동일한 유형의 사용자를 그룹으로 묶고, 그 그룹에 대해서 메뉴 구성이나 권한을 설정할 수 있다. 즉, 그룹은 동일한 메뉴에 접근하고 동일한 권한을 가지고 있는 사용자의 집합을 의미한다.
admin 사용자와 admin 그룹
제니퍼 서버를 설치하면 admin 사용자와 admin 그룹이 기본적으로 만들어진다. admin 사용자와 admin 그룹은 임의로 삭제할 수 없다. 또한 admin 사용자는 자신이 속한 그룹(admin)을 변경할 수 없다.
사용자와 관련한 정보는 다음과 같다.
항목 | 설명 |
---|---|
아이디 | 로그인에 사용하는 계정 아이디로, 신규 생성 후에는 변경할 수 없다. |
이름 | 사용자 이름 |
그룹 | 사용자가 속한 그룹으로 사용자는 하나의 그룹에만 속할 수 있다. 단 여러 사용자는 동일한 그룹에 속할 수 있다. |
회사 | 사용자가 속한 회사 |
부서 | 사용자가 속한 부서 |
직책 | 사용자 직책 |
이메일 | 사용자 이메일 주소 |
전화번호 | 사용자 전화번호 |
핸드폰 | 사용자 이동통신 전화번호 |
초기 메뉴 | 로그인 후에 이동하는 첫번째 메뉴로 사용자 혹은 사용자가 속한 그룹이 해당 메뉴에 접근할 수 있어야 한다. |
회사, 부서, 직책, 이메일, 전화번호, 핸드폰 등은 부가 정보로서 제니퍼 서버 사용에 영향을 주지 않는다.
그룹 관리
사용자 정보 편집 화면에서 그룹을 선택하는 드랍 다운 박스 옆에 있는 [그룹 관리] 링크를 통해서 그룹 정보를 관리한다.
그룹과 관련한 정보는 다음과 같다.
항목 | 설명 |
---|---|
아이디 | 그룹 아이디 |
이름 | 그룹 이름 |
설명 | 그룹에 대한 설명 |
에이전트 목록 | 그룹 별 에이전트 지정하기를 참조한다. |
초기 메뉴 | 해당 그룹에 속한 사용자가 로그인 후에 이동하는 첫번째 메뉴로 그룹이 해당 메뉴에 접근할 수 있어야 한다. 사용자 정보에 설정한 초기 메뉴가 그룹 정보에 설정한 초기 메뉴에 우선한다. 설정하지 않은 경우에는 [대시보드 | 제니퍼 대시보드] 메뉴가 초기 메뉴가 된다. |
그룹 별 에이전트 지정하기
사용자 별로는 모니터링하는 에이전트를 다르게 지정할 수 없지만, 그룹 별로는 모니터링하는 에이전트를 다르게 지정할 수 있다. 예를 들어, 제니퍼 서버를 통해서 W11, W12,W13 등의 에이전트를 모니터링하고 있는 상황에서, A 그룹에게는 W11, W12만을, B 그룹에게는 W12, W13만을 모니터링하게 할 수 있다.
그룹 정보 편집 화면에서 특정 그룹이 모니터링할 에이전트 이름을 콤마(,)를 구분자로 하여 에이전트 목록 필드에 입력한다. 전체를 의미하는 가상 에이전트 TOT를 입력하지 않으면 대시보드 등에서 전체와 관련한 정보를 확인할 수 없다.
사용자 숫자 제한하기
기본적으로 제니퍼 서버를 동시에 사용할 수 있는 사용자의 숫자를 제한하지 않는다. 동시 사용자 수를 제한하고자 하는 경우, 제니퍼 서버의 userlogin_count_limit 옵션을 통해서 사용자 숫자를 제한할 수 있다.
userlogin_count_limit = 10
제니퍼 서버와 제니퍼 클라이언트(애플릿)는 주기적으로 TCP 통신을 한다. 그런데 제니퍼 클라이언트와의 TCP 통신을 담당하는 제니퍼 서버의 소켓 수는 제한되어 있다. 이는 제니퍼 서버의 number_of_tcp_pooled_workers 옵션으로 설정하는데 기본 값은 80이다. 평균적으로 제니퍼 클라이언트 당 약 3개의 소켓을 사용하는데, 사용자가 증가하면 TCP 연결에 필요한 소켓을 할당받지 못해서 제니퍼 클라이언트가 정상적으로 동작하지 못할 수 있다. 따라서 이 경우에는 userlogin_count_limit 옵션을 통해서 사용자 숫자를 제한할 수 있다.
동일 계정으로 로그인하는 것을 방지하기
기본적으로 여러 사용자가 동일한 사용자 계정으로 제니퍼 서버를 동시에 사용할 수 있다. 예를 들어, 사용자 A가 admin 사용자 계정으로 제니퍼 서버를 사용하고 있는 상태에서, 사용자 B가 동일한 admin 사용자 계정으로 제니퍼 서버에 로그인해도 어떠한 제약이 없다.
다른 사용자가 동일한 사용자 계정으로 제니퍼 서버를 사용하는 것을 방지하기 위해서는, 제니퍼 서버의 prevent_duplicated_login 옵션을 true로 지정한다.
prevent_duplicated_login = true
중복 로그인 방지는 나중에 로그인한 사용자가 먼저 로그인한 사용자를 밀어내는 방식으로 동작한다. 예를 들어, 사용자 A가 admin 사용자 계정으로 제니퍼 서버를 사용하고 있는 상태에서, 사용자 B가 동일한 admin 사용자 계정으로 제니퍼 서버에 로그인을 시도하면, 제니퍼 서버는 사용자 B에게 이미 admin 계정으로 로그인한 사용자가 있음을 알려준다.
이 때 사용자 B는 먼저 로그인한 사용자 A를 밀어내고 제니퍼 서버에 로그인할 수 있는 선택권을 갖는다. 사용자 B가 사용자 A를 밀어내면 사용자 A는 자동으로 로그아웃된다.
로그인한 사용자 확인
[구성 관리 | 사용자 관리 | 로그인 사용자] 메뉴에서 제니퍼 서버에 로그인해 있는 사용자를 확인할 수 있다. 로그인한 사용자 목록에서 글자 하단에 줄이 있는 열은 사용자 자기 자신을 나타낸다.
항목 | 설명 |
---|---|
아이디 | HTTP 세션 아이디 |
사용자 아이디 | 사용자 아이디 |
사용자 IP | 사용자 IP |
로그인 시간 | 제니퍼 서버에 로그인한 시간 |
마지막 접근 시간 | 마지막으로 제니퍼 서버에 접근한 시간 |
언어 | 사용자 언어 |
패스워드 변경 및 패스워드 분실 조치
모든 사용자는 [구성 관리 | 사용자 관리 | 패스워드 변경] 메뉴에서 본인의 패스워드를 변경할 수 있다.
admin 그룹에 속한 사용자는 [구성 관리 | 사용자 관리 | 사용자 관리] 메뉴에서 본인을 포함한 모든 사용자의 패스워드를 변경할 수 있다. 타 사용자 패스워드는 다음과 같이 변경한다.
사용자 목록에서 패스워드를 변경할 사용자 아이디를 클릭한다.
사용자 정보 편집 화면 하단에 있는 [패스워드 변경] 버튼을 클릭하면 패스워드 입력 필드가 나타난다.
패스워드 입력 필드에 패스워드를 입력한 후에 [저장] 버튼을 클릭하면 해당 사용자의 패스워드가 변경된다.
admin 그룹에 속한 모든 사용자의 패스워드를 분실한 경우에는 다음과 같이 처리한다.
제니퍼 서버를 정지한다.
JENNIFER_HOME/server/webapps/ROOT/WEB-INF/web.xml 파일에서 컨텍스트 파라미터 enable_password_check를 false로 변경한다. 이 값을 false로 설정하면 로그인을 할 때 패스워드를 체크하지 않는다.
제니퍼 서버를 시작한다.
로그인 화면에서 admin 그룹에 속하는 사용자 아이디와 임의의 패스워드를 입력하여 로그인한다.
[구성 관리 | 사용자 관리 | 사용자 관리] 메뉴에서 admin 그룹에 속하는 사용자의 패스워드를 변경한다.
제니퍼 서버를 정지한다.
JENNIFER_HOME/server/webapps/ROOT/WEB-INF/web.xml 파일에서 컨텍스트 파라미터 enable_password_check를 true로 변경한다.
제니퍼 서버를 시작한다.
권한 관리
사용자는 제니퍼 서버를 통해서 자바 애플리케이션에 대한 가비지 콜렉션을 수행하거나 제니퍼 서버 사용자와 그룹 정보를 편집할 수 있다. 이와 같이 사용자가 수행할 수 있는 주요 행위를 권한이라고 하며 사용자가 속한 그룹 별로 권한을 다르게 부여할 수 있다.
예를 들어, gc 권한은 자바 애플리케이션에 대한 가비지 컬렉션 수행 권한을 의미하는데 A 그룹에 gc 권한을 부여하고 B 그룹에는 gc 권한을 부여하지 않으면, A 그룹에 속한 사용자는 자바 애플리케이션에 대한 가비지 컬렉션을 수행할 수 있지만 B 그룹에 속한 사용자는 자바 애플리케이션에 대한 가비지 컬렉션을 수행할 수 없다.
[구성 관리 | 사용자 관리 | 권한 관리] 메뉴에서 권한 목록을 확인하고 특정 권한을 특정 그룹에 부여한다.
권한 아이디 | 설명 |
---|---|
codedisassemble | 자바 클래스 코드를 바이너리 포멧으로 볼 수 있는 권한 |
gc | 자바 애플리케이션에 대해서 가비지 컬렉션을 수행할 수 있는 권한 |
groupedit | 그룹을 편집할 수 있는 권한 |
killthread | 자바 애플리케이션의 자바 쓰레드를 정지시킬 수 있는 권한 |
menuedit | 메뉴를 편집할 수 있는 권한 |
pageedit | 사용자 정의 대시보드를 구성할 수 있는 권한 |
reportbuild | 보고서 템플릿을 작성할 수 있는 권한 |
sqlparam | SQL 파라미터를 볼 수 있는 권한 |
svcdump | 자바 애플리케이션의 주요 정보를 덤프 파일에 기록할 수 있는 권한 |
useredit | 사용자를 편집할 수 있는 권한 |
board | 보드 영역 표시 여부와 관련한 권한 |
권한을 특정 그룹에 할당하려면 다음과 같이 한다.
권한 목록에서 그룹을 할당할 권한 아이디를 클릭한다.
권한 정보 편집 화면의 그룹 필드에서 권한을 할당하고자 하는 그룹을 체크하고 저장한다.
메뉴 관리
[구성 관리 | 메뉴 관리] 메뉴에서 메뉴를 관리한다. 제니퍼 서버는 3단계 메뉴로 구성된다
메뉴 트리 노드 - 메뉴는 3단계 구조로 되어 있고 메뉴 트리 노드를 통해서 하위 메뉴를 열고 닫는다.
컨텍스트 메뉴 - 메뉴 아이디 / 이름 칼럼을 클릭하면 컨텍스트 메뉴 목록이 나타난다.
메뉴 수정 - 컨텍스트 메뉴 목록에서 [수정] 메뉴를 클릭하면 화면 오른 쪽에 메뉴를 수정할 수 있는 입력폼이 나타난다.
하위 메뉴 추가 - 컨텍스트 메뉴 목록에서 [하위 메뉴 추가] 메뉴를 클릭하면 화면 오른 쪽에 하위 메뉴를 입력할 수 있는 입력폼이 나타난다. 단 메뉴는 3 단계까지만 입력이 가능하기 때문에 3 단계 메뉴의 경우에는 이 메뉴는 비활성화되어 있다.
메뉴 삭제 - 컨텍스트 메뉴 목록에서 [삭제] 메뉴를 클릭하면 메뉴가 삭제된다.
1 단계 메뉴 추가 - 메뉴 목록 오른쪽 하단에 있는 [추가] 버튼을 클릭하여 1 단계 메뉴를 추가한다.
새로운 메뉴를 생성할 때 메뉴 아이디는 제니퍼 서버에 의해서 자동으로 만들어진다.
메뉴 기본 정보는 다음과 같다.
항목 | 설명 |
---|---|
이름 코드 | 다국어 지원을 위한 메시지 키를 입력하는 필드이다. |
상위 메뉴 | 해당 메뉴의 위치를 수정하려면 상위 메뉴 필드의 값을 수정한다. |
기본 하위 메뉴 | 사용자가 상단 영역에서 특정 메뉴를 클릭했을 때 해당 메뉴의 URL 등이 지정되어 있지 않은 경우에 기본 하위 메뉴로 설정한 메뉴의 URL로 이동한다. |
순서 | 상위 메뉴가 같은 동일 단계의 메뉴들 간의 순서를 결정하는데 사용하는 필드이다. 필드의 값이 작은 메뉴를 먼저 보여준다. |
그룹 | 해당 메뉴에 접근할 수 있는 그룹을 지정한다. 특정 메뉴에 대해서 접근 권한이 없는 그룹에 속한 사용자가 로그인을 하면 상단 영역에 해당 메뉴가 나타나지 않는다. |
메뉴는 몇 가지 유형으로 구분되며 해당 유형에 따라서 입력할 수 있는 내용이 달라진다.
URL 링크 메뉴 - 특정 URL을 링크하는 메뉴로 가장 일반적이다. 메뉴 유형으로 이 유형을 선택하면 URL 필드가 나타난다.
URL 팝업 메뉴 - 특정 URL을 새로운 웹 브라우저 창에서 연다. 메뉴 유형으로 이 유형을 선택하면 URL 필드가 나타난다.
사용자 정의 대시보드 메뉴 - 드래그 & 드랍으로 사용자가 직접 화면을 구성하는 메뉴로 상단 영역에서 해당 메뉴를 클릭하면 메인 영역의 오른 쪽 하단에 편집 버튼이 나타난다. 이 버튼을 누르면 사용자 정의 대시보드 편집 화면으로 이동한다.
리포트 메뉴 - 보고서를 보여주는 메뉴이다. 메뉴 유형으로 이 유형을 선택하면 보고서 템플릿을 선택할 수 있는 드랍 다운 박스가 나타난다.
사용자 혹은 그룹에 따른 메뉴 설정
메뉴 정보 편집 화면에서 특정 메뉴에 접근할 수 있는 그룹을 지정할 수 있다. 특정 사용자 혹은 그룹에 대해서 메뉴를 설정하는 것은 사용자 관리 혹은 그룹 관리에서 하는 것이 편리하다. 사용자에 대해서 메뉴를 설정하는 방법은 다음과 같다.
[구성 관리 | 사용자 관리 | 사용자 관리] 메뉴의 사용자 목록에서 메뉴를 설정할 사용자 아이디를 클릭한다.
사용자 정보 편집 화면 하단에 있는 [메뉴 설정] 버튼을 클릭하면 팝업 창에 메뉴 목록이 나타난다.
해당 사용자가 접근할 수 있는 메뉴를 체크한 후에 하단에 있는 [저장] 버튼을 누른다.
그룹에 대해서 메뉴를 설정하는 방법은 다음과 같다.
[구성 관리 | 사용자 관리 | 사용자 관리] 메뉴의 사용자 목록에서 임의의 사용자 아이디를 클릭한다.
사용자 정보 편집 화면에서 그룹을 지정하는 드랍 다운 박스 옆에 있는 [그룹 관리] 링크를 클릭하면 팝업 창에 그룹 목록이 나타난다.
그룹 목록에서 메뉴를 설정할 그룹 아이디를 클릭한다.
그룹 정보 편집 화면 하단에 있는 [메뉴 설정] 버튼을 클릭하면 팝업 창에 메뉴 목록이 나타난다.
해당 그룹이 접근할 수 있는 메뉴를 체크한 후에 하단에 있는 [저장] 버튼을 누른다.
상위 메뉴와 하위 메뉴를 독립적으로 선택해야 한다. 상위 메뉴를 선택했을 때 자동으로 하위 메뉴가 선택되지 않는다. 그리고 상위 메뉴를 선택하지 않은 상태에서 하위 메뉴만을 선택하면 해당 하위 메뉴는 화면에 나타나지 않는다.
사용자에 대한 메뉴 설정이 그룹에 대한 메뉴 설정에 우선한다.
패스워드 관리
로그인과 관련한 설정
보안 강화를 위해서 로그인과 관련한 다양한 정책을 설정할 수 있다. 우선 사용자가 제니퍼 서버에 처음 로그인을 한 후에 패스워드를 변경하도록 강제할 수 있다. 이 기능을 사용하려면 제니퍼 서버의 enable_initial_password_change 옵션을 true로 설정한다. 기본 값은 false이다.
enable_initial_password_change = true
이 옵션을 true로 설정하면 처음 로그인한 사용자는 패스워드 변경 화면에서 패스워드를 변경해야 다른 메뉴로 이동할 수 있다.
또한, 정해진 기간이 지나면 사용자가 패스워드를 변경하도록 강제할 수 있다. 이 기능을 사용하려면 제니퍼 서버의 enable_password_expiration_check 옵션을 true로 설정한다. 기본 값은 false이다.
enable_password_expiration_check = true
이 옵션을 true로 설정하면 일반 사용자는 60일이 지나면 패스워드를 변경해야 하고 관리자 그룹에 속하는 사용자는 30일이 지나면 패스워드를 변경해야 한다. 제니퍼 서버의 password_expiration_days 옵션을 통해서 패스워드의 유효 기간을 설정할 수 있다.
password_expiration_days = 60
이 옵션은 일반 사용자와 관리자 그룹에 속한 사용자에게 모두 적용된다. 관리자 그룹에 속한 사용자의 패스워드 유효 기간을 설정하려면 제니퍼 서버의 admin_password_expiration_days 옵션을 사용한다.
admin_password_expiration_days = 30
로그인 시에 사용자가 정해진 임계치 이상으로 패스워드를 틀리면 해당 사용자 계정을 사용하지 못하도록 설정할 수 있다. 이 기능을 사용하려면 제니퍼 서버의 enable_invalid_login_lock 옵션을 true로 설정한다. 기본 값은 false이다.
enable_invalid_login_lock = true
기본적으로 3회 이상 패스워드를 틀리면 해당 사용자 계정을 사용할 수 없는데 제니퍼 서버의 invalid_login_count 옵션을 통해서 임계치를 설정할 수 있다.
invalid_login_count = 3
위와 같은 이유로 사용할 수 없게 된 사용자 계정은 관리자 그룹에 속한 사용자가 [구성 관리 | 사용자 관리] 메뉴에서 해당 사용자의 패스워드를 변경해주면 사용할 수 있게 된다.
패스워드 변경과 관련한 설정
악의적인 사용자에 의해서 패스워드가 유추되는 것을 방지하기 위해서 패스워드에 대한 다양한 정책을 설정할 수 있다.
우선 패스워드의 길이를 제한할 수 있다. 제니퍼 서버의 password_length_min 옵션을 통해서 패스워드의 최소 길이를, password_length_max 옵션을 통해서 패스워드의 최대 길이를 설정할 수 있다.
password_length_min = 3 password_length_max = 10
그리고 패스워드에 대문자, 소문자, 숫자, 특수 문자 등을 몇 개 이상 포함시키도록 설정할 수 있다. 예를 들어서 제니퍼 서버의 password_uppercase_count 옵션을 통해서 패스워드에 포함시켜야 하는 대문자의 최소 숫자를 설정할 수 있다.
password_uppercase_count = 3
동일하게 소문자는 password_lowercase_count 옵션으로, 숫자는 password_number_count 옵션으로, 특수 문자는 password_specialcase_count 옵션으로 설정하면 된다.
password_lowercase_count = 2 password_number_count = 2 password_specialcase_count = 2
다음은 패스워드에 사용 가능한 특수 문자이다.
`~!@#$%^&*()-_=+[{]}\|;:'",<.>/?
제니퍼 서버의 password_specialcase_list 옵션을 통해서 패스워드에 사용 가능한 특수문자를 임의로 설정할 수 있다.
password_specialcase_list = !@#$%?
또한 과거에 사용한 패스워드의 재사용을 방지할 수도 있다. 제니퍼 서버의 password_history_count 옵션을 통해서 재사용할 수 없는 과거 패스워드의 숫자를 설정하면 최근 날짜를 기준으로 해당 숫자 만큼의 과거 패스워드는 재사용할 수 없다.
password_history_count = 6
그리고 패스워드에 동일한 문자를 사용하거나 연속적으로 이어지는 문자를 사용하는 것을 방지할 수 있다. 동일한 문자를 사용하는 것을 방지하려면 제니퍼 서버의 password_enable_repetive_charactor_check 옵션을 true로 설정하고 연속적으로 이어지는 문자를 사용하는 것을 방지하려면 제니퍼 서버의 password_enable_consecutive_charactor_check 옵션을 true로 설정한다.
password_enable_repetive_charactor_check = true password_enable_consecutive_charactor_check = true
마지막으로 사용자 아이디나 지정된 단어를 패스워드에 사용하는 것을 방지할 수 있다. 이 기능을 사용하려면 제니퍼 서버의 password_enable_common_word 옵션을 true로 설정한다.
password_enable_common_word = true
이 옵션을 true로 설정하면 기본적으로 패스워드에 사용자 아이디를 사용하는 것을 방지한다. 지정된 단어의 사용까지 방지하려면 JENNIFER_HOME/server/bin 디렉토리에 password_common_word.txt 파일을 만든 후에 사용할 수 없는 단어를 입력한다. 단어는 줄바꿈으로 구분한다. 관리자 그룹에 속한 사용자가 [구성 관리 | 사용자 관리 | 사용자 관리] 메뉴에서 다른 사용자의 패스워드를 변경할 때는 위에서 설명한 내용이 적용되지 않는다.
게시판 관리
[구성 관리 | 게시판] 메뉴에서 게시판 기능을 사용한다.
게시판 유형
게시판 유형은 제니퍼 서버의 bbs_type_list 옵션으로 설정한다. 게시판 유형은 [게시판 유형 코드:게시판 유형 이름] 형식을 따르고, 각 게시판 유형은 세미 콜론[;]으로 구분한다.
bbs_type_list = biz:Business;rpt:Report;chat:Personal
기본으로 제공하는 게시판 유형은 다음과 같다.
게시판 유형 코드 | 게시판 유형 이름 | 설명 |
---|---|---|
biz | Business | 업무 관련 게시판 |
rpt | Report | 보고서 관련 게시판 |
chat | Personal | 사적 게시판 |
새로운 게시판 유형은 제니퍼 서버 bbs_type_list 옵션을 수정하여 추가한다.
게시판 검색
등록된 게시물은 게시판 유형, 제목, 내용 등을 조건으로 검색할 수 있다. 제목과 내용은 LIKE 검색을 지원한다.
게시물 올리기
새로운 게시물은 다음과 같이 등록한다.
[구성 관리 | 게시판] 메뉴로 이동한다.
게시물 목록 하단에 있는 [추가] 버튼을 클릭한다.
게시판 입력 폼에서 내용을 입력한 후에 하단에 있는 [쓰기] 버튼을 클릭한다.
필드 | 설명 |
---|---|
게시판 유형 | 게시판 유형을 선택한다. 게시물을 올린 이후에는 수정할 수 없다. |
제목 | 게시물 제목 |
처리 담당자 | 해당 게시물에 대한 처리가 필요한 경우에는 처리 담당자를 지정한다. |
처리 요망일 | 해당 게시물에 대한 처리가 필요한 경우에는 처리 요망일을 지정한다. |
상태 | [관련 없음], [처리 요청], [진행 중], [처리 완료] 중에서 하나를 선택하여 해당 게시물의 상태를 지정한다 . |
내용 | 게시물 내용 |
첨부 파일 | 첨부할 파일을 선택한다. 첨부할 수 있는 파일의 크기와 형식에는 제한이 없다. |
첨부 파일이 제니퍼 서버에 저장되는 위치는 제니퍼 서버의 upload_directory 옵션으로 설정한다. 기본 디렉토리는 JENNIFER_HOME/data/upload 디렉토리이다.
게시물 변경은 다음과 같이 한다.
[구성 관리 | 게시판] 메뉴로 이동한다.
게시물 목록에서 수정할 게시물 제목을 클릭한다.
게시물 보기 화면에서 [수정] 링크를 클릭한다.
게시판 입력 폼에서 내용을 수정한 후에 하단에 있는 [쓰기] 버튼을 클릭한다.
게시물 삭제는 다음과 같이 한다.
[구성 관리 | 게시판] 메뉴로 이동한다.
게시물 목록에서 삭제할 게시물 제목을 클릭한다.
게시물 보기 화면에서 [삭제] 링크를 클릭한다.
답글이 있는 경우에는 게시물을 삭제할 수 없다.
답글 올리기
게시물에 대한 답글 올리기는 다음과 같이 한다.
[구성 관리 | 게시판] 메뉴로 이동한다.
게시물 목록에서 답글을 올릴 게시물 제목을 클릭한다.
게시물 보기 화면에서 하단에 있는 [답글 올리기] 버튼을 클릭한다.
답글 입력 폼에서 내용을 입력한 후에 하단에 있는 [저장] 버튼을 클릭한다.
답글 변경은 다음과 같이 한다.
[구성 관리 | 게시판] 메뉴로 이동한다.
게시물 목록에서 답글을 올릴 게시물 제목을 클릭한다.
게시물 보기 화면에서 수정할 답글 하단에 있는 [수정] 링크를 클릭한다.
답글 입력 폼에서 내용을 수정한 후에 하단에 있는 [저장] 버튼을 클릭한다.
답글 삭제는 다음과 같이 한다.
[구성 관리 | 게시판] 메뉴로 이동한다.
게시물 목록에서 답글을 올릴 게시물 제목을 클릭한다.
게시물 보기 화면에서 삭제할 답글 하단에 있는 [삭제] 링크를 클릭한다.
도메인 구성
하나의 제니퍼 서버가 감당할 수 있는 제니퍼 에이전트의 숫자와 업무 처리량에는 한계가 있다. 시스템 환경이 한계를 초과하는 경우에는 여러 개의 제니퍼 서버를 운영해서 부하를 분산시켜야 한다. 이를 위한 것이 도메인 구성이다.
또한 도메인 구성 여부와 상관없이, 제니퍼 에이전트를 업무 종류에 따라 계층적으로 분류해서 모니터링할 필요성도 있다. 이를 위한 것이 노드 구성이다.
도메인이란?
하나의 제니퍼 서버가 감당할 수 있는 제니퍼 에이전트의 숫자와 업무 처리량에는 한계가 있다. 이 한계를 초과하는 경우에는 여러 개의 제니퍼 서버를 운영해서 부하를 분산시켜야 한다.
하나의 제니퍼 서버가 감당할 수 있는 제니퍼 에이전트의 숫자는 50개 정도이고 TPS는 약 1000이다.
그러나 여러 개의 제니퍼 서버를 운영하면 관리 비용은 증가하고 사용자 편의성은 감소하는 단점이 있다. 이런 단점을 해결하기 위해서 제니퍼 4.0에서는 도메인 구성을 통해서 여러 개의 제니퍼 서버를 통합해서 관리하는 통합 사용자 인터페이스를 제공한다.
여기서 도메인은 개별 제니퍼 서버를 의미하고, 도메인 구성은 통합 서버를 통해서 여러개의 제니퍼 서버를 하나로 통합하는 것을 의미한다.
제니퍼 에어전트로 모니터링하는 자바 애플리케이션을 특정 제니퍼 서버에 할당할 때는 우선 업무의 유사성을 고려한다. 그러나 업무의 유사성만을 기준으로 제니퍼 에이전트를 할당하면 제니퍼 서버가 많아질 수 있다. 그러므로 업무의 유사성이 낮더라도 TPS가 높지 않은 제니퍼 에이전트들을 하나의 제니퍼 서버에 모두 할당하는 것을 권장한다.
통합 서버
통합 서버는 여러 개의 제니퍼 서버 중에서 사용자가 웹브라우저를 통해서 접근하는 유일한 서버이다. 따라서 통합 서버도 제니퍼 서버이다. 사용자는 이 통합 서버를 통해서 도메인 구성을 하고 사용자, 권한, 메뉴 등의 설정을 한다.
여러 개의 제니퍼 서버 중에서 통합 서버를 선택할 때는 다음 사항을 고려한다.
특정 제니퍼 서버가 자바 애플리케이션을 모니터링하는 역할과 통합 서버의 역할을 동시에 수행 할 수 있다. 통합 서버의 역할만을 하는 제니퍼 서버를 별도로 운영하는 것은 권장하지 않는다.
여러 개의 제니퍼 서버에 제니퍼 에이전트와 TPS를 적절히 분배해서 제니퍼 서버의 숫자를 최소한으로 억제한다.
통합 서버에는 성능 데이터 수집과 분석 이외에 사용자 인터페이스 처리와 관련한 추가적인 부하가 발생하기 때문에, 부하가 가장 적은 제니퍼 서버를 통합 서버로 선택하는 것을 권장한다.
REMON을 통해서 많은 데이터를 수집하는 경우에는 REMON 데이터를 여러 개의 제니퍼 서버에서 별도로 수집하는 것보다 하나의 제니퍼 서버에서 수집하는 것을 권장한다. 또한 이런 경우에는 REMON 데이터만을 수집하는 제니퍼 서버를 두고 이를 통합 서버로 사용하는 것을 권장한다.
도메인 관리
도메인 구성과 관련한 작업은 통합 서버로 선택한 제니퍼 서버에서 이루어진다.
도메인을 추가하는 방법은 다음과 같다.
통합 서버의 [구성 관리 | 도메인 관리] 메뉴로 이동한다.
도메인 목록 오른쪽 하단의 [추가] 버튼을 클릭한다.
도메인 입력 폼에 내용을 입력한 후에 하단의 [저장] 버튼을 클릭한다.
다음은 도메인 입력 폼의 필드에 대한 설명이다.
필드 | 설명 |
---|---|
아이디 | 해당 제니퍼 서버를 지칭하는 고유한 아이디로, 띄어쓰기 없이 영어와 숫자만을 사용하여 입력한다. |
이름 | 해당 제니퍼 서버의 이름 |
IP | 해당 제니퍼 서버의 IP 주소 |
HTTP 포트 | 해당 제니퍼 서버의 HTTP 포트 번호 |
TCP 포트 | 해당 제니퍼 서버의 server_tcp_port 옵션으로 설정한 포트 번호 |
버전 | 해당 제니퍼 서버의 버전으로 4.0을 입력한다. 제니퍼 4.0 이하의 버전은 도메인을 통해서 통합 할 수 없다. |
상태 | Inactive로 설정한 제니퍼 서버는 사용하지 않는다. |
도메인 추가시 제니퍼 서버 외부 IP를 제니퍼 서버가 설치된 하드웨어에서는 호출할 수 없는 경우가 있다. 이 문제를 해결하려면 IP를 설정할 때 제니퍼 서버 외부 IP와 내부 IP를 슬래시[/]를 구분자로 입력하도록 한다.
External_Jennifer_Server_IP/Internal_Jennifer_Server_IP
도메인을 추가한 경우에는 싱글 사인온을 위해서 해당 제니퍼 서버의 domain_url 옵션에 통합 서버의 HTTP 주소를 설정한다.
domain_url = http://통합서버IP:포트번호
외부 IP와 내부 IP가 분리되어 있는 경우에는 외부 IP를 사용한다. 통합 서버가 싱글 사인온 서버의 역할도 수행하기 때문에, 통합 서버에 로그인한 사용자는 통합 서버에 도메인으로 등록된 제니퍼 서버가 제공하는 서비스를 별도의 로그인 없이 사용할 수 있다.
이 옵션을 설정하기 전에는 도메인으로 등록한 해당 제니퍼 서버가 통합 서버와 싱글 사인온으로 연결되어 있지 않기 때문에 해당 제니퍼 서버에 로그인하여 옵션을 수정하거나 해당 제니퍼 서버의 설정 파일을 직접 수정해야 한다.
도메인을 수정하는 방법은 다음과 같다.
통합 서버의 [구성 관리 | 도메인 관리] 메뉴로 이동한다.
도메인 목록 중에서 수정할 도메인의 아이디를 클릭한다.
도메인 입력 폼의 내용을 수정한 후에 하단의 [저장] 버튼을 클릭한다.
도메인을 삭제하는 방법은 다음과 같다.
통합 서버의 [구성 관리 | 도메인 관리] 메뉴로 이동한다.
도메인 목록 중에서 삭제할 도메인의 체크 박스를 선택한다.
도메인 목록 하단의 [삭제] 버튼을 클릭한다.
도메인의 순서를 변경하는 방법은 다음과 같다.
통합 서버의 [구성 관리 | 도메인 관리] 메뉴로 이동한다.
도메인 목록 오른쪽 하단의 [정렬] 버튼을 클릭한다.
정렬 팝업 창에서 도메인의 순서를 변경한다.
도메인 구성을 변경한 후에 통합 서버에 다시 로그인을 해야 변경 사항이 반영된다.
제니퍼 에이전트 불러오기
노드를 구성하거나 제니퍼 에이전트에 이름을 부여하려면 도메인을 구성한 후에 제니퍼 에이전트 불러오기를 수행해야 한다.
제니퍼 에이전트를 불러오는 방법은 다음과 같다.
통합 서버의 [구성 관리 | 도메인 관리] 메뉴로 이동한다.
도메인 목록 중에서 제니퍼 에이전트를 불러 올 도메인의 아이디를 클릭한다.
오른쪽 제니퍼 에이전트 목록 아래에 있는 [불러오기] 버튼을 클릭한다.
도메인 입력폼의 [취소] 버튼과 상관없이 [불러오기] 버튼을 클릭하는 순간에 관련 데이터가 저장된다.
특정 제니퍼 에이전트의 이름을 변경하는 방법은 다음과 같다.
통합 서버의 [구성 관리 | 도메인 관리] 메뉴로 이동한다.
도메인 목록 중에서 이름을 변경할 제니퍼 에이전트가 속해 있는 도메인의 아이디를 클릭한다.
오른쪽 하단 제니퍼 에이전트 목록에서 이름을 수정할 제니퍼 에이전트를 선택한 후에 이름 칼럼에 이름을 입력한다.
선택한 제니퍼 에이전트 열에 있는 [저장] 링크를 클릭한다.
더 이상 사용하지 않는 특정 제니퍼 에이전트를 삭제하는 방법은 다음과 같다.
통합 서버의 [구성 관리 | 도메인 관리] 메뉴로 이동한다.
도메인 목록 중에서 삭제할 제니퍼 에이전트가 속해있는 도메인의 아이디를 클릭한다.
오른쪽 하단 제니퍼 에이전트 목록에서 삭제할 제니퍼 에이전트를 선택한 후에 해당 열에 있는 [삭제] 링크를 클릭한다.
도메인 구성에 따른 사용자 인터페이스의 변화
도메인을 구성한 경우에는 많은 사용자 인터페이스 화면에서 도메인을 명시적으로 선택해 주어야 한다.
예를 들어, [구성 관리 | 라이센스키 관리] 메뉴에서 도메인을 드랍다운 박스를 통해서 선택해야 한다.
제니퍼 에이전트 선택 영역은 도메인을 기준으로 한다. 다른 도메인에 속하는 제니퍼 에이전트 목록을 확인하는 방법은 다음과 같다.
옵션 아이콘을 클릭한다.
컨텍스트 메뉴에서 [도메인 선택] 메뉴를 선택하여 특정 도메인을 클릭한다.
노드 구성
노드란?
제니퍼 서버가 모니터링하는 제니퍼 에이전트가 많으면, 업무 종류에 따라 트리 형태로 제니퍼 에이전트를 묶어 체계적으로 분류하여 모니터링할 수 있다. 여기서 노드는 일부 제니퍼 에이전트의 묶음이고 노드 구성은 노드를 이용해서 트리 형태로 전체 제니퍼 에이전트를 분류하는 것이다.
예를 들어, 특정 제니퍼 서버가 모니터링하는 제니퍼 에이전트가 W11에서 W19까지 있을때, 업무 성격을 기준으로 W11에서 W15까지로 [그룹웨어] 노드를 구성하고 W16에서 W19까지로 [HR] 노드를 구성 할 수 있다. 그리고 [그룹웨어] 노드와 [HR] 노드로 [사내시스템] 노드를 구성할 수 있다.
노드의 단계는 4단계까지로 제한된다.
노드 관리
노드를 구성하려면 우선 도메인을 등록한 후에 제니퍼 에이전트 불러오기를 수행해야 한다.
노드를 구성하려면 제니퍼 서버가 하나인 경우에도 도메인을 등록해야 한다. 여기서 등록하는 도메인은 현재 사용하고 있는 제니퍼 서버이다.
노드를 추가하려면 우선 최상위 노드를 입력해야 한다. 최상위 노드를 입력하는 방법은 다음과 같다.
통합 서버의 [구성 관리 | 노드 관리] 메뉴로 이동한다.
첫번째 노드 그룹 박스 아래에 있는 [추가] 버튼을 클릭한다.
노드 입력 폼에 내용을 입력한 후에 하단의 [저장] 버튼을 클릭한다.
필드 | 설명 |
---|---|
이름 | 노드 이름 |
도메인 | 노드에 할당할 제니퍼 에이전트가 속하는 도메인으로, 최상위 노드와 모든 하위 노드는 동일한 도메인에 속하는 제니퍼 에이전트만으로 설정해야 한다. 도메인은 노드를 생성한 후에는 수정할 수 없다. |
그룹명 | 정확한 동시단말 사용자 수와 방문자 수를 모니터링하려면 해당 노드에 속하는 제니퍼 에이전트들의 제니퍼 에이전트 그룹 아이디를 입력한다. |
상태 | Inactive로 설정된 노드는 사용하지 않는다. |
그룹 할당 | 해당 노드를 사용하는 그룹으로, 해당 그룹에 속한 사용자들에게만 해당 노드가 나타난다. 상위 노드에 특정 그룹이 할당되어 있지 않으면, 하위 노드에 해당 그룹이 할당되어 있어도 해당 그룹에 속한 사용자에게 하위 노드가 나타나지 않는다. |
에이전트 할당 | 노드에 속하는 제니퍼 에이전트를 할당한다. 노드가 하위 노드들을 묶는 역할만을 하는 경우에는 제니퍼 에이전트를 할당하지 않아도 된다. |
특정 최상위 노드가 제니퍼 서버를 통해서 모니터링하는 모든 제니퍼 에이전트를 포함하고 있다면 그룹명에 TOT를 입력한다. 그리고 일반 노드에 전체 동시단말 사용자 수와 전체 방문자 수가 HTTP 쿠키에 기반한 정확한 값으로 표시되기를 원하면 제니퍼 서버의 agent_group 옵션으로 설정한 제니퍼 에이전트 그룹 아이디를 노드의 그룹명으로 입력한다. 그룹명을 지정하지 않으면 전체 동시단말 사용자 수와 전체 방문자 수는 개별 제니퍼 에이전트의 동시단말 사용자 수와 방문자 수의 단순 합으로 표시된다.
agent_group = @01:W11,W12; @02:W13,W14
제니퍼 에이전트 그룹 아이디는 @로 시작하고 2자리 숫자로 끝나야 한다. 여러 개의 제니퍼 에이전트 그룹은 세미 콜론(;)을 구분자로 구분하고, 제니퍼 에이전트 그룹 아이디와 해당 제니퍼 에이전트 그룹에 속하는 제니퍼 에이전트 목록은 콜론(:)을 구분자로 구분한다. 그리고 동일한 제니퍼 에이전트 그룹에 속하는 제니퍼 에이전트들은 콤마(,)를 구분자로 구분한다. 이 옵션을 수정하면 제니퍼 서버를 재시작하여야 한다.
2개 이상의 제니퍼 서버로 도메인을 구성한 경우에는 제니퍼 서버의 agent_group 옵션은 해당 제니퍼 에이전트가 존재하는 제니퍼 서버에 설정해야 한다. 제니퍼 서버가 다른 제니퍼 에이전트들로 agent_group 옵션을 설정할 수는 없다.
하위 노드를 추가하는 방법은 다음과 같다.
통합 서버의 [구성 관리 | 노드 관리] 메뉴로 이동한다.
노드 그룹 박스를 통해서 하위 노드를 추가할 상위 노드를 선택한다.
상위 노드 그룹 박스 오른쪽 옆에 있는 노드 그룹 박스의 아래에 있는 [추가] 버튼을 클릭한다.
노드 입력 폼에 내용을 입력한 후에 하단의 [저장] 버튼을 클릭한다.
하위 노드에는 상위 노드와 동일한 도메인에 속하는 제니퍼 에이전트만을 할당할 수 있다. 그리고 이미 다른 노드에 할당한 제니퍼 에이전트를 중복 할당할 수는 없다.
노드를 수정하는 방법은 다음과 같다.
통합 서버의 [구성 관리 | 노드 관리] 메뉴로 이동한다.
노드 그룹 박스를 통해서 수정할 노드를 선택한다.
노드 입력 폼의 내용을 수정한 후에 하단의 [저장] 버튼을 클릭한다.
노드를 삭제하는 방법은 다음과 같다.
통합 서버의 [구성 관리 | 노드 관리] 메뉴로 이동한다.
노드 그룹 박스를 통해서 삭제할 노드를 선택한다.
노드 입력 폼에서 하단의 [삭제] 버튼을 클릭한다.
동일한 상위 노드에 속하는 하위 노드들의 순서를 변경하는 방법은 다음과 같다.
통합 서버의 [구성 관리 | 노드 관리] 메뉴로 이동한다.
노드 그룹 박스를 통해서 순서를 변경할 노드들의 상위 노드를 선택한다.
순서를 변경할 노드들의 노드 그룹 박스 아래에 있는 [정렬] 버튼을 클릭한다.
정렬 팝업 창에서 노드의 순서를 변경한다.
노드 구성을 변경한 후에 제니퍼 서버에 다시 로그인을 해야 변경 사항이 반영된다.
노드 구성에 따른 사용자 인터페이스의 변화
노드를 구성하면 대부분의 사용자 인터페이스 화면 상단에 존재하는 제니퍼 에이전트 선택 영역이 달라진다.
일단 노드를 구성하면 제니퍼 에이전트 선택 영역의 뷰를 다음 3가지 중에서 선택할 수 있다.
- 그룹으로 보기 - 노드 구성이 노드 그룹 영역으로 나타나는 방식이다.
- 리스트로 보기 - 노드 구성이 드랍다운 박스로 나타나는 방식이다.
- 도메인 별 보기 - 노드 구성과는 상관없이 도메인을 기준으로 특정 도메인에 속한 제니퍼 에이전트를 표시하는 방식이다.
제니퍼 에이전트 선택 영역의 뷰를 변경하는 방법은 다음과 같다.
옵션 아이콘을 클릭한다.
컨텍스트 메뉴에서 특정 뷰를 선택한다.
노드 그룹 영역이나 드랍다운 박스에서 특정 노드를 선택하면 해당 노드와 모든 하위 노드에 할당한 제니퍼 에이전트를 기준으로 화면이 구성된다.
그런데 새로운 제니퍼 에이전트를 추가한 경우나 실수로 특정 제니퍼 에이전트를 노드에 할당하지 않은 경우와 같이, 노드에 할당되지 않는 제니퍼 에이전트가 있을 수 있다. 이 경우에 admin 그룹에 속한 사용자에게는 [도메인 이름(미설정)]을 이름으로 하는 최상위 노드가 만들어지고, 그 노드에 어떤 노드에도 할당되지 않은 제니퍼 에이전트가 할당된다.
데이터 관리
제니퍼 서버는 제니퍼 에이전트와 제니퍼 독립 에이전트 등으로부터 수집한 데이터를 파일과 데이터베이스에 저장한다.
데이터 파일
제니퍼 서버는 데이터베이스에 저장하기에 적합하지 않은 X-View 트랜잭션과 프로파일 데이터 등을 파일에 저장한다.
데이터 파일이 저장되는 디렉토리 위치는 제니퍼 서버의 data_directory 옵션으로 설정한다.
data_directory = ../../data/file/
기본으로 데이터 파일이 저장되는 디렉토리는 JENNIFER_HOME/data/file이며, 아래에 일자별로 하위 디렉토리가 만들어지고 그 일자별 디렉토리에 데이터 파일이 저장된다. 디렉토리의 구조 및 파일의 형식은 임의로 변경될 수 있다.
파일 손상이 발생할 수 있기 때문에, 제니퍼 서버의 운영 중에는 data_directory 옵션을 변경하지 않는다. 해당 옵션을 변경하려면 제니퍼 서버를 정지한 후에, 제니퍼 서버의 설정 파일에서 직접 변경하도록 한다.
데이터베이스
제니퍼 서버는 대부분의 성능 데이터와 구성 데이터 등을 데이터베이스에 저장한다. 그리고 데이터베이스는 성능 데이터를 저장하는 성능 데이터베이스와 구성 데이터를 저장하는 관리자 데이터베이스로 구분된다.
기본적으로 제니퍼 서버는 아파치 더비를 데이터베이스로 사용한다.
제니퍼 에이전트 개수가 많거나 서비스 요청률이 높을 때 상용 DBMS를 사용하면 성능 개선 효과를 볼 수 있다. 성능 데이터베이스와 관리자 데이터베이스로 서로 다른 DBMS를 사용할 수 있는데 관리자 데이터베이스가 성능에 미치는 영향은 없기 때문에 성능 데이터베이스에만 상용 DBMS를 사용하고 관리자 데이터베이스에는 아파치 더비를 사용하는 것을 권장한다.
아파치 더비의 사용
아파치 더비 데이터베이스의 위치는 제니퍼 서버의 system.derby.system.home 옵션으로 설정한다.
system.derby.system.home = ../../data/database
기본적으로 데이터베이스가 저장되는 디렉토리는 JENNIFER_HOME/data/datab ase이다.
제니퍼 서버에서 아파치 더비를 사용하기 위한 JDBC 연결은 JENNIFER_HOME/server/conf/Catalina/localhost/ROOT.xml 파일에 설정되어 있다.
다음은 성능 데이터베이스에 대한 JDBC 설정이다.
<Resource name="jdbc/Jennifer" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="jennifer" password="jennifer" driverClassName="org.apache.derby.jdbc.EmbeddedDriver" url="jdbc:derby:jennifer;create=true" />
다음은 관리자 데이터베이스에 대한 JDBC 설정이다.
<Resource name="jdbc/JenniferAdmin" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="jennifer" password="jennifer" driverClassName="org.apache.derby.jdbc.EmbeddedDriver" url="jdbc:derby:jenniferadm;create=true" />
별도의 자바 애플리케이션에서 아파치 더비 데이터베이스에 접근하려면, 제니퍼 서버에 다음 옵션들을 추가한 후에 제니퍼 서버를 재시작한다.
system.derby.drda.startNetworkServer = true system.derby.drda.portNumber = 1527 system.derby.drda.host = 192.168.0.1
system.derby.drda.host 옵션에는 127.0.0.1이나 localhost가 아닌 실제 IP 주소를 입력해야 한다.
아파치 더비를 사용하는 경우에는 Reorg 스케줄러를 이용해서 테이블 스페이스의 낭비를 최소화하고 있다.
time_actor_2 = com.javaservice.jennifer.server.timeactor.ReorgActor 03
기본적으로 매일 오전 3시에 테이블 스페이스를 정리한다.
기본적으로 데이터베이스로 아파치 더비를 사용하도록 설정되어 있기 때문에, 아파치 더비를 사용하는 경우에는 설정을 변경할 필요가 없다.
오라클의 사용
오라클을 사용하는 경우에는 오라클 9i 이상을 사용해야 하고 JDBC 드라이버는 오라클 10g 이상을 사용해야 한다. 그리고 데이터베이스는 UTF-8 인코딩 형식으로 만들어져야한다.
제니퍼 서버에서 오라클을 사용하기 위한 JDBC 연결은 JENNIFER_HOME/server/conf/Catalina/localhost/ROOT.xml 파일에 설정되어 있다.
<Resource name="jdbc/Jennifer" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="jennifer" password="jennifer" driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@127.0.0.1:1521:jennifer"/>
다음은 관리자 데이터베이스에 대한 JDBC 설정이다.
<Resource name="jdbc/JenniferAdmin" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="jennifer" password="jennifer" driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@127.0.0.1:1521:jenniferadm"/>
username, password, url 등의 속성은 사용할 오라클 데이터베이스에 맞게 변경한다. 그리고 JDBC 드라이버 라이브러리(ojdbc14.jar)를 JENNIFER_HOME/server/common/lib 디렉토리에 복사한다.
앞의 설정 변경을 적용하기 위해서는 제니퍼 서버의 재시작이 필요하다.
IBM DB2의 사용
IBM DB2를 사용하는 경우에는 DB2 9.5 이상을 사용해야 하고 데이터베이스는 UTF-8 인코딩 형식으로 만들어져야 한다. 그리고 페이지 사이즈를 32K 이상으로 만들어야 한다. 제니퍼 서버에서 IBM DB2를 사용하기 위한 JDBC 연결은 JENNIFER_HOME/server/conf/Catalina/localhost/ROOT.xml 파일에 설정되어 있다.
다음은 성능 데이터베이스에 대한 JDBC 설정이다.
<Resource name="jdbc/Jennifer" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="jennifer" password="jennifer" driverClassName="com.ibm.db2.jcc.DB2Driver" url="jdbc:db2://120.0.0.1:50000/jennifer" />
다음은 관리자 데이터베이스에 대한 JDBC 설정이다.
<Resource name="jdbc/JenniferAdmin" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="jennifer" password="jennifer" driverClassName="com.ibm.db2.jcc.DB2Driver" url="jdbc:db2://120.0.0.1:50000/jenniferadm" />
username, password, url 등의 속성은 사용할 IBM DB2에 맞게 변경한다. 그리고 JDBC 드라이버 라이브러리(db2jcc.jar, db2jcc_license_cu.jar)를 JENNIFER_HOME/server/common/lib 디렉토리에 복사한다.
앞의 설정 변경을 적용하기 위해서는 제니퍼 서버의 재시작이 필요하다.
쿼리 수행기
[통계 분석 | 쿼리 수행기] 메뉴를 통해서 제니퍼 데이터베이스에 대해 임의의 SQL을 실행할 수 있다.
테이블 탐색기 - 왼쪽의 테이블 탐색기를 통해서 성능 데이터베이스와 관리자 데이터베이스 테이블 스키마를 확인할 수 있다.
테이블 탐색기 새로 고침 - 테이블 탐색기 내용을 새로 고치려면 해당 버튼을 클릭한다.
제니퍼 데이터베이스에 대해서 임의의 SQL을 수행하는 방법은 다음과 같다.
SQL 필드에 쿼리를 입력한다.
최대 결과 수 제한, 도메인, 관리자 데이터베이스 여부, 결과 형식 등을 설정한다.
오른쪽 하단에 있는 [실행] 버튼을 클릭한다.
SQL의 결과는 하단에 나타나며 각 필드에 대한 설명은 다음과 같다.
필드 | 설명 |
---|---|
SQL | 여러 개의 SQL을 동시에 수행하려면 세미 콜론[;]을 구분자 사용하여 여러 SQL을 입력한다. --로 시작하는 줄은 주석으로 간주된다. |
최대 결과 수 제한 | SELECT 절을 실행했을 때 반환되는 레코드 숫자의 최대 크기를 설정한다. |
도메인 | 도메인을 선택한다. |
관리자 데이터베이스 여부 | 해당 체크 박스를 선택하면 관리자 데이터베이스에 대해서 SQL을 수행하고, 선택하지 않으면 성능 데이터베이스에 대해서 SQL을 수행한다. |
결과 형식 | SQL의 결과 형식을 선택한다. |
결과 형식으로 테이블을 선택하면 HTML 테이블로 데이터가 표시되고, 엑셀을 선택하면 CSV 형식의 파일로 데이터가 다운로드된다.
결과 형식으로 막대 차트를 선택하면 막대 차트가 표시된다. 예를 들어, 다음은 시간당 방문자 수를 구하는 SQL이다. SELECT 절의 첫번째 칼럼이 X 좌표의 값이 되고 두번째 칼럼부터는 Y 좌표의 값이 된다. 그리고 칼럼의 이름을 범례로 사용한다.
SELECT LOG_HH, SUM(VISIT_HOUR) AS VISIT FROM PERF_X_01 WHERE LOG_DT = '20081001' AND AGENT_ID = 'TOT' GROUP BY LOG_HH
차트의 크기는 제니퍼 서버의 report_image_width 옵션과 report_image_height 옵션으로 설정한다.
report_image_width = 800 report_image_height = 200
동일 시간대에 대해서 여러 데이터를 막대 차트로 표시하려면 SELECT 절에 칼럼을 추가한다. 예를 들어, 방문자 수와 호출 건수를 막대 차트에 표시하려면 다음 SQL을 사용한다.
SELECT LOG_HH, SUM(VISIT_HOUR) AS VISIT, SUM(HIT) AS HIT FROM PERF_X_01 WHERE LOG_DT = '20081001' AND AGENT_ID = 'TOT' GROUP BY LOG_HH
결과 형식으로 라인 차트를 선택하면 라인 차트가 표시된다. 예를 들어, 다음은 시간당 서비스 요청률을 구하는 SQL이다. SELECT 절의 첫번째 칼럼이 X 좌표의 값이 되고 두번째 칼럼부터는 Y 좌표의 값이 된다. 그리고 칼럼의 이름을 범례로 사용한다.
SELECT LOG_HH, AVG(ARRIVAL_RATE) AS ARRIVAL_RATE FROM PERF_X_01 WHERE LOG_DT = '20081001' AND AGENT_ID = 'TOT' GROUP BY LOG_HH
동일 시간대에 대해서 여러 데이터를 라인 차트로 표시하려면 SELECT 절에 칼럼을 추가한다. 예를 들어, 서비스 요청률과 액티브 서비스를 라인 차트에 표시하려면 다음 SQL을 사용한다.
SELECT LOG_HH, AVG(ARRIVAL_RATE) AS ARRIVAL_RATE, AVG(ACTIVE_SERVICE) AS ACTIVE_SERVICE FROM PERF_X_01 WHERE LOG_DT = '20081001' AND AGENT_ID = 'TOT' GROUP BY LOG_HH
결과 형식으로 시계열 차트를 선택하면 시계열 차트가 표시된다. 예를 들어, 다음은 5분당 자바 힙 메모리 사용량을 구하는 SQL이다. SELECT 절의 첫번째 칼럼이 X 좌표의 값이되고 두번째 칼럼부터는 Y 좌표의 값이 된다. 그리고 칼럼의 이름을 범례로 사용한다.
SELECT LOG_DT || LOG_HH || LOG_MM, HEAP_USED FROM PERF_X_01 WHERE LOG_DT ='20081001' AND AGENT_ID = 'A21'
동일 시간대에 대해서 여러 데이터를 시계열 차트로 표시하려면 SELECT 절에 칼럼을 추가한다. 예를 들어, 자바 힙 메모리 사용량과 자바 힙 전체 메모리를 시계열 차트에 표시하려면 다음 SQL을 사용한다.
SELECT LOG_DT || LOG_HH || LOG_MM, HEAP_USED, HEAP_TOTAL FROM PERF_X_01 WHERE LOG_DT ='20080801' AND AGENT_ID = 'A21'
데이터의 숫자가 적은 경우(시간당으로 표시하는 경우)에는 결과 형식으로 막대 차트나 라인 차트를 선택하고, 데이터의 숫자가 많은 경우(5분 단위로 표시하는 경우)에는 결과 형식으로 시계열 차트를 선택한다.
데이터 보관 및 삭제
데이터베이스에 대한 검색 시간 향상을 위해서 제니퍼는 SummaryActor 스케줄러를 이용해서 성능 데이터에 대한 요약 데이터를 매일 주기적으로 생성한다. 제니퍼 서버의 SummaryActor에 대한 설정은 다음과 같다.
time_actor_1=com.javaservice.jennifer.server.timeactor.SummaryActor 01
첫번째 파라미터 01이 지칭하는 것처럼 SummaryActor는 매일 오전 1시에 수행된다. SummaryActor가 정상적으로 수행되지 않은 경우에는 [툴바 영역 | 통계 데이터 요약]을 통해서 특정 날짜에 대해서 SummaryActor를 실행 할 수도 있다.
[툴바 영역 | 통계 데이터 요약]을 통해서 특정 날짜에 대해서 SummaryActor를 반복적으로 수행해도 데이터가 중복으로 계산되지는 않는다.
제니퍼 에이전트의 숫자와 업무 처리량에 비례해서 제니퍼가 수집하는 성능 데이터의 양이 증가한다. 그래서 디스크 사용을 최적화하기 위해서 기본적으로 30일 이전의 데이터는 CleanerActor를 통해서 삭제한다. 제니퍼 서버의 CleanerActor에 대한 설정은 다음과 같다.
time_actor_03=com.javaservice.jennifer.server.timeactor.CleanerActor 02 ALERT MONTH 1 time_actor_04=com.javaservice.jennifer.server.timeactor.CleanerActor 02 ERROR MONTH 1 time_actor_05=com.javaservice.jennifer.server.timeactor.CleanerActor 02 APPL MONTH 1 time_actor_06=com.javaservice.jennifer.server.timeactor.CleanerActor 02 SQL MONTH 1 time_actor_07=com.javaservice.jennifer.server.timeactor.CleanerActor 02 TX MONTH 1 time_actor_08=com.javaservice.jennifer.server.timeactor.CleanerActor 02 PERF MONTH 1 time_actor_09=com.javaservice.jennifer.server.timeactor.CleanerActor 02 FILE MONTH 1 time_actor_11=com.javaservice.jennifer.server.timeactor.CleanerActor 02 REMON DAY 7
기본 설정에 따르면 ALERT_01~31, ERRORS_10M_01~31, APPL_10M_01~31,SQLS_10M_01~31, TX_10M_01~31, PERF_X_01~31 등의 테이블에서는 한달 전의 데이터를 삭제하고 REMON으로부터 수집한 데이터를 저장한 테이블에서는 7일 이전의 데이터를 삭제한다. 그리고 한달 전의 데이터 파일을 삭제한다. 이 작업은 오전 2시에 순차적으로 이루어진다.
데이터 백업 및 복구
데이터 파일과 데이터베이스 내용을 일자별로 백업하고 복구할 수 있다. 도구 영역에서 [도구 | Server Control Center] 메뉴를 클릭하면 팝업 창이 나타난다.
팝업 창에서 백업 탭을 선택하면 나타나는 화면에서 데이터 백업과 복구 작업을 수행할 수 있다.
데이터 백업 파일 위치는 제니퍼 서버의 backup_root 옵션으로 설정한다. 기본으로는 해당 옵션이 설정되어 있지 않은데 이 경우에는 JENNIFER_HOME/server/bin 디렉토리에 데이터 백업 파일이 저장된다.
backup_root = /home/jennifer/backup
동일한 하드웨어에서 복수의 제니퍼 서버를 운영하는 경우에는 각 제니퍼 서버별로 backup_root 옵션을 명시적으로 지정해서 백업 디렉토리를 다르게 설정해야 한다.
데이터를 백업하는 방법은 다음과 같다.
데이터를 백업할 날짜를 선택한다. 금일 데이터는 백업할 수 없다.
모드를 선택한다. Full 모드를 선택하면 데이터 파일과 데이터베이스 내용을 모두 백업한다. 반면에 Simple 모드를 선택하면 데이터베이스 내용만을 백업한다.
[백업] 버튼을 클릭하면 데이터 백업이 진행된다. 데이터 양에 따라서 긴 시간이 소요될 수 있다. 데이터 백업이 완료되면 하단 데이터 백업 파일 목록에 해당 날짜에 대한 데이터 백업 파일이 추가된다.
데이터를 복원하는 방법은 다음과 같다.
모드를 선택한다. Full 모드를 선택하면 데이터 파일과 데이터베이스 내용을 모두 복원한다. 반면에 Simple 모드를 선택하면 데이터베이스 내용만을 복원한다.
데이터 백업 파일 목록에서 데이터를 복원할 날짜에 해당하는 [복원] 링크를 클릭하면 데이터 복원이 진행된다. 데이터 양에 따라서 긴 시간이 소요될 수 있다.
제니퍼 서버 CPU 사용률 증가를 최소화하기 위해서 동시에 백업 혹은 복원 작업을 수행할 수 없다. 예를 들어, 2009-04-02 날짜 데이터를 백업하고 있는 중간에는 다른 날짜 데이터를 백업하거나 복원할 수 없다. 마찬가지로 2009-04-04 날짜 데이터를 복원하고 있는 중간에는 다른 날짜 데이터를 백업하거나 복원할 수 없다.
데이터 복원을 완료한 후에 복원된 데이터를 정상적으로 확인하려면 다음 작업을 수행한다.
[자바 플러그인 임시 파일 지우기]를 참조하여 임시 파일을 삭제한다.
재로그인을 한다.
데이터 백업 파일을 삭제하는 방법은 다음과 같다.
데이터 백업 파일 목록에서 데이터 백업 파일을 삭제할 날짜에 해당하는 [삭제] 링크를 클릭하면 해당 데이터 백업 파일이 삭제된다.
데이터 백업 파일 삭제가 완료되면 하단 데이터 백업 파일 목록에 해당 날짜에 대한 데이터 백업 파일이 삭제된다.
그리고 BackupActor 스케줄러를 이용해서 주기적으로 데이터를 백업할 수도 있다. 제니퍼 서버의 BackupActor에 대한 설정은 다음과 같다.
time_actor_15 = com.javaservice.jennifer.server.timeactor.BackupActor 0220 FULL
기본적으로 BackupActor 스케줄러는 설정되어 있지 않다.
이 설정에 따르면 02시 20분에 FULL 모드로 데이터 백업이 수행된다. FULL 대신에 SIMPLE을 모드로 지정할 수 있다.
데이터 백업과 복원은 제니퍼 서버 CPU 사용률을 증가시킨다. 따라서 동일한 하드웨어에서 복수의 제니퍼 서버를 운영하는 경우에는 BackupActor 스케줄러가 동작하는 시간을 다르게 설정하는 것을 권장한다.
테이블 스키마
테이블 칼럼의 데이터 유형은 아파치 더비를 기준으로 작성하였다.
성능 데이터베이스
AGENT
제니퍼 에이전트 정보를 저장하는 테이블이다.
칼럼 | 유형 | 제약조건 | 설명 |
---|---|---|---|
ID | VARCHAR(20) | PK, NOT NULL | 제니퍼 에이전트 아이디 |
NAME | VARCHAR(50) | 제니퍼 에이전트 이름 | |
IP | VARCHAR(50) | NOT NULL | IP 주소 |
TCP_PORT | INTEGER | NOT NULL | 제니퍼 에이전트의 agent_tcp_port 옵션으로 설정한 포트 번호 |
DOMAIN_ID | VARCHAR(10) | NOT NULL | 도메인 아이디 |
NODE_ID | BIGINT | 노드 아이디 | |
VERSION | VARCHAR(50) | 제니퍼 에이전트 버전 | |
TYPE | INTEGER | 유형 | |
STATUS | INTEGER | NOT NULL | 상태를 구분하는 코드로, 1은 사용을, 0은 비사용을 의미한다. |
SORT | INTEGER | 정렬 기준 |
ALERT_01~31
경보 데이터를 저장하는 일자별 테이블이다.
데이터베이스에 저장되는 성능 데이터 중에서 양이 많은 경우에는 일자별로 구분하여 저장한다. 이 때 사용하는 테이블을 일자별 테이블이라고 한다. 따라서 10월 3일에 수집한 경보 데이터는 ALERT_03 테이블에 저장되고, 10월 17일에 수집한 경보 데이터는 ALERT_17 테이블에 저장된다. ALERT_01~31은 일자별 테이블을 지칭하기 위한 개념적인 이름으로 해당 테이블이 실제로 존재하지는 않는다.
칼럼 | 유형 | 제약조건 | 설명 |
---|---|---|---|
LOG_DT | CHAR(8) | 날짜(YYYYMMDD) | |
LOG_HH | CHAR(2) | 시간(HH) | |
LOG_MM | CHAR(2) | 분(MM) | |
LOG_SS | CHAR(2) | 초(SS) | |
TYPE | CHAR(1) | 경보 유형을 구분하는 코드로, C는 심각을, E는 에러를, W는 경고를 의미한다. | |
ALERT_NM | VARCHAR(100) | 경보 이름 | |
ALERT_MSG | VARCHAR(32672) | 경보 메시지 | |
AGENT_ID | VARCHAR(20) | 경보가 발생한 제니퍼 에이전트 아이디 |
APPLS
애플리케이션 이름을 저장하는 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
HASH | INTEGER | PK, NOT NULL | 애플리케이션 이름 해쉬 값 |
NAME | VARCHAR(512) | 애플리케이션 이름 | |
FLAG | CHAR(1) | 데이터 정상 여부를 구분하는 코드로, T는 정상을, F는 비정상을 의미한다. |
APPL_10M_01~31
10분 동안의 애플리케이션 처리 현황 통계 데이터를 저장하는 일자별 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
APPL_HASH | INTEGER | 애플리케이션 이름 해쉬 값 | |
AGENT_ID | VARCHAR(20) | 제니퍼 에이전트 아이디 | |
LOG_DT | CHAR(8) | 날짜(YYYYMMDD) | |
LOG_HH | CHAR(2) | 시간(HH) | |
LOG_MM | CHAR(2) | 분(MM) | |
CNT | INTEGER | 호출 건수 | |
FAIL_CNT | INTEGER | 실패 건수 | |
ELAPSED_SUM | BIGINT | 응답 시간의 합 | |
ELAPSED2_SUM | BIGINT | 표준 편차 계산을 위한 응답 시간 제곱의 합 | |
ELAPSED_MIN | BIGINT | 최소 응답 시간 | |
ELAPSED_MAX | BIGINT | 최대 응답 시간 | |
CPU_SUM | BIGINT | CPU 사용 시간의 합 | |
TPMC_SUM | BIGINT | TPMC 합 |
APPL_SQLTX_01~31
10분 동안의 애플리케이션과 SQL 혹은 외부 트랜잭션 사이의 매핑 데이터를 저장하는 일자별 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
APPL_HASH | INTEGER | 애플리케이션 이름 해쉬 값 | |
SQLTX_HASH | INTEGER | APPL_HASH | |
AGENT_ID | VARCHAR(20) | 제니퍼 에이전트 아이디 | |
LOG_DT | CHAR(8) | 날짜(YYYYMMDD) | |
LOG_HH | CHAR(2) | 시간(HH) | |
LOG_MM | CHAR(2) | 분(MM) | |
TYPE | CHAR(1) | 유형을 구분하는 코드로, S는 SQL을 T는 외부 트랜잭션을 의미한다. | |
CNT | INTEGER | 호출 건수 | |
ELAPSED_SUM | BIGINT | 응답 시간의 합 | |
ELAPSED2_SUM | BIGINT | 표준 편차 계산을 위한 응답 시간 제곱의 합 | |
ELAPSED_MIN | BIGINT | 최소 응답 시간 | |
ELAPSED_MAX | BIGINT | 최대 응답 시간 |
BIZ_GROUP
애플리케이션 비즈니스 그룹 데이터를 저장하는 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
UUID | BIGINT | PK, NOT NULL | 고유 아이디로 자동 생성된다. |
ID | VARCHAR(256) | NOT NULL | 아이디 |
DIV | VARCHAR(100) | NOT NULL | 구분명 |
NAME | VARCHAR(100) | NOT NULL | 비지니스 그룹 이름 |
DOMAIN_ID | VARCHAR(10) | 도메인 아이디 | |
AGENT_ID | VARCHAR(300) | 제니퍼 에이전트 아이디 | |
APP | VARCHAR(1000) | 애플리케이션 목록으로 줄바꿈(\n)을 구분자로 구분한다. | |
TX | VARCHAR(1000) | 외부 트랜잭션 목록으로 줄바꿈(\n)을 구분자로 구분한다. | |
TYPE | INTEGER | 유형 | |
STATUS | INTEGER | 상태로 1은 Active를, 0은 Inactive를 의미한다. | |
SORT | INTEGER | 정렬 기준 |
DOMAIN
도메인 데이터를 저장하는 테이블이다.
칼럼 | 유형 | 제약조건 | 설명 |
---|---|---|---|
ID | VARCHAR(10) | PK, NOT NULL | 도메인 아이디 |
NAME | VARCHAR(20) | NOT NULL | 도메인 이름 |
IP | VARCHAR(50) | NOT NULL | 제니퍼 서버의 IP 주소 |
HTTP_PORT | INTEGER | NOT NULL | 제니퍼 서버의 HTTP 포트 번호 |
TCP_PORT | INTEGER | NOT NULL | 제니퍼 서버의 server_tcp_port 옵션으로 설정한 포트 번호 |
VERSION | VARCHAR(50) | 제니퍼 서버 버전 | |
TYPE | INTEGER | 유형 | |
STATUS | INTEGER | NOT NULL | 상태를 구분하는 코드로, 1은 Active를, 0은 Inactive를 의미한다. |
SORT | INTEGER | 정렬 기준 |
ERRORS
예외의 이름을 저장하는 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
HASH | INTEGER | PK, NOT NULL | 예외 해쉬 값 |
NAME | VARCHAR(512) | 예외 이름 | |
FLAG | CHAR(1) | 데이터 정상 여부를 구분하는 코드로, T는 정상을, F는 비정상을 의미한다. |
ERRORS_10M_01~31
10분 동안의 예외 현황 통계 데이터를 저장하는 일자별 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
ERR_HASH | INTEGER | 애플리케이션 이름 해쉬 값 | |
AGENT_ID | VARCHAR(20) | 제니퍼 에이전트 아이디 | |
LOG_DT | CHAR(8) | 날짜(YYYYMMDD) | |
LOG_HH | CHAR(2) | 시간(HH) | |
LOG_MM | CHAR(2) | 분(MM) | |
TYPE | CHAR(1) | 경보 유형를 구분하는 코드로, C는 심각을, E는 에러를, W는 경고를 의미한다. | |
CNT | INTEGER | 예외 건수 | |
ERROR_CD | INTEGER | 예외 코드 | |
ERROR_NM | VARCHAR(100) | 예외 이름 |
ERR_APPL_01~31
예외와 애플리케이션 사이의 매핑 데이터를 저장하는 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
ERR_HASH | INTEGER | 예외 해쉬 값 | |
AGENT_ID | VARCHAR(20) | 제니퍼 에이전트 아이디 | |
LOG_DT | CHAR(8) | 날짜(YYYYMMDD) | |
LOG_HH | CHAR(2) | 시간(HH) | |
LOG_MM | CHAR(2) | 분(MM) | |
CNT | INTEGER | 예외 건수 | |
APPL_HASH | INTEGER | 예외가 발생한 애플리케이션 이름 해쉬 값 | |
MSG_HASH | INTEGER | 예외 메시지 해쉬 값 | |
TX_UUID | BIGINT | X-View 트랜잭션 아이디 |
GROUP_NODE
그룹과 노드 사이의 매핑 정보를 저장하는 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
GROUP_ID | VARCHAR(20) | PK, NOT NULL | 그룹 아이디 |
NODE_ID | BIGINT | PK, NOT NULL | 노드 아이디 |
HOST
WMOND가 실행되고 있는 컴퓨터의 정보를 저장하는 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
HOST_ID | VARCHAR(20) | 호스트 아이디 | |
HOST_NM | VARCHAR(50) | 호스트 이름 | |
IPADDR | VARCHAR(20) | NOT NULL | 호스트 IP 주소 |
METHODS
메소드의 이름을 저장하는 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
HASH | INTEGER | PK, NOT NULL | 메소드 이름 해쉬 값 |
NAME | VARCHAR(512) | 메소드 이름 | |
FLAG | CHAR(1) | 데이터 정상 여부를 구분하는 코드로, T는 정상을, F는 비정상을 의미한다. |
NODE
노드 데이터를 저장하는 테이블이다.
칼럼 | 유형 | 제약조건 | 설명 |
---|---|---|---|
ID | BIGINT | PK, NOT NULL | 노드 아이디 |
NAME | VARCHAR(50) | NOT NULL | 노드 이름 |
GROUP_ID | VARCHAR(2) | 제니퍼 서버의 agent_group 옵션으로 설정한 그룹 아이디 | |
PARENT_ID | BIGINT | 상위 노드 아이디 | |
DOMAIN_ID | VARCHAR(10) | 도메인 아이디 | |
TYPE | INTEGER | 유형 | |
STATUS | INTEGER | NOT NULL | 상태를 구분하는 코드로, 1은 Active를, 0은 Inactive를 의미한다. |
SORT | INTEGER | 정렬 기준 |
PERF_HOST
WMOND를 통해서 수집한 CPU 데이터를 저장하는 테이블이다.
제니퍼 서버의 perf_host_update_interval 옵션을 통해서 저장 주기를 변경할 수 있다. 기본 값은 300000이고 단위는 밀리 세컨드이다.
perf_host_update_interval = 300000
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
IPADDR | VARCHAR(20) | 호스트 IP 주소 | |
LOG_DT | CHAR(8) | 날짜(YYYYMMDD) | |
LOG_HH | CHAR(2) | 시간(HH) | |
LOG_MM | CHAR(2) | 분(MM) | |
LAST_TM | CHAR(6) | 마지막 시간(HHMM) | |
CPU_USER | REAL | 사용자 애플리케이션 CPU 사용률 | |
CPU_SYS | REAL | 커널 CPU 사용률 | |
CPU_NICE | REAL | NICE CPU 사용률 | |
CPU_IOWAIT | REAL | IO CPU 사용률 | |
CPU_IDLE | REAL | IDLE CPU 사용률 |
PERF_X_01~31
5분 동안의 일반 성능 데이터를 저장하는 일자별 테이블이다.
제니퍼 서버의 perf_x_update_interval 옵션을 통해서 저장 주기를 변경할 수 있다. 기본값은 300000이고 단위는 밀리 세컨드이다.
perf_x_update_interval = 300000
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
AGENT_ID | VARCHAR(20) | 호스트 IP 주소 | |
LOG_DT | CHAR(8) | 날짜(YYYYMMDD) | |
LOG_HH | CHAR(2) | 시간(HH) | |
LOG_MM | CHAR(2) | 분(MM) | |
LAST_TM | CHAR(6) | 마지막 시간(HHMM) | |
CONCURRENT_USER | REAL | 동시단말 사용자 수 | |
ACTIVE_USER | REAL | 액티브 사용자 수 | |
ACTIVE_SERVICE | REAL | 액티브 서비스 개수 | |
ARRIVAL_RATE | REAL | 서비스 요청률 | |
SERVICE_RATE | REAL | 서비스 처리률 | |
RESPONSE_TIME | REAL | 평균 응답 시간 | |
THINKTIME | REAL | 대기 시간 | |
HEAP_TOTAL | REAL | 자바 힙 전체 메모리 | |
HEAP_USED | REAL | 자바 힙 메모리 사용량 | |
SYS_CPU | REAL | 시스템 CPU 사용률 | |
JVM_CPU | REAL | 자바 프로세스 CPU 사용률 | |
SYS_MEM_USED | REAL | 시스템 메모리 사용량 | |
JVM_NAT_MEM | REAL | 자바 프로세스 메모리 사용량 | |
JDBC_ACTIVE | REAL | 사용 중인 JDBC 커넥션 개수 | |
JDBC_ALLOC | REAL | 할당된 JDBC 커넥션 개수 | |
JDBC_IDLE | REAL | 대기 중인 JDBC 커넥션 개수 | |
HIT | INTEGER | 호출 건수 | |
VISIT_DAY | INTEGER | 방문자 수(일 기준) | |
VISIT_HOUR | INTEGER | 방문자 수(시간 기준) |
SQLS
SQL을 저장하는 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
HASH | INTEGER | PK, NOT NULL | SQL 해쉬 값 |
NAME | CLOB | SQL | |
FLAG | CHAR(1) | 데이터 정상 여부를 구분하는 코드로, T는 정상을, F는 비정상을 의미한다. |
SQLS_10M_01~31
10분 동안의 SQL의 처리 현황 통계 데이터를 저장하는 일자별 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
SQL_HASH | INTEGER | SQL 해쉬 값 | |
AGENT_ID | VARCHAR(20) | 제니퍼 에이전트 아이디 | |
LOG_DT | CHAR(8) | 날짜(YYYYMMDD) | |
LOG_HH | CHAR(2) | 시간(HH) | |
LOG_MM | CHAR(2) | 분(MM) | |
CNT | INTEGER | 실행건수 | |
ELAPSED_SUM | BIGINT | 응답 시간의 합 | |
ELAPSED2_SUM | BIGINT | 표준 편차 계산을 위한 응답 시간 제곱의 합 | |
ELAPSED_MIN | BIGINT | 최소 응답 시간 | |
ELAPSED_MAX | BIGINT | 최대 응답 시간 | |
PARAM1 | VARCHAR(32672) | 상수 파라미터 | |
PARAM2 | VARCHAR(32672) | 바인딩 파라미터 |
S_ALERT
1시간 동안의 경보 현황 통계 데이터를 저장하는 통계 테이블이다.
칼럼 | 유형 | 제약조건 | 설명 |
---|---|---|---|
LOG_DT | CHAR(8) | 날짜(YYYYMMDD) | |
LOG_HH | CHAR(2) | 시간(HH) | |
TYPE | CHAR(1) | 경보 유형을 구분하는 코드로, C는 심각을, E는 에러를, W는 경고를 의미한다. | |
ALERT_NM | VARCHAR(100) | 경보 이름 | |
AGENT_ID | VARCHAR(20) | 경보가 발생한 제니퍼 에이전트 아이디 | |
CNT | INTEGER | 경보 건수 |
S_APPL
일일 동안의 애플리케이션 처리 현황 통계 데이터를 저장하는 통계 테이블이다.
이름이 S_로 시작하는 테이블은 SummaryActor를 통해서 관리되는 통계 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
APPL_HASH | INTEGER | 애플리케이션 이름 해쉬 값 | |
AGENT_ID | VARCHAR(20) | 제니퍼 에이전트 아이디 | |
LOG_DT | CHAR(8) | 날짜(YYYYMMDD) | |
CNT | INTEGER | 호출 건수 | |
FAIL_CNT | INTEGER | 실패 건수 | |
ELAPSED_SUM | BIGINT | 응답 시간의 합 | |
ELAPSED2_SUM | BIGINT | 표준 편차 계산을 위한 응답 시간 제곱의 합 | |
ELAPSED_MIN | BIGINT | 최소 응답 시간 | |
ELAPSED_MAX | BIGINT | 최대 응답 시간 | |
CPU_SUM | BIGINT | CPU 사용 시간의 합 | |
TPMC_SUM | BIGINT | TPMC 합 |
S_ERRORS
1시간 동안의 예외 현황 통계 데이터를 저장하는 통계 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
ERR_HASH | INTEGER | 애플리케이션 이름 해쉬 값 | |
AGENT_ID | VARCHAR(20) | 제니퍼 에이전트 아이디 | |
LOG_DT | CHAR(8) | 날짜(YYYYMMDD) | |
LOG_HH | CHAR(2) | 시간(HH) | |
TYPE | CHAR(1) | 경보 유형를 구분하는 코드로, C는 심각을, E는 에러를, W는 경고를 의미한다. | |
ERROR_CD | INTEGER | 예외 코드 | |
ERROR_NM | VARCHAR(100) | 예외 이름 | |
CNT | INTEGER | 예외 건수 |
S_PERF_X
1시간 동안의 일반 성능 데이터를 저장하는 통계 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
AGENT_ID | VARCHAR(20) | 호스트 IP 주소 | |
LOG_DT | CHAR(8) | 날짜(YYYYMMDD) | |
LOG_HH | CHAR(2) | 시간(HH) | |
CONCURRENT_USER | REAL | 동시단말 사용자 수 | |
ACTIVE_USER | REAL | 액티브 사용자 수 | |
ACTIVE_SERVICE | REAL | 액티브 서비스 개수 | |
ARRIVAL_RATE | REAL | 서비스 요청률 | |
SERVICE_RATE | REAL | 서비스 처리률 | |
RESPONSE_TIME | REAL | 평균 응답 시간 | |
THINKTIME | REAL | 대기 시간 | |
HEAP_TOTAL | REAL | 자바 힙 전체 메모리 | |
HEAP_USED | REAL | 자바 힙 메모리 사용량 | |
SYS_CPU | REAL | 시스템 CPU 사용률 | |
JVM_CPU | REAL | 자바 프로세스 CPU 사용률 | |
SYS_MEM_USED | REAL | 시스템 메모리 사용량 | |
JVM_NAT_MEM | REAL | 자바 프로세스 메모리 사용량 | |
JDBC_ACTIVE | REAL | 사용 중인 JDBC 커넥션 개수 | |
JDBC_ALLOC | REAL | 할당된 JDBC 커넥션 개수 | |
JDBC_IDLE | REAL | 대기 중인 JDBC 커넥션 개수 | |
HIT | INTEGER | 호출 건수 | |
VISIT_DAY | INTEGER | 방문자 수(일 기준) | |
VISIT_HOUR | INTEGER | 방문자 수(시간 기준) |
S_SQLS
1시간 동안의 SQL 처리 현황 통계 데이터를 저장하는 통계 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
SQL_HASH | INTEGER | SQL 해쉬 값 | |
AGENT_ID | VARCHAR(20) | 제니퍼 에이전트 아이디 | |
LOG_DT | CHAR(8) | 날짜(YYYYMMDD) | |
CNT | INTEGER | 실행건수 | |
ELAPSED_SUM | BIGINT | 응답 시간의 합 | |
ELAPSED2_SUM | BIGINT | 표준 편차 계산을 위한 응답 시간 제곱의 합 | |
ELAPSED_MIN | BIGINT | 최소 응답 시간 | |
ELAPSED_MAX | BIGINT | 최대 응답 시간 |
S_TX
일일 동안의 외부 트랜잭션의 처리 현황 통계 데이터를 저장하는 통계 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
TX_HASH | INTEGER | 외부 트랜잭션 해쉬 값 | |
AGENT_ID | VARCHAR(20) | 제니퍼 에이전트 아이디 | |
LOG_DT | CHAR(8) | 날짜(YYYYMMDD) | |
CNT | INTEGER | 실행건수 | |
ELAPSED_SUM | BIGINT | 응답 시간의 합 | |
ELAPSED2_SUM | BIGINT | 표준 편차 계산을 위한 응답 시간 제곱의 합 | |
ELAPSED_MIN | BIGINT | 최소 응답 시간 | |
ELAPSED_MAX | BIGINT | 최대 응답 시간 |
TXNAMES
외부 트랜잭션 이름을 저장하는 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
HASH | INTEGER | PK, NOT NULL | 외부 트랜잭션 해쉬 값 |
NAME | VARCHAR(32672) | 외부트랜잭션 이름 | |
FLAG | CHAR(1) | 데이터 정상 여부를 구분하는 코드로, T는 정상을, F는 비정상을 의미한다. |
TX_10M_01~31
10분 동안의 외부 트랜잭션의 처리 현황 데이터를 저장하는 일자별 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
TX_HASH | INTEGER | 외부 트랜잭션 해쉬 값 | |
AGENT_ID | VARCHAR(20) | 제니퍼 에이전트 아이디 | |
LOG_DT | CHAR(8) | 날짜(YYYYMMDD) | |
LOG_HH | CHAR(2) | 시간(HH) | |
LOG_MM | CHAR(2) | 분(MM) | |
CNT | INTEGER | 실행건수 | |
ELAPSED_SUM | BIGINT | 응답 시간의 합 | |
ELAPSED2_SUM | BIGINT | 표준 편차 계산을 위한 응답 시간 제곱의 합 | |
ELAPSED_MIN | BIGINT | 최소 응답 시간 | |
ELAPSED_MAX | BIGINT | 최대 응답 시간 |
관리자 데이터베이스
ADF
사용자 정의 대시보드를 구성하는 차트와 관련한 데이터를 저장하는 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
UUID | VARCHAR(50) | PK, NOT NULL | 고유 아이디로 자동 생성된다. |
VIEW_ID | VARCHAR(10) | NOT NULL | 사용자 정의 대시보드의 메뉴 아이디 |
CHART_ID | VARCHAR(50) | NOT NULL | 차트 아이디 |
LEFT_POSITION | INTEGER | 차트의 X 축 좌표로, 0에 가까울수록 차트가 왼쪽에 위치한다. | |
TOP_POSITION | INTEGER | 차트의 Y 축 좌표로, 0에 가까울수록 차트가 위쪽에 위치한다. | |
WIDTH | INTEGER | 차트의 넓이 | |
HEIGHT | INTEGER | 차트의 높이 | |
CONFIG | VARCHAR(1000) | 차트 옵션 |
AUTH
권한 데이터를 저장하는 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
AUTH_ID | VARCHAR(50) | PK, NOT NULL | 권한 아이디 |
AUTH_NM | VARCHAR(10) | 권한 이름 | |
AUTH_DESC | VARCHAR(50) | 권한에 대한 설명 | |
CONFIG | INTEGER | 권한 설정 정보 | |
IS_IFXED | INTEGER | 사용하지 않는 칼럼 |
CONTENTS
게시판 데이터를 저장하는 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
BBS_ID | VARCHAR(20) | NOT NULL | 게시판 유형 |
THREAD_ID | INTEGER | NOT NULL | 게시물 아이디 |
PARENT_ID | INTEGER | 답변을 단 게시물 아이디 | |
TITLE | VARCHAR(500) | 제목 | |
BODY | CLOB | 내용 | |
DOC_TYPE | CHAR(1) | 사용하지 않는 칼럼 | |
HIT_CNT | INTEGER | 조회 건수 | |
USER_ID | VARCHAR(20) | 게시물을 등록한 사용자 아이디 | |
USER_NM | VARCHAR(50) | 사용하지 않는 칼럼 | |
PASSWORD | VARCHAR(20) | 사용하지 않는 칼럼 | |
STATUS_CD | CHAR(1) | 상태를 구분하는 코드로, 0은 관련 없음, 1은 처리 요청, 2는 진행 중, 3은 처리 완료를 의미한다. | |
ASSIGNED_USER | VARCHAR(50) | 처리 담당자 | |
NEXT_CHECK_DT | VARCHAR(10) | 처리 요망일 | |
CREATE_DT | VARCHAR(10) | 게시물 생성 날짜 | |
CREATE_TM | VARCHAR(8) | 게시물 생성 시간 | |
UPDATE_DT | VARCHAR(10) | 게시물 수정 날짜 | |
UPDATE_TM | VARCHAR(8) | 게시물 수정 시간 |
EVENT_LOG
이벤트 로그 데이터를 저장하는 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
UUID | BIGINT | PK, NOT NULL | 고유 아이디로 자동 생성된다. |
ID | VARCHAR(20) | NOT NULL | 이벤트 로그 아이디 |
EVENT_LOG_DESC | VARCHAR(2000) | 이벤트 로그 설명 | |
USER_ID | VARCHAR(20) | 사용자 아이디 | |
CLIENT_IP | VARCHAR(50) | 클라이언트 IP | |
CREATE_DT | CHAR(10) | 생성 날짜(YYYYMMDD) | |
CREATE_TM | CHAR(8) | 생성 시간(HHMMSS) |
GROUP_AUTH
그룹과 권한 사이의 매핑 데이터를 저장하는 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
AUTH_ID | VARCHAR(20) | PK, NOT NULL | 권한 아이디 |
GROUP_ID | VARCHAR(20) | PK, NOT NULL | 그룹 아이디 |
GROUP_MENU
그룹과 메뉴 사이의 매핑 데이터를 저장하는 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
GROUP_ID | VARCHAR(20) | PK, NOT NULL | 사용자 아이디 |
MENU_ID | INTEGER | PK, NOT NULL | 메뉴 아이디 |
LOGIN_USER
사용자 데이터를 저장하는 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
USER_ID | VARCHAR(20) | PK, NOT NULL | 사용자 아이디 |
GROUP_ID | VARCHAR(20) | NOT NULL | 사용자가 속한 그룹 아이디 |
PASSWD | VARCHAR(50) | 패스워드 | |
NAME | VARCHAR(100) | 사용자 이름 | |
VARCHAR(100) | 이메일 | ||
COMPANY | VARCHAR(100) | 회사 | |
DEPT | VARCHAR(100) | 부서 | |
JOBTITLE | VARCHAR(100) | 직책 | |
PHONE | VARCHAR(50) | 전화 번호 | |
CELLPHONE | VARCHAR(50) | 핸드폰 | |
LAST_IP | VARCHAR(20) | 마지막에 로그인한 IP 주소 | |
LAST_TM | CHAR(8) | 마지막 로그인 시간 | |
LAST_DT | CHAR(10) | 마지막 로그인 날짜 | |
LOGIN_CNT | INTEGER | 로그인 횟수 | |
DEFAULT_MENU_ID | INTEGER | 초기 메뉴 아이디 | |
CONFIG | VARCHAR(1000) | 사용자 옵션 |
MENU
메뉴 데이터를 저장하는 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
MENU_ID | INTEGER | PK, NOT NULL | 메뉴 아이디 |
PARENT_ID | INTEGER | NOT NULL | 상위 메뉴아이디 |
MENU_NM_CD | VARCHAR(1000) | 메뉴 다국어 이름 코드 | |
MENU_NM | VARCHAR(100) | 메뉴 이름 | |
MENU_ORDER | INTEGER | 순서 | |
TYPE | CHAR(1) | 메뉴 유형을 구분하는 코드로, U는 URL 링크 메뉴를, O는 URL 팝업 메뉴를, P는 사용자 정의 대시보드 메뉴를, S는 리포트 메뉴를 의미한다. | |
IS_FIXED | CHAR(1) | 사용하지 않는 칼럼 | |
MENU_PROP | VARCHAR(200) | URL | |
DEFAULT_CHILD_ID | INTEGER | 기본 하위 메뉴 | |
COLUMN_CNT | INTEGER | 사용하지 않는 칼럼 | |
DEFAULT_HEIGHT | INTEGER | 사용하지 않는 칼럼 | |
DEFAULT_WIDTH | INTEGER | 사용하지 않는 칼럼 | |
CONFIG | VARCHAR(1000) | 메뉴 옵션 |
MESSAGE
다국어 메시지 데이터를 저장하는 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
ID | BIGINT | PK, NOT NULL | 고유한 아이디로 자동 생성된다. |
MSG_KEY | VARCHAR(50) | NOT NULL | 메시지 키 |
VALUE | VARCHAR(1000) | NOT NULL | 메시지 값 |
LOCALE | VARCHAR(5) | NOT NULL | 언어 |
STATUS | INTEGER | 상태를 구분하는 코드로, 1은 사용을 0은 비사용을 의미한다. |
PASSWORD_HISTORY
패스워드 이력 데이터를 저장하는 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
UUID | BIGINT | PK, NOT NULL | 고유한 아이디로 자동 생성된다. |
PASSWD | VARCHAR(50) | NOT NULL | 패스워드 |
USER_ID | VARCHAR(20) | NOT NULL | 사용자 아이디 |
CREATE_DT | CHAR(10) | 생성 날짜(YYYYMMDD) | |
CREATE_TM | CHAR(8) | 생성 시간(HHMMSS) |
REPORT_TMPL
리포트 템플릿 데이터를 저장하는 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
TMPL_ID | INTEGER | PK, NOT NULL | 리포트 템플릿 아이디 |
TMPL_NM | VARCHAR(200) | 리포트 템플릿 제목 | |
USER_ID | VARCHAR(20) | 사용자 아이디 | |
USER_NM | VARCHAR(50) | 사용자 이름 | |
DEFALUT_PARAM | VARCHAR(2000) | 기본 파라미터 | |
HEADER | VARCHAR(1000) | 머리글 | |
FOOTER | VARCHAR(1000) | 바닥글 | |
COPYRIGHT | VARCHAR(1000) | 저작권 | |
CREATE_DT | CHAR(8) | 생성 일자 | |
CREATE_TM | CHAR(6) | 생성 시간 |
TMPL_ITEM
리포트 템플릿 아이템 데이터를 저장하는 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
ITEM_ID | INTEGER | NOT NULL | 아이템 아이디 |
ITEM_NM | VARCHAR(500) | NOT NULL | 아이템 이름 |
ITEM_TYPE | VARCHAR(20) | 아이템 유형 | |
ITEM_PROP | VARCHAR(32672) | 아이템 파라미터 | |
TMPL_ID | INTGER | NOT NULL | 리포트 템플릿 아이디 |
CHAPTER | INTGER | Chapter | |
SECTION | INTGER | Section | |
TITLE | VARCHAR(500) | ITEM_NM 칼럼과 동일한 데이터가 입력됨 | |
HEADING_TEXT | VARCHAR(32672) | 머리글 | |
TAIL_TEXT | CLOB | 사용하지 않는 칼럼 | |
LOOPING_KEY | VARCHAR(32672) | 반복 파라미터 | |
RESERVED_PROP | VARCHAR(32672) | 사용하지 않는 칼럼 | |
SQL_QUERY | VARCHAR(32672) | SQL 쿼리 | |
SQL_PARAM | VARCHAR(2000) | 사용하지 않는 칼럼 |
UPLOAD_FILE
게시판에서 업로드한 파일 데이터를 저장하는 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
FILENAME | VARCHAR(500) | NOT NULL | 업로드한 파일의 이름 |
THREAD_ID | VARCHAR(20) | NOT NULL | 게시판 아이디 |
SUBDIR | VARCHAR(20) | 업로드한 파일이 저장된 디렉토리 | |
FILE_SZ | BIGINT | 업로드한 파일의 크기 |
USER_AUTH
사용자와 권한 사이의 매핑 데이터를 저장하는 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
AUTH_ID | VARCHAR(20) | PK, NOT NULL | 권한 아이디 |
USER_ID | VARCHAR(20) | PK, NOT NULL | 사용자 아이디 |
USER_GROUP
그룹 데이터를 저장하는 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
GROUP_ID | VARCHAR(20) | PK, NOT NULL | 그룹 아이디 |
GROUP_NM | VARCHAR(100) | 그룹 이름 | |
DEFAULT_MENU_ID | INTEGER | 그룹 초기 메뉴 아이디 | |
GROUP_DESC | VARCHAR(2000) | 그룹에 대한 설명 | |
AGENT_LIST | VARCHAR(2000) | 해당 그룹에 속한 사용자가 모니터링할 수 있는 제니퍼 에이전트 아이디로 콤마(,)를 구분자로 구분한다. |
USER_MENU
사용자와 메뉴 사이의 매핑 데이터를 저장하는 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
USER_ID | VARCHAR(20) | PK, NOT NULL | 사용자 아이디 |
MENU_ID | INTEGER | PK, NOT NULL | 메뉴 아이디 |
USER_PREFERENCE
사용자별 설정 데이터를 저장하는 테이블이다.
칼럼 | 유형 | 제약 조건 | 설명 |
---|---|---|---|
NAME | VARCHAR(50) | PK, NOT NULL | 설정 이름 |
VALUE | VARCHAR(255) | NOT NULL | 설정 값 |
USER_ID | VARCHAR(20) | PK, NOT NULL | 사용자 아이디 |
Server Control Center
Server Control Center는 제니퍼 서버 상태를 확인하고 관리 작업을 수행할 수 있는 팝업창으로 [툴바 영역 | 도구 | Server Control Center] 메뉴를 통해서 접근한다.
Server Control Center는 9개 탭으로 구성되어 있다.
기본
기본 탭에서 확인할 수 있는 정보는 다음과 같다.
제니퍼 서버, 자바, 운영 체계 등에 대한 기본 정보를 확인할 수 있다.
제니퍼 서버 네트워크 설정을 확인할 수 있다.
제니퍼 서버 자바 힙 메모리 사용량을 확인할 수 있다. 여기서 제니퍼 서버에 대한 자바 가비지 콜렉션을 수행하려면 [GC] 버튼을 클릭한다.
대기 시간을 계산하는데 사용하는 정보를 확인할 수 있다.
X-View 관련 설정 및 처리 현황을 확인할 수 있다.
시스템 환경 변수
시스템 환경 변수 탭에서 확인할 수 있는 정보는 다음과 같다.
자바 환경 변수
제니퍼 서버 옵션
서블릿 컨텍스트 정보
로그
로그 탭에는 제니퍼 서버 로그 파일 목록이 나타난다. 이 목록에서 로그 파일을 다운로드 하거나 삭제할 수 있다.
오늘 날짜 로그 파일은 삭제할 수 없다.
JMX
JMX 탭에서 확인할 수 있는 정보는 다음과 같다.
자바 JMX 데이터
아파치 톰켓 JMX 데이터
목록에서 JMX 이름을 클릭하면 상세 정보를 확인할 수 있다.
자바 1.5 이상으로 제니퍼 서버를 설치한 경우에만 이 탭이 표시된다.
파일
파일 탭에서 확인할 수 있는 정보는 다음과 같다.
데이터 파일 관련 제니퍼 서버의 옵션 설정
디렉토리 별 파일 목록 및 크기
화면 맨 하단에서 전체 파일 크기를 확인할 수 있다.
성능 데이터베이스
성능 데이터베이스 탭에서 확인할 수 있는 정보는 다음과 같다.
성능 데이터베이스 관련 DBMS와 JDBC 드라이버 정보
반환 값이 있는 java.sql.Connection 클래스 메소드 이름과 해당 메소드 반환 값
Apache Derby
Apache Derby 탭에서 확인할 수 있는 정보는 다음과 같다.
아파치 더비 관련 주요 설정 정보와 데이터베이스 파일 디렉토리 위치
시스템 테이블을 제외한 성능 데이터베이스에 있는 모든 테이블 크기와 데이터 건수를 확인할 수 있다. 단, 성능 저하를 방지하기 위해서 일자별 테이블은 어제 날짜 테이블에 대해서만 건수를 보여준다. 특정 일자별 테이블 데이터 건수를 확인하려면 [보기] 링크를 클릭한다.
화면 맨 하단에서 전체 테이블 크기를 확인할 수 있다.
성능 데이터베이스로 아파치 더비를 사용하는 경우에만 이 탭이 표시된다.
백업
백업 탭에서는 데이터를 백업하고 복원할 수 있다. 자세한 사항은 [데이터 백업 및 복구]를 참조한다.
이벤트
이벤트 탭에서는 이벤트 내용을 조회할 수 있다. 이벤트에 대한 상세한 내용은 [이벤트 로그 기록]을 참조한다.