개발 컨설턴트 / 개발자로서 로직을 잘 정돈하려면 로직을 트랜잭션 단위 / 관심사 단위로 잘 쪼개는 것이 중요하다.
이를 위한 단위 중 하나인 LUW에 대해 학습해본다.
Transactions and Logical Units of Work
Transactions and Logical Units of Work
In everyday language, a transaction is a sequence of actions that logically belong together in a business sense and that either procure or process data. It covers a self-contained procedure, for example, generating a list of customers, creating a flight bo
help.sap.com
트랜잭션(Transaction)은 비즈니스적 의미에서 논리적으로 함께 묶이는, 데이터를 조달하거나 처리하는 일련의 동작입니다.
이는 고객 목록 생성, 항공편 예약 생성 또는 고객에게 알림 전송과 같은 독립적 절차를 포함합니다.
사용자 관점에서 볼 때 이는 논리적 단위(Logical Unit)를 형성합니다.
예를 들어, 재무 회계에서 금액을 이체할 때 다른 계좌에 입금하기 전에 먼저 한 계좌에서 차감해야 합니다.
차감 시, 두 포스팅 사이에서 포스팅하는 금액이 어느 계좌에도 없기 때문에 데이터가 일관되지 않습니다.
애플리케이션 프로그래머는 거래가 끝날 때 데이터가 일관됨을 확인해야 합니다.
만약, 오류가 발생하면 논리적 프로세스 내에서 변경한 내용을 취소할 수 있어야 합니다.
이와 관련된, 세 가지 관련 개념이 있습니다.
SAP LUW
SAPLUW
The Open SQL statements INSERT, UPDATE, MODIFY, and DELETE allow you to program database changes that span multiple dialog steps. Even if you have not explicitly programmed a database commit, the implicit database commit that occurs after a screen has been
help.sap.com
이 절차에서는 이전 대화 단계의 데이터베이스 변경 사항을 롤백할 수 없습니다.
따라서 개별 대화 단계 간에 논리적 관계가 없는 프로그램에만 적합합니다.
대화 단계들로 구성된 논리적 단위이며,
변경 사항이 단일 데이터베이스 LUW를 통해 데이터베이스에 기록되는 것을 SAPLUW라고 합니다.
데이터베이스 LUW와 달리 SAP LUW는 여러 대화 단계에 걸쳐 있을 수 있으며,
일련의 다른 작업 프로세스를 사용하여 실행될 수 있습니다.
SAP LUW에 데이터베이스 변경 사항이 포함되어 있는 경우, 모든 변경 사항을 데이터베이스에 기록하거나 전혀 기록하지 않아야 합니다.
이를 보장하려면 트랜잭션이 성공적으로 종료될 때 데이터베이스 커밋을 포함하고, 프로그램에서 오류를 감지할 경우 데이터베이스 롤백을 포함해야 합니다.
그러나 데이터베이스 LUW의 데이터베이스 변경 사항은 후속 데이터베이스 LUW에서 되돌릴 수 없으므로 SAP LUW에 대한 모든 데이터베이스 변경 사항을 단일 데이터베이스 LUW에서 수행해야 합니다.
데이터 무결성을 유지하려면 모든 데이터베이스 변경 사항을 SAPLUW의 최종 데이터베이스 LUW에 묶어야 합니다.
다음 그림은 이 원칙을 보여줍니다.

가장 간단한 번들링 형태는 단일 대화 단계 내에서 전체 애플리케이션을 처리하는 것입니다.
여기서 시스템은 사용자의 입력을 확인하며,
대화 단계 내에서 데이터베이스 커밋을 사용하지 않으며 데이터베이스를 업데이트합니다. (암시적으로)
물론 이는 복잡한 비즈니스 프로세스에는 적합하지 않습니다.
Bundling Using Function Modules for Updates
SAP LUW의 마지막 데이터베이스 LUW에서 데이터베이스 변경 사항을 번들링하는 이 기술을 사용하면
데이터베이스를 비동기적으로 업데이트할 수 있습니다.
이렇게 하면 대화 프로세스에서 응답 시간이 줄어듭니다.
예를 들어 업데이트를 대화 작업 프로세스에서 완전히 분리하고
원격 데이터베이스 서버에서 중앙 업데이트 작업 프로세스를 사용할 수 있습니다.
Bundling Using Subroutines
PERFORM ON COMMIT 명령문은 대화 작업 프로세스에서 서브루틴을 호출합니다.
그러나 시스템이 다음 COMMIT WORK 명령문에 도달할 때까지 실행되지 않습니다.
즉, 함수 모듈 대신 서브프로그램에서 데이터베이스 변경에 대한 Open SQL 명령문을 작성할 수도 있습니다.
여기에서도 ABAP 명령문 COMMIT WORK는 SAPLUW의 끝을 정의합니다.
PERFORM ON COMMIT으로 호출된 서브루틴에서 데이터베이스를 변경하는 모든 명령문은 해당 대화 단계의 데이터베이스 LUW에서 실행되기 때문입니다.

