λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

ABAP Concept (πŸ“κ°œλ…)/Advanced

ABAP μ—μ„œ Auto Commit은 λŒ€μ²΄ μ–Έμ œ μ‹€ν–‰λ˜λŠ” 걸까?

 

ABAP κ°œλ°œμ„ ν•˜λ‹€ 보면 이런 생각을 ν•œλ²ˆμ―€ ν•΄λ³΄μ•˜μ„ 것이닀.

 

 COMMIT WORK λ¬Έμž₯을 λ„£μ§€ μ•Šμ•˜λŠ”λ°, μ™œ λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯(commit)이 λ˜μ§€?

 

 μ²˜μŒμ—λŠ” 버그인가 μ‹Άμ–΄ μ˜μ‹¬λ„ 해보고, νŠΈλžœμž­μ…˜μ΄ 꼬인 걸까 ν•˜κ³  λ‘œκ·Έλ„ λ’€μ Έλ³΄μ§€λ§Œ, 사싀 이건 SAP μ‹œμŠ€ν…œ λ‚΄λΆ€μ˜ 정상적인 λ™μž‘μ΄λ‹€. λ°”λ‘œ Implicit Database Commit, 즉 μžλ™ 컀밋( Auto Commit ) λ•Œλ¬Έμ΄λ‹€. 

이번 ν¬μŠ€νŒ…μ—μ„œλŠ” SAP ABAPμ—μ„œ μ™œ 이런 일이 λ°œμƒν•˜λŠ”μ§€, μ–΄λ–€ κ²½μš°μ— μžλ™μœΌλ‘œ 컀밋이 λ°œμƒν•˜λŠ”μ§€λ₯Ό 정리해보도둝 ν•˜κ² λ‹€.


1. Implicit Commit( Auto Commit )μ΄λž€?

 SAP의 AS ABAP(Application Server ABAP) μ•„ν‚€ν…μ²˜μ—μ„œλŠ” ν•œ Work Process(μž‘μ—… ν”„λ‘œμ„ΈμŠ€) κ°€ ν•˜λ‚˜μ˜ Database LUW(Logical Unit of Work) 만 μ²˜λ¦¬ν•  수 μžˆλ‹€. 그리고 ν•˜λ‚˜μ˜ ABAP ν”„λ‘œκ·Έλž¨μ€ μ‹€ν–‰ 도쀑에 μ—¬λŸ¬ Work Process둜 μ „ν™˜λ  수 있기 λ•Œλ¬Έμ—, μž‘μ—… ν”„λ‘œμ„ΈμŠ€κ°€ λ³€κ²½λ˜κΈ° 전에 ν˜„μž¬ μž‘μ—…μ€ 컀밋(Commit)이 λ˜μ–΄μ•Ό ν•œλ‹€..

 

 μ¦‰, μž‘μ—… ν”„λ‘œμ„ΈμŠ€ μ „ν™˜μ΄ λ°œμƒν•˜λŠ” νŠΉμ • μƒν™©μ—μ„œ, λͺ…μ‹œμ μœΌλ‘œ COMMIT WORK ꡬ문을 λ„£μ§€ μ•Šμ•„λ„ SAP μ‹œμŠ€ν…œμ΄ μžλ™μœΌλ‘œ 컀밋을 μ‹€ν–‰ν•˜λŠ” 것이닀.

πŸ”  Database LUW λž€? 
 Database LUW (Logical Unit of Work)λŠ” ν•˜λ‚˜μ˜ 논리적인 λ°μ΄ν„°λ² μ΄μŠ€ νŠΈλžœμž­μ…˜ λ‹¨μœ„μ΄λ©°, "이 μž‘μ—…λ“€μ€ ν•œ 묢음으둜 성곡해야 ν•œλ‹€!"λŠ” λΆˆκ°€λΆ„μ˜ μ—°μ‚° 집합을 λ§ν•œλ‹€.

➑️  Database LUW  =  ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜

2. Implicit Commit( Auto Commit )은 그럼 μ–Έμ œ μž‘λ™ν•˜λ‚˜?

 ABAP ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑 μžλ™μœΌλ‘œ λ°μ΄ν„°λ² μ΄μŠ€ Commit이 μΌμ–΄λ‚˜λŠ” μ£Όμš” μΌ€μ΄μŠ€μ΄λ‹€. μ˜ˆμƒμΉ˜ λͺ»ν•œ 데이터 μ €μž₯을 막기 μœ„ν•΄ λ°˜λ“œμ‹œ μ•Œμ•„λ‘μž.

 

