본문 바로가기
BAPI · BADI · RFC · Interface

[SAP ABAP] BDC vs BAPI 차이 정리 — 화면 자동화 vs DB 직접 호출 / 언제 어느 것을 쓸까

by Song.sh 2026. 5. 20.

SAP 에서 데이터를 다건 또는 단건으로 자동 입력해야 할 때 가장 먼저 마주치는 선택지가 BDC(Batch Data Communication)BAPI(Business Application Programming Interface) 입니다. 둘 다 "표준 트랜잭션을 ABAP 코드로 자동화한다" 라는 목적은 같지만, 동작 방식·성능·호환성·CBO(자체 개발 화면) 대응 면에서 성격이 완전히 다릅니다.

 

신입 ABAP 개발자가 가장 자주 묻는 질문이 "그래서 어느 걸 써야 하나요" 입니다. 정답은 단순합니다 — 가능하면 BAPI, BAPI 가 없거나 회사 특화 화면이 끼어 있으면 BDC. 그런데 그 한 줄로 끝낼 수 있는 결정이 실제 업무에서는 모듈러 신입에게 자주 혼란을 줍니다. 비슷한 자동화 작업인데 어떤 자재는 BAPI 로 깨끗하게 처리되고 어떤 자재는 BDC 가 강제되는 이유, BAPI 가 명백히 빠른데 왜 회사에서 여전히 BDC 자동화 프로그램이 운영되고 있는지 같은 부분이 익숙해질 때까지 시간이 걸립니다.

 

이 글은 BDC 와 BAPI 의 동작 방식 차이 → 성능 비교 → Custom 필드 대응 → 시스템 업그레이드 호환성 → 의사결정 트리 → 흔히 빠뜨리는 함정 순서로 둘의 차이를 정리한 메모입니다. 양쪽 다 익숙한 개발자가 신입에게 한 번에 설명해 줄 때 보여줄 만한 표를 한 화면에 모았습니다.


핵심 — 한눈 비교 표

항목 BDC BAPI
동작 방식 화면 흐름을 따라가며 키 입력 시뮬레이션 함수 모듈 호출 — DB 직접 업데이트
대상 트랜잭션 SAP 표준 + CBO(자체 개발 화면) 모두 SAP 표준만 (SAP 가 제공하는 것)
성능 상대적으로 느림 (화면 단계마다 검증) 빠름 (DB 직접 접근)
데이터 무결성 화면이 통과하면 사용자 입력과 동일 SAP 가 무결성 보장 (공식 인터페이스)
시스템 업그레이드 화면 변경 시 깨질 수 있음 SAP 가 하위 호환 보장
Custom 필드 화면에 있으면 그대로 입력 가능 EXTENSIONIN 같은 확장 구조 필요
디버깅 MODE 'A' 로 화면 보면서 가능 RETURN 메시지 분석 / 함수 디버깅
COMMIT 처리 CALL TRANSACTION 안에서 자동 BAPI_TRANSACTION_COMMIT 별도 호출

핵심 한 줄: "BAPI 가 있고 요구사항이 표준 안에 들면 BAPI / 그 외에는 BDC". 둘 중 하나만 알아두지 말고 둘 다 도구상자에 가지고 있어야 어떤 자동화 요청에도 대응 가능합니다.


1단계 — BDC 가 어떻게 동작하나

BDC 는 사용자가 SAP 화면에서 키보드와 마우스로 진행하는 과정을 그대로 흉내냅니다.

사용자 흐름:
  MM01 → 자재번호 입력 → Enter → 뷰 선택 → Enter → Basic Data 1 입력 → 저장

BDC 시뮬레이션:
  화면 1 (PROGRAM=SAPLMGMM DYNPRO=0060)
    BDC_OKCODE = '=ENTR'
    RMMG1-MATNR = 'TEST-MAT-001'
    RMMG1-MBRSH = 'M'
    RMMG1-MTART = 'FERT'
  화면 2 (PROGRAM=SAPLMGMM DYNPRO=0070)
    BDC_OKCODE = '=ENTR'
    MSICHTAUSW-DYTXT(01) = 'X'
  화면 3 (PROGRAM=SAPLMGMM DYNPRO=4004)
    BDC_OKCODE = '=BU'  (저장)
    MAKT-MAKTX = '테스트 자재'
    ...

 

