idgen 사용시 pk 중복 에러 발생 관련 질문드립니다.
- 작성자 :
- 진*이
- 작성일 :
- 2021-04-14 20:22:16
- 조회수 :
- 3,872
- 구분 :
- 공통컴포넌트 / 기타
- 진행상태 :
- 완료
Q
안녕하십니까?
egov framework를 사용하여 운영중인 사이트가 있습니다.
pk 값을 idgen을 사용해서 만들고 있었습니다. pk 중복에러가 갑자기 발생해서 보았더니
생성하는 값이 next_id 보다 작은값(이미 생성된 값)을 만들더라구요. 제너레이터 설정은 다음과 같습니다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
<!-- 사업현황 -->
<bean name="bzsIdGnrService" class="egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl" destroy-method="destroy">
<property name="dataSource" ref="dataSource"/>
<property name="strategy" ref="bzsIdStrategy"/>
<property name="blockSize" value="10"/>
<property name="table" value="spp_common_idgn"/>
<property name="tableName" value="BZSTATUS_ID"/>
</bean>
<bean name="bzsIdStrategy" class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
<property name="prefix" value="BZST_"/>
<property name="cipers" value="15"/>
<property name="fillChar" value="0"/>
</bean>
</beans>
지금은 일단 id를 자주 생성하지 않아서 blockSize를 1로 잡고 next_id 를 db에 들어가 있는 값보다 큰 값으로 설정해 놓은 상태입니다.
egov 포털 게시판을 검색해보니 blockSize가 1보다 크면 id 값을 was의 메모리에 저장하고 있어 재기동을하면 id값이 틀어질수 있다고 하는데 맞나요??
유지보수로 코드를 수정하고 다시 올리게 되면 재기동이 불가피한데 어떻게 유지를 할까요?? 혹시 현재 id 값을 바꿀수 있는 방법은 없을까요?? 검색을 해보아도 나오질 않아서..
감사합니다. 수고하세요.
egov framework를 사용하여 운영중인 사이트가 있습니다.
pk 값을 idgen을 사용해서 만들고 있었습니다. pk 중복에러가 갑자기 발생해서 보았더니
생성하는 값이 next_id 보다 작은값(이미 생성된 값)을 만들더라구요. 제너레이터 설정은 다음과 같습니다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
<!-- 사업현황 -->
<bean name="bzsIdGnrService" class="egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl" destroy-method="destroy">
<property name="dataSource" ref="dataSource"/>
<property name="strategy" ref="bzsIdStrategy"/>
<property name="blockSize" value="10"/>
<property name="table" value="spp_common_idgn"/>
<property name="tableName" value="BZSTATUS_ID"/>
</bean>
<bean name="bzsIdStrategy" class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
<property name="prefix" value="BZST_"/>
<property name="cipers" value="15"/>
<property name="fillChar" value="0"/>
</bean>
</beans>
지금은 일단 id를 자주 생성하지 않아서 blockSize를 1로 잡고 next_id 를 db에 들어가 있는 값보다 큰 값으로 설정해 놓은 상태입니다.
egov 포털 게시판을 검색해보니 blockSize가 1보다 크면 id 값을 was의 메모리에 저장하고 있어 재기동을하면 id값이 틀어질수 있다고 하는데 맞나요??
유지보수로 코드를 수정하고 다시 올리게 되면 재기동이 불가피한데 어떻게 유지를 할까요?? 혹시 현재 id 값을 바꿀수 있는 방법은 없을까요?? 검색을 해보아도 나오질 않아서..
감사합니다. 수고하세요.
환경정보
-
- OS 정보 :
- 표준프레임워크 버전 : 3.7
- JDK(JRE) 정보 : 1.8
- WAS 정보 : tomcat 8.5
- DB 정보 : mariadb
- 기타 환경 정보 :
A
안녕하세요.
표준프레임워크센터 입니다.
blockSize는 메모리에 가지고 있는
부여할 ID값의 갯수 입니다.
spp_common_idgn는 ID를 관리하는 테이블이고
BZSTATUS_ID는 다음 현재 10개를 제외한
다음 부여할 10개의 시작값을 가지고 있게 됩니다.
서버를 재기동 하신다면 메모리에 있는 값은 사라지지만
다음 10개의 시작값을 DB에 가지고 있기때문에 문제가 없습니다.
다만 이경우 시퀀스가 다음 예시와 같이 중간에서 스킵됩니다.
ID 부여 예시 : 1. 2. 3, (서버 재기동), 11
자세한 사항은 다음 위키를 참조하시면 됩니다.
https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte:fdl:id_generation
감사합니다.
표준프레임워크센터 입니다.
blockSize는 메모리에 가지고 있는
부여할 ID값의 갯수 입니다.
spp_common_idgn는 ID를 관리하는 테이블이고
BZSTATUS_ID는 다음 현재 10개를 제외한
다음 부여할 10개의 시작값을 가지고 있게 됩니다.
서버를 재기동 하신다면 메모리에 있는 값은 사라지지만
다음 10개의 시작값을 DB에 가지고 있기때문에 문제가 없습니다.
다만 이경우 시퀀스가 다음 예시와 같이 중간에서 스킵됩니다.
ID 부여 예시 : 1. 2. 3, (서버 재기동), 11
자세한 사항은 다음 위키를 참조하시면 됩니다.
https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte:fdl:id_generation
감사합니다.