# 외부 데이터베이스 동시성 제어

## Content

## 외부 연결 데이터베이스 동시성 제어

동시성 제어란 여러 사용자가 동시에 업데이트를 실행할 때 데이터베이스의 무결성을 보호하기 위한 기술입니다. 한 사용자의 작업이 다른 사용자의 사용에 부합하지 않는 영향을 미치지 않도록 보장하는 것이 목적입니다. 동시성 제어가 올바르지 않으면 더티 읽기(Dirty Read), 팬텀 읽기(Phantom Read), 반복 불가능 읽기(Non-repeatable Read) 등의 문제가 발생할 수 있습니다.

### 동시성 제어 활성화

데이터베이스 종류에 따라 동시성 제어를 활성화하는 방법이 다릅니다.

#### SQL Server 데이터베이스

사용하는 테이블에 타임스탬프 데이터 유형의 열이 포함되어 있어야 합니다. 예를 들어 SQL Server의 timestamp 유형이 이에 해당합니다.

#### Oracle 데이터베이스

Oracle 데이터베이스는 사용자가 다음과 같이 설정해야 합니다.
동시성 제어를 위한 Rowversion 열을 timestamp 유형으로 만들고, 업데이트 시 해당 Rowversion 정보를 현재 날짜로 업데이트하는 트리거를 생성합니다.
트리거 예시는 다음과 같습니다:
sql

```auto
CREATE OR REPLACE TRIGGER trigger_testRowversion
BEFORE UPDATE
   ON TABLE1
  FOR EACH ROW
BEGIN
  :new.rowversion := current_timestamp;
END trigger_testRowversion;
```

동시성 제어에 사용할 열 이름이 ROWVERSION이라고 가정합니다. Forguncy에서 Oracle에 연결할 때, 오른쪽 설정 패널의 "타임스탬프 열"에서 "ROWVERSION"을 선택하면 동시성 제어가 활성화됩니다(그림 1 참고).
![image](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/4f96589d-8403-419e-b2a1-4f6776199cb9/image-20260702.4620a7.png)

#### ODBC 데이터 소스

Forguncy는 ODBC 데이터 소스의 동시성 제어를 지원하지 않습니다. 아래에서 소개하는 방법으로 동시성 제어를 구현할 수 있습니다.

> **참고:** 이 방법은 데이터 테이블 작업의 업데이트 명령을 사용하여 데이터를 업데이트하는 경우에만 적용됩니다.

**작업 순서**
**1.** 데이터 소스의 테이블에 동시성 제어 정보를 저장할 필드를 추가합니다. 필드 유형은 문자열을 저장하는 데이터 유형으로 선택하되, 36자리 이상의 문자열을 저장할 수 있는 크기여야 합니다. 예를 들어 이름을 ROWVERSION으로 지정한 후 ODBC 데이터 소스에 연결합니다.
**2.** 레코드를 업데이트하는 페이지에 업데이트 시 ROWVERSION 열 정보를 저장할 셀을 추가합니다. 필요에 따라 ROWVERSION 정보의 표시 여부를 설정할 수 있습니다.
**3.** 확인 버튼에 조건 명령을 설정하여, F4(즉, 페이지가 열릴 때 가져온 ROWVERSION 값)와 업데이트 시의 ROWVERSION 값이 동일한지 판단합니다. 같으면 데이터를 업데이트하고, 다르면 경고 메시지를 표시하고 업데이트를 취소합니다.
**4.** 데이터 테이블 작업 명령을 선택하고, 작업 유형을 "업데이트"로 선택합니다. 업데이트 시 ROWVERSION 값도 함께 업데이트해야 합니다.
**5.** "Else [조건식]"을 추가하고, 명령으로 "메시지 상자 표시"를 선택하여 경고 메시지를 설정합니다.