βœ… Dialog Step μ’…λ£Œ μ‹œ

κ°œλ°œμ‹œ κ°€μž₯ λΉˆλ²ˆν•˜κ²Œ λ°œμƒν•˜λŠ” μ‹œμ μœΌλ‘œ μ‚¬μš©μžμ˜ μ•‘μ…˜μ„ κΈ°λ‹€λ¦¬λŠ” μˆœκ°„, ν˜„μž¬ Work ProcessλŠ” λ°˜ν™˜λ˜κ³  λ‹€μŒ Dialog Step(πŸ”)μ—μ„œλŠ” μƒˆλ‘œμš΄ Work Processκ°€ λ°°μ •λœλ‹€. ν•΄λ‹Ή ν™”λ©΄μ˜ PAI μ’…λ£Œ ν›„ λ‹€μŒ ν™”λ©΄μ˜ PBOκ°€ μ‹€ν–‰λ˜κ³  μ’…λ£Œ λ˜μ„œ μƒˆ 화면이 ν‘œμ‹œλ  λ•Œκ°€ Dialog Step의 μ’…λ£Œ μ‹œμ μ΄μž Auto Commit이 λ°œλ™λ˜λŠ” μ‹œμ μ΄λ‹€.

πŸ” Dialog Stepμ΄λž€?
μ‚¬μš©μžκ°€ ν™”λ©΄(GUI)μ—μ„œ λ²„νŠΌ 클릭, μ—”ν„° μž…λ ₯ λ“±μ˜ 행동을 μ·¨ν•œ ν›„, SAP μ‹œμŠ€ν…œμ΄ ν•΄λ‹Ή μž…λ ₯에 따라 화면을 λ‹€μ‹œ 그렀쀄 λ•ŒκΉŒμ§€μ˜ ν•˜λ‚˜μ˜ 처리 λ‹¨μœ„λ₯Ό 말함.

μ‰½κ²Œ μ„€λͺ…ν•˜μžλ©΄:
1οΈβƒ£μ‚¬μš©μžκ°€ μ–΄λ–€ ν™”λ©΄( Dynpro )μ—μ„œ 값을 μž…λ ₯ν•˜κ³  "μ €μž₯" λ²„νŠΌμ„ λˆ„λ₯΄λ©΄,
2οΈβƒ£μ‹œμŠ€ν…œμ€ 이 λ™μž‘μ„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ PAI( Process After Input ) 이벀트λ₯Ό μ‹€ν–‰ν•˜κ³ ,
3️⃣그 결과에 따라 λ‹€μŒ ν™”λ©΄μ˜ PBO( Process Before Output ) λ‘œμ§μ„ μ€€λΉ„ν•œ ν›„,
4οΈβƒ£μƒˆ 화면을 μ‚¬μš©μžμ—κ²Œ λ‹€μ‹œ λ³΄μ—¬μ£Όκ²Œ λœλ‹€.

이 전체 흐름이 ν•˜λ‚˜μ˜ Dialog Step이라고 μ΄ν•΄ν•˜λ©΄ λœλ‹€.

 

πŸ“Œ 참고둜, 이런 상황은 아직 Dialog Step μ’…λ£Œ μ‹œμ μ΄ μ•„λ‹˜.

  • ν•΄λ‹Ή ν™”λ©΄μ˜ PAIμ—μ„œ 둜직 처리 쀑일 λ•Œ
  • λ‹€μŒ 화면이 κ²°μ •λ˜μ—ˆμ§€λ§Œ PBO μ‹€ν–‰ μ „
  • 화면이 μ•„직 ν‘œμ‹œλ˜μ§€ μ•Šκ³  λ‘œμ§μ΄ κ³„속 μ§„ν–‰ μ€‘일 λ•Œ