화면 한 단계씩 진행하므로 표준 트랜잭션이 가진 모든 검증(필수 입력 체크·고객 BAdI·SET/GET 파라미터 등) 이 그대로 흐릅니다. 사용자가 손으로 진행한 것과 100% 같은 결과가 나와 회사 특화 검증이 들어간 트랜잭션도 그대로 자동화 가능. 다만 화면 자체에 강하게 의존하므로 SAP 패치로 화면 구조가 바뀌면 BDC 가 깨집니다.


2단계 — BAPI 가 어떻게 동작하나

BAPI 는 SAP 가 미리 만들어 둔 함수 모듈을 호출하는 방식. 화면을 거치지 않고 DB 를 직접 업데이트합니다.

" 자재마스터 생성 BAPI 예시
DATA: ls_head    TYPE bapimathead,
      ls_clientd TYPE bapi_mara,
      ls_clientx TYPE bapi_marax,
      ls_return  TYPE bapiret2.

ls_head-material         = 'TEST-MAT-001'.
ls_head-ind_sector       = 'M'.
ls_head-matl_type        = 'FERT'.
ls_head-basic_view       = 'X'.

ls_clientd-base_uom      = 'EA'.
ls_clientd-matl_group    = '001'.

ls_clientx-base_uom      = 'X'.
ls_clientx-matl_group    = 'X'.

CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
  EXPORTING
    headdata     = ls_head
    clientdata   = ls_clientd
    clientdatax  = ls_clientx
  IMPORTING
    return       = ls_return.

" SAP 표준 BAPI 는 별도 COMMIT 필요
IF ls_return-type NA 'EA'.
  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING wait = 'X'.
ELSE.
  CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.

 

BAPI 는 SAP 가 공식으로 제공하는 인터페이스라 SAP 가 직접 책임집니다. 데이터 무결성 보장·시스템 업그레이드 호환성·릴리즈 가이드 모두 SAP 가 관리. 다만 BAPI 가 검증해 주는 범위는 SAP 가 표준으로 정의한 영역에 한정되므로, 회사가 추가한 화면 검증 로직(BAdI · User-Exit) 은 안 흐를 수 있습니다.


3단계 — 성능 비교

대량 처리에서 BAPI 가 훨씬 빠릅니다. 화면을 거치지 않으니 화면 그리기·검증 라운드트립이 없습니다.

시나리오 BDC (참고) BAPI (참고)
자재마스터 1만 건 생성 수 시간 (환경에 따라) 수십 분
PO 100 건 생성 ~10 분 ~1~2 분
단건 생성 차이 미미 차이 미미

표의 수치는 시스템 부하·인덱스·DB 상황에 따라 크게 달라지므로 절대값이 아니라 "BAPI 가 명백히 빠르다" 의 상대 비교로만 봐 주세요. 단건 자동화는 사람이 체감할 만한 차이가 없지만, 마이그레이션이나 대량 업로드 같은 케이스는 BAPI 가 운영 시간을 크게 줄여줍니다.


4단계 — Custom 필드 / Custom 화면 대응

회사가 자재마스터에 자체 필드(예: ZZ_MAT_GRADE) 를 추가했다면 둘의 대응 방식이 갈립니다.

" 케이스 A: BDC — Custom 필드도 화면에 있으면 자동 입력 가능
PERFORM bdc_field USING 'MARA-ZZ_MAT_GRADE' 'A+'.
" → 화면이 그 필드를 가지고 있으면 정상 입력
" 케이스 B: BAPI — EXTENSIONIN 같은 확장 구조 필요
DATA lt_ext TYPE TABLE OF bapiparex.
APPEND VALUE #( structure = 'BAPI_TE_MARA'
                valuepart1 = 'TEST-MAT-001A+   ' ) TO lt_ext.

CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
  EXPORTING headdata = ls_head ...
  TABLES    extensionin = lt_ext.
" → BAPI 가 EXTENSIONIN 을 받도록 IMG 에 매핑 등록되어 있어야 작동
" → 일부 BAPI 는 EXTENSIONIN 자체를 지원하지 않음

