채번 기능 설정
본 장에서는 ProObject 채번 기능의 기본적인 사용방법에 대해서 설명한다.
1. 개요
채번 기능은 서비스, 혹은 애플리케이션 별로 실행된 순서에 맞는 번호를 얻어오는 작업을 의미한다. 이렇게 생성된 번호는 정해진 범위의 모든 숫자들을 소진하지 않는 한 특정 시점에 유일한 값으로 존재하며 보통 한 번 얻어진 번호는 다른 서비스나 작업들과 서로를 구분하기 위한 용도로 사용된다.
예를 들면 금일 수행된 서비스들의 번호들을 순서채로 채번하여 기록하면 특정한 서비스가 금일 몇 번째로 수행되었는지를 인식하거나 ID 발급 등의 작업이 몇 번이 일어났는지를 셀 수 있으며, 이 외에도 특정 범위가 일정 시간 동안 소진되지 않는다는 것을 이용해 일종의 순환 버퍼(Circular Buffer)의 인덱스(Index)를 얻어오는 용도로도 사용된다.
위와 같이 채번 기능은 일정 기간 내에서의 일정 횟수와 현재 수행된 번호를 얻어내는 동작 혹은 일정 기간 내에서 상호 배타적으로 유일한 값을 얻어내기 위한 용도로 활용된다.
ProObject 채번 기능은 멀티 노드 채번, 싱글 노드 채번 기능을 제공한다.
-
ProObject에서 해당 ID의 호출된 count를 얻어 올 수 있는 기능이다.
-
ProObject에서 해당 서비스의 호출된 count를 얻어 올 수 있는 기능이다.
2. 싱글 노드 채번
싱글 노드 채번 기능은 ProObject에서 해당 ID의 호출된 count를 얻어 올 수 있는 기능이다. 해당 시퀀서 정보를 파일에 저장하여 서버가 다운되었을 경우에도 메모리로 로딩한다. 따라서 런타임에는 메모리에서 가지고 오게 된다.
2.1. 공통 설정
시퀀서 정보는 다음의 파일에 저장되며, 시퀀스 범위의 10분의 1만큼 사용할 때 마다 파일에 업데이트한다.
${PROOBJECT_HOME}/system/sequencer/sequencer
다음은 sequencer 파일의 예이다. test라는 시퀀서는 9999의 값을 넘길 수 없으며, 현재 시퀀스 번호는 1001임을 나타낸다고 할 수 있다. 또한 파일의 업데이트는 시퀀스가 999번 증가할 때마다 파일을 업데이트하므로 대략 2000일 때 파일이 새로 업데이트된다.
test, 9999, 1001
파일이 항상 업데이트되는 것이 아니기 때문에 메모리에 있는 시퀀스의 값과 다를 수 있다는 점에 주의한다. |
2.2. 채번 관리 API
다음은 채번 관리하는데 사용되는 API에 대한 설명이다.
-
채번 생성
최초에 한 번 시퀀서를 생성한다.
SequencerManger.createSequencer(id,length,initialSeqence);
항목 설명 id
채번 ID를 지정한다.
length
시퀀스 길이를 지정한다. (예: 4자리인 경우 최대 sequence는 9999)
initialSeqence
시퀀스의 초기 데이터, 리사이클할 때 초기 데이터를 지정한다.
-
채번 가져오기
id에 해당하는 시퀀스를 얻어온다.
SequencerManger.getSequence(id);
항목 설명 id
채번 ID를 지정한다.
3. 멀티 노드 채번
멀티 노드 채번 기능은 ProObject에서 해당 서비스의 호출된 count를 얻어 올 수 있는 기능이다.
멀티노드가 각각 자신들이 쓸 범위(range)를 미리 확보한 뒤 쓰는 형식으로 구현되어 있다. 멀티 노드 간에 채번 순서는 보장되지 않고 유일함(Unique)만 보장된다.
예를 들어 1번 노드는 1~1000번, 2번 노드는 1001~2000번, 3번 노드는 2001~3000번으로 받아감으로써 Lock 경쟁을 거의 없애는 방식으로 설정한다. 사용자는 확보할 범위를 설정할 수 있고 각 노드는 확보한 범위 내에서 순서대로 번호를 부여한다. 사용자는 확보할 범위를 설정할 수 있고 각 노드는 확보한 범위 내에서 순서대로 번호를 부여한다. 노드별로 최대 range는 long 범위 내이며, rotate는 되지 않는다.
채번에 필요한 아이디는 각 애플리케이션, 서비스 그룹, 서비스 단위의 설정 파일에 지정할 수 있으며, 모든 설정에 특정 서비스의 채번 아이디를 지정했다면 "서비스 > 서비스 그룹 > 애플리케이션"의 순서대로 채번할 아이디를 탐색한다.
예를 들어 test.main.SimpleCall 서비스가 호출되었을 때만 때만 test라는 ID의 시퀀서로 채번을 하려면 서비스 그룹 설정에 SERVICE_SimpleCall_SEQUENCER_ID=test라고 설정해야 한다. 만약에 서비스의 시퀀서 ID가 설정되어 있지 않다면 서비스 그룹의 시퀀서 ID를 탐색한 다음, 애플리케이션 그룹 설정에서 시퀀서 ID를 탐색하는 과정을 거치게 된다. 자세한 설명은 아래 각각의 설정 방법을 참조한다.
마지막으로 서비스 내에서 채번하는 방법은 다음과 같은 API를 사용해서 할 수 있다.
-
ServiceManager.getCurrentRequestContext().getSequence()
-
ServiceManager.getCurrentRequestContext().getSequence(id)
첫 번째 API의 경우에는,위에서 언급한대로 서비스 > 서비스 그룹 > 애플리케이션 설정을 순차적으로 탐색해서 설정되어 있는 채번 ID를 가지고 채번을 진행하며, 두 번째 API는 원하는 채번 ID에 직접 접근해서 채번할 수 있는 방법이다.
만약에 test 애플리케이션 설정에 A라는 채번 ID가 설정되어 있고 main 서비스 그룹 설정에 B라는 채번 ID가 설정되어 있다면, 첫 번째 API는 무조건 B라는 채번 ID를 가지고 채번하게 되지만, 두 번째 API를 사용하면 A, B 모두 원하는 ID로 채번할 수 있게 된다.
3.1. 공통 설정
채번 기능은 공통으로 다음의 파일에 설정한다.
${PROOBJECT_HOME}/config/system.properties
다음은 system.properties의 설정항목에 대한 설명이다.
SYSTEM_SEQUENCER_ENABLE=[true|false] SYSTEM_SEQUENCER_DATA_SOURCE=datasource_name SYSTEM_SEQUENCER_RANGE=range
항목 | 설명 |
---|---|
SYSTEM_SEQUENCER_ENABLE |
현재 노드에서 채번 기능을 활성화할지 여부를 설정한다.
|
SYSTEM_SEQUENCER_DATA_SOURCE |
채번 ID와 SEQUENCE를 관리할 DB 서버의 데이터소스를 지정한다. |
SYSTEM_SEQUENCER_RANGE |
현재 노드에서 메모리에 보유할 채번 범위를 지정한다. |
다음은 채번 기능을 활성화하는 예이다.
SYSTEM_SEQUENCER_ENABLE =true SYSTEM_SEQUENCER_DATA_SOURCE=tibero SYSTEM_SEQUENCER_RANGE=100
3.2. 애플리케이션 설정
애플리케이션 단위로 채번할 ID를 설정하는 경우 다음의 파일에 설정한다.
${APP_HOME}/config/application.properties
다음은 application.properties의 설정항목에 대한 설명이다.
APPLICATION_SEQUENCER_ID=id
항목 | 설명 |
---|---|
APPLICATION_SEQUENCER_ID |
채번할 ID를 애플리케이션 단위로 설정한다. 해당 애플리케이션에 속한 서비스들이 호출되면 count가 올라가게 된다. |
3.3. 서비스 그룹 설정
원하는 id 단위가 서비스 그룹일 경우 다음의 파일에 설정한다.
${SVG_HOME}/config/servicegroup.properties
다음은 servicegroup.properties의 설정항목에 대한 설명이다.
SERVICEGROUP_SEQUENCER_ID =id
항목 | 설명 |
---|---|
SERVICEGROUP_SEQUENCER_ID |
채번할 ID를 서비스 그룹 단위로 설정한다. 해당 서비스 그룹에 속한 서비스들이 호출되면 count가 올라가게 된다. |