βœ… WAIT λͺ…λ Ήμ–΄ 이후

  • ABAP ν”„λ‘œκ·Έλž¨μ€ ν•˜λ‚˜μ˜ μ›Œν¬ ν”„λ‘œμ„ΈμŠ€(work process)μ—μ„œ μ‹€ν–‰λ˜λŠ”λ°, WAIT λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜λŠ” μˆœκ°„, ν˜„μž¬ μ›Œν¬ ν”„λ‘œμ„ΈμŠ€λ₯Ό λ°˜λ‚©ν•˜κ³  μ€‘λ‹¨ν•˜κ²Œ λœλ‹€. 이 λ•Œ μžλ™ 컀밋을 μˆ˜ν–‰ν•œλ‹€. 
  • WAIT UP TO n SECONDS, WAIT FOR ASYNCHRONOUS TASKS 등이 μžˆλ‹€. 

βœ… RFC(Remote Function Call) 호좜 ν›„

  • RFC ν˜ΈμΆœμ€ ν˜„μž¬ μ›Œν¬ ν”„λ‘œμ„ΈμŠ€μ˜ μ œμ–΄κΆŒμ„ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λ‘œ λ„˜κΈ°λŠ” μž‘μ—…μœΌλ‘œ, 이 μ‹œμ μ— ν˜„μž¬ DB νŠΈλžœμž­μ…˜μ„ 정리(=컀밋)ν•˜μ§€ μ•ŠμœΌλ©΄ 일관성 λ¬Έμ œκ°€ μƒκΈ°λ―€λ‘œ μžλ™ 컀밋을 μˆ˜ν–‰ν•œλ‹€.
RFC μœ ν˜• μ„€λͺ… μžλ™ 컀밋 μ‹œμ 
sRFC (Synchronous) 동기 λ°©μ‹, ν˜ΈμΆœ μ™„λ£ŒκΉŒμ§€ κΈ°λ‹€λ¦Ό 호좜이 λλ‚˜κ³  ν˜ΈμΆœν•œ μͺ½μœΌλ‘œ λŒμ•„μ˜¬ λ•Œ μ›Œν¬ ν”„λ‘œμ„ΈμŠ€ μ „ν™˜ λ°œμƒ κ°€λŠ₯  → μ»€λ°‹ λ°œμƒ
aRFC (Asynchronous) 비동기 λ°©μ‹, ν˜ΈμΆœ ν›„ λ°”λ‘œ λ¦¬ν„΄ 호좜 μ§ν›„, μ›Œν¬ ν”„λ‘œμ„ΈμŠ€ λ°˜λ‚© μ‹œ μ»€λ°‹
tRFC/qRFC 
(Transactional)
νŠΈλžœμž­μ…˜ νμ— λ“±λ‘ 등둝 ν›„ λ³„도 μ—…λ°μ΄νŠΈ μž‘μ—…μ—μ„œ μ‹€ν–‰λ¨
CALL FUNCTION ...
STARTING NEW TASK
병렬 μ²˜λ¦¬λ₯Ό μœ„ν•œ aRFC ν™•μž₯ ν˜„μž¬ ν”„λ‘œμ„ΈμŠ€κ°€ λ°˜λ‚©λ˜λ©΄μ„œ μ»€λ°‹

βœ…CALL TRANSACTION USING 의 경우 ( BDC ν”„λ‘œκ·Έλž¨ )

  • CALL TRANSACTION USING으둜 νŠΈλžœμž­μ…˜μ„ μ‹€ν–‰ν•˜λ©΄, κ·Έ νŠΈλžœμž­μ…˜ λ‚΄λΆ€μ—μ„œ COMMIT WORKκ°€ 호좜되면 Batch Input μ„Έμ…˜μ΄ λλ‚˜λŠ” 상황이 λ°œμƒν•¨
  • BDC μ˜΅μ…˜ νŒŒλΌλ―Έν„°μ— RACOMMIT ν•„λ“œ ( default RACOMMIT = 'X' ) 둜 μžλ™ 컀밋을 μ œμ–΄ν•  수 μžˆλ‹€. 

βœ… ν”„λ‘œκ·Έλž¨  μ’…λ£Œ λͺ…령이 호좜 될 λ•Œ

  • LEAVE PROGRAM, LEAVE TO TRANSACTION κ³Ό 같은 ν”„λ‘œκ·Έλž¨ μ’…λ£Œ μ„ μ–Έμ‹œ λͺ…μ‹œμ μœΌλ‘œ commit workκ°€ μ—†μœΌλ©΄ μžλ™ 컀밋을 μˆ˜ν–‰ν•¨.

 