회사 특화 필드가 많은 자재마스터·PO 같은 환경에서는 BDC 가 손쉬운 선택. BAPI 의 EXTENSIONIN 은 IMG 설정·매핑 등록·BAdI 구현까지 같이 가야 작동해서 셋업이 더 무겁습니다. 이 부분이 회사에서 BAPI 가 있는데도 BDC 자동화가 운영되는 가장 흔한 이유.


5단계 — 시스템 업그레이드 호환성

[ SAP EHP 또는 S/4HANA 마이그레이션 시점 ]

BDC:
  → MM01 화면의 필드 순서가 바뀜
  → 기존 BDC 가 "이 화면에 이 필드가 없다" 에러
  → BDC 코드 전체 재검토·재레코딩

BAPI:
  → SAP 가 BAPI 시그니처 하위 호환 유지
  → 코드 변경 없이 그대로 동작 (대부분의 경우)
  → 신기능은 새 BAPI 또는 추가 파라미터로 제공

 

SAP 가 BAPI 를 "공식 인터페이스" 로 위치 부여하면서 강하게 보장하는 부분이 호환성입니다. 단, S/4HANA 환경에서 이미 사용 중단 예고(deprecated) 된 BAPI 도 있으므로 마이그레이션 전에는 SAP Note · Simplification List 확인 필요.


의사결정 트리

자동화 요건이 들어왔을 때 BDC / BAPI 선택 흐름.

요건 분석
   │
   ├─ 표준 BAPI 가 존재하는가? ─────────── NO ──→ BDC
   │           │
   │          YES
   │           │
   ├─ BAPI 가 요구사항을 모두 충족하는가? ─ NO ──→ BAPI(EXTENSIONIN) 시도 → 안 되면 BDC
   │           │
   │          YES
   │           │
   ├─ Custom 필드가 BAPI 에 매핑되어 있는가? NO ──→ BDC
   │           │
   │          YES
   │           │
   └─ 대량 처리 / 성능 중요한가? ──── YES ──→ BAPI (강력 권장)
                                       │
                                      NO
                                       │
                                       → BAPI 우선 / BDC 도 가능

일반적으로 SAP 표준 트랜잭션을 자동화한다면 BAPI 가 있는지 먼저 SE37 에서 검색 하고, 있으면 그것부터 시도. 한계가 있을 때만 BDC 로 내려가는 흐름이 가장 안전합니다.


자주 쓰이는 BAPI 예시

자주 자동화하는 표준 트랜잭션 ↔ BAPI 매핑.

표준 T-Code 대응 BAPI 용도
MM01 / MM02 BAPI_MATERIAL_SAVEDATA 자재마스터 생성 / 변경
ME21N BAPI_PO_CREATE1 PO 생성
ME22N BAPI_PO_CHANGE PO 변경
VA01 BAPI_SALESORDER_CREATEFROMDAT2 영업오더 생성
MIGO BAPI_GOODSMVT_CREATE 자재 이동 (GR / GI)
FB01 BAPI_ACC_DOCUMENT_POST FI 전표 등록
XK01 / XK02 BAPI_VENDOR_CREATE / 변경 공급업체 마스터

이 표에 없는 트랜잭션이 BAPI 가 없는 경우가 많습니다. SE37 에서 "BAPI_*" 또는 트랜잭션 키워드로 검색해 BAPI 존재 여부 먼저 확인.


흔히 빠뜨리는 함정

BAPI 호출 후 COMMIT 누락

CALL FUNCTION 'BAPI_PO_CREATE1' ...
" ❌ BAPI_TRANSACTION_COMMIT 없음 — DB 반영 안 됨

BAPI 는 자체적으로 COMMIT 안 합니다. 성공적으로 호출 후 BAPI_TRANSACTION_COMMIT 명시 호출이 필수.

BDC 가 BAPI 보다 항상 느리다고 단정

단건 처리는 사실상 차이 없거나 미미합니다. 화면 검증 로직이 비즈니스적으로 중요한 경우(예: 회사 BAdI 가 화면에 박혀 있는 트랜잭션) 는 오히려 BDC 가 안전한 선택이 될 수 있습니다.

LOOP 안 BAPI 호출 시 COMMIT 안 함

LOOP AT lt_data INTO ls_data.
  CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA' ...
  " ❌ LOOP 끝에 한 번만 COMMIT — 에러난 건도 같이 커밋될 위험
ENDLOOP.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.