그러나 단점은 PERFORM ... ON COMMIT문에서 매개변수를 전달할 수 없다는 것입니다.
데이터는 전역 변수와 ABAP 메모리를 사용하여 전달됩니다.
이 방법을 사용하여 데이터를 전달할 때 데이터 불일치의 위험이 상당히 있습니다.
Bundling Using Function Modules in Other SAP Systems
SAP Transaction
SAP Transactions
An SAP LUW is a logical unit consisting of dialog steps, whose changes are written to the database in a single database LUW. In an application program, you end an SAP LUW with either the COMMIT WORKor ROLLBACK WORKstatement. An SAP transaction is an ABAP a
help.sap.com
SAP LUW는 대화 상자 단계로 구성된 논리적 단위로,
변경 사항은 단일 데이터베이스 LUW를 통해 데이터베이스에 기록됩니다.
애플리케이션 프로그램에서는 COMMIT WORK 또는 ROLLBACK WORK 문으로 SAP LUW를 종료합니다.
SAP 트랜잭션은 트랜잭션 코드를 사용하여 시작하는 ABAP 애플리케이션 프로그램입니다.
하나 이상의 SAP LUW를 포함할 수 있습니다.
시스템이 SAP 트랜잭션의 마지막 대화 상자 단계(dialog step)가 끝나지 않은 COMMIT WORK 또는 ROLLBACK WORK 문에 도달할 때마다 새 SAP LUW를 엽니다.
특정 애플리케이션에서 복잡한 트랜잭션을 작성해야 하는 경우,
SAP 트랜잭션 내의 논리적 프로세스를 개별 SAP LUW 시퀀스로 정리하는 것이 유용할 수 있습니다.
다음과 같이 SAP 트랜잭션을 구조화할 수 있습니다.
- 하나 이상의 SAP LUW가 있는 경우.
- 이 형태의 트랜잭션은 전적으로 처리 블록( dialog modues, event blocks, function module calls, and subroutines )으로 구성됩니다
- 외부 서브루틴 또는 함수 모듈로 인해 COMMIT WORK 또는 ROLLBACK WORK 문이 실수로 실행되지 않도록 주의해야 합니다.
- SAP LUW를 삽입하는 경우
- 아래 세 명령어는 새 SAP LUW를 엽니다.
-
ABAP 명령문 CALL TRANSACTION(새 트랜잭션 시작),
-
SUBMIT(실행 가능한 프로그램 시작)
-
CALL FUNCTION ... DESTINATION(RFC를 사용하여 함수 모듈 호출)
-
-
프로그램을 호출하면 항상 자체 SAP LUW가 열립니다.
-
그러나 호출한 SAP 트랜잭션의 LUW는 종료되지 않습니다.
-
즉, COMMIT WORK 또는 ROLLBACK WORK 명령문은 호출된 프로그램의 SAP LUW에만 적용됩니다.
-
-
새 LUW가 완료되면 시스템은 첫 번째 SAP LUW 처리를 계속합니다.
- 아래 세 명령어는 새 SAP LUW를 엽니다.
-
두 개의 SAP LUW를 병렬로 실행
-
CALL FUNCTION ... STARTING NEW TASK 문은 새 세션에서 비동기적으로 함수 모듈을 호출합니다.
-
일반적인 함수 모듈 호출과 달리 호출 트랜잭션은 함수 모듈이 시작되자마자 자체 처리를 계속하고 처리가 완료될 때까지 기다리지 않습니다.
-
함수 호출은 비동기적입니다. 호출된 함수 모듈은 이제 자체 화면을 호출하고 사용자와 상호 작용할 수 있습니다.
-
Database Logical Unit of Work (LUW)
Database Logical Unit of Work (LUW)
From the point of view of database programming, a database LUW is an inseparable sequence of database operations that ends with a database commit. The database LUW is either fully executed by the database system or not at all. Once a database LUW has been
help.sap.com
데이터베이스 프로그래밍의 관점에서 데이터베이스 LUW는 데이터베이스 커밋으로 끝나는,
분리할 수 없는 일련의 데이터베이스 작업입니다.
데이터베이스 LUW는 데이터베이스 시스템에서 완전히(전체가) 실행되거나 전혀 실행되지 않습니다.
데이터베이스 LUW가 성공적으로 실행되면 데이터베이스는 일관된 상태가 됩니다.
데이터베이스 LUW 내에서 오류가 발생하면 데이터베이스 LUW 시작 이후의 모든 데이터베이스 변경 사항이 되돌려집니다.
이렇게 하면 데이터베이스는 트랜잭션이 시작되기 전 상태로 유지됩니다.
Implicit Database Commits
작업 프로세스(Work process)는 단일 데이터베이스 LUW만 실행할 수 있습니다.
그 결과 작업 프로세스는 사용자 또는 외부 호출에 대한 작업을 완료할 때 항상 데이터베이스 LUW를 종료해야 합니다.
작업 프로세스는 다음과 같은 상황에서 암묵적 데이터베이스 커밋을 트리거합니다.
- 대화 상자 단계(dialog step)가 완료되면 제어가 작업 프로세스에서 SAP GUI로 다시 전환됩니다.
- 다른 작업 프로세스(RFC)에서 함수 모듈이 호출되면 제어가 다른 작업 프로세스로 전달됩니다.
- 다른 작업 프로세스에서 호출된 함수 모듈(RFC)이 종료되면 제어가 호출 작업 프로세스로 돌아갑니다.
- WAIT 문이 작업 프로세스를 중단하면 제어가 다른 작업 프로세스로 전달됩니다.
- 대화 상자 단계의 오류 대화 상자(정보, 경고 또는 오류 메시지) 제어가 작업 프로세스에서 SAP GUI로 전달됩니다.
Explicit Database Commits
- 함수 모듈 DB_COMMIT 호출
- 이 함수 모듈의 유일한 작업은 데이터베이스 커밋을 시작하는 것입니다.
- ABAP 명령문 COMMIT WORK 실행
- 이 명령문은 데이터베이스 커밋을 시작하지만 다른 작업도 수행합니다
- (COMMIT WORK에 대한 키워드 설명서 참조).
- 이 명령문은 데이터베이스 커밋을 시작하지만 다른 작업도 수행합니다
Implicit Database Rollbacks
- 애플리케이션 프로그램의 런타임 오류
- 예상치 못한 상황(예: 0으로 나누려고 시도)으로 인해 애플리케이션 프로그램을 종료해야 할 때마다 발생합니다.
- 종료 메시지
- 종료 메시지는 메시지 유형 A 또는 X를 사용하여 ABAP 명령문 MESSAGE를 사용하여 생성됩니다.
- 특정 사례(업데이트)에서는 메시지 유형 I, W 및 E를 사용하여 생성됩니다.
- 이러한 메시지는 현재 애플리케이션 프로그램을 종료합니다.
Explicit Database Rollbacks
ABAP 명령문 ROLLBACK WORK를 사용하여 명시적으로 데이터베이스 롤백을 트리거할 수 있습니다.
이 명령문은 데이터베이스 롤백을 시작하지만 다른 작업도 수행합니다(ROLLBACK WORK에 대한 키워드 설명서 참조).
위의 내용을 통해, 데이터베이스 LUW가 시작되고 끝나는 지점의 목록을 작성할 수 있습니다.
A Database LUW Begins
- 대화 단계가 시작될 때마다(대화 단계가 작업 프로세스로 전송될 때마다).
- 이전 데이터베이스 LUW가 데이터베이스 커밋으로 끝날 때마다.
- 이전 데이터베이스 LUW가 데이터베이스 롤백으로 끝날 때마다.
A Database LUW Ends
- 데이터베이스 커밋이 발생할 때마다. 이는 모든 변경 사항을 데이터베이스에 기록합니다.
- 데이터베이스 롤백이 발생할 때마다. 이는 LUW 중에 수행된 모든 변경 사항을 되돌립니다.
Database LUWs and Database Locks
데이터베이스 LUW는 데이터베이스 내에서 변경된 내용 외에도 데이터베이스 잠금으로 구성됩니다.
데이터베이스 시스템은 두 명 이상의 사용자가 동시에 동일한 데이터를 변경할 수 없도록 잠금을 사용합니다.
이는 데이터베이스에 일관되지 않은 데이터가 기록될 수 있기 때문입니다.
데이터베이스 잠금은 데이터베이스 LUW의 기간 동안만 활성화될 수 있습니다.
데이터베이스 LUW가 종료되면 자동으로 해제됩니다.
SAP LUW를 프로그래밍하려면 R/3 시스템 내에 잠금 메커니즘이 필요하며,
이를 통해 수명이 더 긴 잠금을 생성할 수 있습니다.
요약
- LUW는 여러 CRUD의 묶음이다.
- SAP Transaction은 하나의 티코드로 실행하는 프로그램으로 dialog step을 통해 여러 LUW을 생성할 수 있다.
- 언제 암시적, 명시적 커밋 / 롤백이 발생하는지, 사용하는지 이해한다.
- SAP LUW 개념을 이용하면 명시적 커밋/롤백 없이도 트랜잭션을 깔끔하게 관리할 수 있다.
'SAP' 카테고리의 다른 글
[SAP ABAP] Group By로 중복 체크하기 (0) | 2025.02.17 |
---|---|
[SAP ABAP] for loop with group (0) | 2025.02.17 |
[SAP] LG CNS ERP 개발센터에서의 1년 회고, SAP 개발자 1년차 이야기 (0) | 2024.12.21 |
[EWM] 재고 Batch, Valuation Type (0) | 2024.12.16 |
[EWM] ERP Good receipt(Document FLow Update) 지연시키기 (0) | 2024.10.04 |