⚠️ Internal Session( λ‚΄λΆ€ μ„Έμ…˜ ) μ’…λ£Œλ§Œ 봀을 λ•ŒλŠ” Auto Commit이 μž‘λ™μ•ˆν•¨

  • SAPμ—μ„œ λ‚΄λΆ€ μ„Έμ…˜μ΄ μ’…λ£Œλ˜λ”λΌλ„, 그건 λ°μ΄ν„°λ² μ΄μŠ€ 컀밋 νŠΈλ¦¬κ±°κ°€ μ•„λ‹˜μ„ μ˜λ―Έν•œλ‹€.

λ‚΄λΆ€ μ„Έμ…˜μ—μ„œ INSERT / UPDATEλ₯Ό μ‹€ν–‰ν•˜κ³ , κ·Έ μ„Έμ…˜μ΄ CALL FUNCTION, CALL TRANSACTION, SUBMIT λ“±μ˜ λ°©μ‹μœΌλ‘œ μ’…λ£Œλ˜μ–΄λ„ COMMIT WORKλ₯Ό λͺ…μ‹œμ μœΌλ‘œ ν˜ΈμΆœν•˜μ§€ μ•ŠμœΌλ©΄ Databaseμ—λŠ” μ €μž₯λ˜μ§€ μ•ŠλŠ”λ‹€. 단 호좜 ν–ˆλ˜ ν”„λ‘œκ·Έλž¨μ—μ„œ μ•žμ—μ„œ μ–ΈκΈ‰ν–ˆλ˜ κ²½μš°κ°€ μžˆλ‹€λ©΄, (λ‹€μ΄μ–Όλ‘œκ·Έ μŠ€ν…μ΄ μ’…λ£Œ, BDC...) μ˜€ν†  컀밋이 μˆ˜ν–‰λ˜μ–΄ 질 수 μžˆλ‹€. 

 

즉, λ‚΄λΆ€ μ„Έμ…˜(πŸ”)은 논리적인 ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ λ‹¨μœ„μ΄μ§€, DB νŠΈλžœμž­μ…˜μ˜ μ’…λ£Œ 쑰건이 μ•„λ‹ˆκΈ° λ•Œλ¬Έμ΄λ‹€.

πŸ” Internal Session( λ‚΄λΆ€ μ„Έμ…˜ ) μ΄λž€?
SAP ABAPμ—μ„œ ν”„λ‘œκ·Έλž¨μ΄ 싀행될 λ•Œ, 각 ABAP ν”„λ‘œκ·Έλž¨μ€ ν•˜λ‚˜μ˜ λ‚΄λΆ€ μ„Έμ…˜(Internal Session)μ—μ„œ μ‹€ν–‰λœλ‹€. 예λ₯Ό λ“€μ–΄, CALL TRANSACTION, SUBMIT, CALL FUNCTION (STARTING NEW TASK μ˜΅μ…˜μ€ μ œμ™Έ) 등은 ν˜„μž¬ μž‘μ—… μ•ˆμ—μ„œ μƒˆλ‘œμš΄ Internal Session을 μ‹œμž‘ν•˜κ±°λ‚˜ μ’…λ£Œν•  수 μžˆλ‹€.

➑️  Internal Session  =  λ…λ¦½λœ ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 곡간

 

 

 


ℹ️ 같이 읽으면 쒋은 ν¬μŠ€νŒ…

πŸ”— [ABAP Concept (πŸ“κ°œλ…)/Advanced] - SAP LUW ( Logical Unit of Work ) μ‰½κ²Œ μ΄ν•΄ν•˜κΈ°

 

SAP LUW ( Logical Unit of Work ) μ‰½κ²Œ μ΄ν•΄ν•˜κΈ°

ABAP κ°œλ°œμ„ μ‹œμž‘ν•˜κ³  μ–΄λŠ 정도 μ΅μˆ™ν•΄μ§ˆ 즈음, ν•œ 번쯀 μŠ€μ³κ°€λŠ” κ°œλ… 쀑에 ν•˜λ‚˜κ°€ λ°”λ‘œ LUW(Logical Unit of Work)이닀.처음 이 μš©μ–΄λ₯Ό μ ‘ν•˜λ©΄, 마치 μ–΄λ–€ νŠΉμˆ˜ν•œ νŠΈλžœμž­μ…˜ 처리 방식, ν˜Ήμ€ μ‹¬ν™”λœ DB

twossun.tistory.com