LOOP 안 BAPI 호출은 매 건마다 결과 확인 후 COMMIT 또는 ROLLBACK 결정. 에러 건 분리·재처리 가능하게 설계.

LOOP AT lt_data INTO ls_data.
  CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA' ...
  IF ls_return-type CA 'EA'.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'.
  ENDIF.
ENDLOOP.

BDC 가 BAPI 가능한 트랜잭션에 쓰임

" ❌ BAPI_PO_CREATE1 이 있는데도 ME21N BDC 작성
CALL TRANSACTION 'ME21N' USING gt_bdcdata ...

표준 BAPI 가 존재하면 BAPI 가 우선. BDC 는 BAPI 가 없거나 회사 특화 필드 매핑이 불가능한 경우에만 선택.

Custom 필드 BAPI 매핑 누락

BAPI 의 EXTENSIONIN 으로 Custom 필드를 넘기려면 IMG 의 BAPI 매핑 설정 + BAdI 구현이 같이 가야 합니다. 코드만 짜놓고 매핑이 빠지면 EXTENSIONIN 데이터가 BAPI 안에서 무시됩니다.

BAPI 메시지 무시

CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA' ...
" ❌ ls_return 안 보고 다음 진행

BAPI 는 에러 발생 시 SY-SUBRC 가 아닌 RETURN 테이블의 TYPE 으로 알려줍니다. TYPE = 'E' 또는 'A' 가 하나라도 있으면 실패로 간주.

BDC MODE 'A' 운영 배포

CALL TRANSACTION 'MM01' USING gt_bdcdata MODE 'A' ...  " ❌ 운영 사용자 화면 떠 버림

테스트 후 운영 배포 시 'N'(백그라운드) 으로 변경 잊지 않기.


요약

상황 선택
표준 BAPI 존재 + 요건 충족 BAPI 우선
대량 처리 (수천 ~ 수만 건) BAPI (성능)
시스템 업그레이드 예정 BAPI (호환성)
BAPI 없음 / CBO 화면 ⚙️ BDC (유일 선택)
Custom 필드 BAPI 미지원 ⚙️ BDC 또는 BAPI(EXTENSIONIN + IMG 매핑)
회사 BAdI / 화면 검증 중요 ⚙️ BDC (검증 그대로 흐름)

BDC 와 BAPI 는 경쟁 관계가 아니라 도구상자의 다른 칸에 있는 두 도구입니다. BAPI 가 있으면 BAPI, BAPI 가 없거나 회사 특화 화면이 끼면 BDC — 이 단순한 기준만 따라가도 대부분의 자동화 요건에 맞는 도구가 자연스럽게 결정됩니다. 신입 모듈러는 둘 다 한 번씩 직접 구현해 보는 경험이 가장 빨리 익숙해지는 길이며, 익숙해진 뒤에는 BAPI 우선 + BDC 폴백 패턴으로 가는 것이 운영 안전성 면에서 추천됩니다.


Disclaimer — 이 포스트는 실무 정리 노트를 바탕으로 AI 보조로 정리되었습니다.

BDC(Batch Data Communication) · BAPI(Business Application Programming Interface) 는 SAP 표준 자동화 메커니즘으로 ECC 6.0 / S/4HANA on-premise 환경에서 동일하게 동작합니다.

 

BAPI_TRANSACTION_COMMIT · BAPI_TRANSACTION_ROLLBACK 은 BAPI 호출 후 명시적으로 호출해야 하며 BAPI 함수 모듈 자체는 자동 COMMIT 하지 않습니다. SAP 표준 BAPI 의 하위 호환성 보장은 SAP 의 공식 정책이지만, S/4HANA 마이그레이션 시 일부 BAPI 가 deprecated 되거나 대체 방식(RAP·OData) 으로 권고되는 경우가 있어 마이그레이션 전에는 SAP Note 와 Simplification List 확인이 필요합니다.

 

본문의 성능 수치 예시는 시스템 환경에 따라 크게 달라지므로 절대값이 아닌 상대 비교 참고용으로만 활용하시기 바랍니다. S/4HANA Cloud(ABAP Cloud / Steampunk) 환경에서는 BDC 사용이 제한되며 BAPI 도 Released API 만 사용 가능하므로, 클라우드 환경 자동화는 RAP(RESTful Application Programming Model) 기반 비즈니스 객체 호출이 표준 권장 방식입니다.