SAP ABAP을 시작하면 자주 듣게 되는 약어가 몇 개 있습니다. BAPI, BADI, BDC, EXIT — 비슷해 보이지만 각자 역할과 사용 시점이 완전히 다릅니다.
이번 글에서는 이 네 개 개념의 차이를 한 번에 정리합니다.
입문자가 많이 헷갈리는 부분이라 첫 글로 정리해 두면 이후 깊이 있는 BAPI/BADI 글을 볼 때 훨씬 편합니다.
한 줄 정의
| 개념 | 풀어쓰기 | 한 줄 정의 |
|---|---|---|
| BAPI | Business Application Programming Interface | SAP 표준 비즈니스 객체를 CRUD로 다룰 수 있게 해주는 표준 펑션 |
| BADI | Business Add-In | SAP 표준 흐름의 특정 시점에 커스텀 로직을 끼워 넣는 확장 포인트 |
| BDC | Batch Data Communication | SAP 화면 입력을 스크립트처럼 자동화해서 데이터를 다건/단건 등록하는 기술 |
| EXIT | User Exit / Customer Exit | BADI보다 오래된 형태의 확장 포인트 (구식 SAP에 자주 쓰임) |
핵심은 목적입니다. BAPI는 표준 객체를 다루는 도구, BADI/EXIT는 표준 흐름에 내 로직을 추가하는 확장 포인트, BDC는 화면 자동화 도구입니다.
BAPI — SAP 표준을 다루는 펑션
BAPI는 SAP가 표준으로 제공하는 비즈니스 객체 처리 펑션 모음입니다. 자재·구매 오더·고객·송장 등 SAP의 핵심 비즈니스 객체에 대해 생성·조회·변경·삭제(CRUD) 작업을 표준화된 인터페이스로 제공합니다.
특징
- SAP Standard 객체에만 사용 가능 (CBO 객체에는 별도 펑션을 직접 만들어야 함)
- 외부 시스템 연동 시 표준 진입점으로 자주 활용
- 트랜잭션 화면을 거치지 않고 직접 데이터 조작 가능
- 호출 후 반드시
BAPI_TRANSACTION_COMMIT또는BAPI_TRANSACTION_ROLLBACK으로 트랜잭션 마무리 필요
자주 쓰는 BAPI 예시
BAPI_PO_CREATE1— 구매 오더 생성BAPI_MATERIAL_SAVEDATA— 자재 마스터 생성·변경BAPI_USER_GET_DETAIL— 사용자 정보 조회BAPI_BATCH_CREATE— 배치 생성
BADI — 표준 흐름에 내 로직 끼워 넣기
BADI는 SAP 표준 트랜잭션의 특정 시점(저장 직전, 검증 시점, 출력 직전 등)에 사용자가 만든 커스텀 로직을 호출해주는 확장 메커니즘입니다.
특징
- 표준 코드를 직접 수정하지 않고 확장 가능 (수정 보조자 / Modification Assistant 영향 없음)
- SAP 업그레이드 시에도 BADI 구현은 그대로 유지됨
- 객체 지향(OOP) 기반 — 인터페이스를 구현하는 클래스 형태
- 표준 트랜잭션 안에서 정의된 시점에만 호출됨
사용 예
- 자재 마스터 저장 시 회사 표준 명명 규칙 검증
- 구매 오더 생성 시 추가 필드 자동 채우기
- 송장 출력 직전 부가 정보 추가
BADI 찾는 방법은 별도 글에서 다룰 예정입니다 — 보통 SE18(BAdI Builder), SE19(구현) 트랜잭션을 사용합니다.
BDC — 화면 입력 자동화
BDC는 사용자가 SAP 화면에서 손으로 입력하는 동작을 스크립트처럼 자동화해서 데이터를 다건 또는 단건으로 등록하는 기술입니다.
특징
- Standard와 CBO 화면 모두 지원 (BAPI는 Standard만)
- 표준 BAPI가 없는 트랜잭션도 BDC로 자동화 가능
- 화면 흐름을 그대로 따라가기 때문에 트랜잭션 검증 로직이 그대로 작동
- 단점: 화면이 바뀌면 BDC 스크립트도 같이 수정해야 함
- 주로 FI 모듈에서 자주 사용 (BAPI 커버리지가 부족한 영역)
사용 예
- 표준 BAPI가 없는 화면을 통한 데이터 등록
- 레거시 데이터 일괄 마이그레이션
- 사용자 시점 검증을 그대로 활용해야 하는 케이스
EXIT — 구식 확장 포인트
EXIT(User Exit / Customer Exit)는 BADI 이전 세대의 확장 메커니즘입니다.
특징
- 함수 모듈 또는 INCLUDE 형태
- 객체 지향이 아닌 절차적(procedural) 구조
- BADI보다 위치·이름이 고정적이라 유연성 떨어짐
- 신규 SAP 버전에서는 가능하면 BADI를 우선 사용하는 것이 권장됨
기존 시스템을 유지보수하다 보면 EXIT 구현을 마주칠 일이 종종 있어서 개념은 알아두는 것이 좋습니다.
한 눈에 보는 선택 가이드
| 상황 | 선택 |
|---|---|
| SAP 표준 데이터(자재/PO/고객 등)를 외부에서 조작 | BAPI |
| 표준 트랜잭션 흐름에 검증·자동입력 로직 추가 | BADI (또는 EXIT) |
| BAPI가 없는 화면을 자동화하거나 일괄 등록 | BDC |
| 레거시 시스템 유지보수 중 발견된 기존 확장 | EXIT |
요약
- BAPI — SAP 표준 객체 다루는 펑션. 외부 연동·일괄 처리에 핵심
- BADI — 표준 흐름에 커스텀 로직을 끼워 넣는 확장 포인트. 객체지향
- BDC — 화면 자동화. Standard·CBO 모두 가능, FI에서 자주 사용
- EXIT — BADI 이전 세대 확장. 구식이지만 레거시에 종종 있음
이 네 개 개념을 구분하기 시작하면 SAP ABAP 글을 볼 때 "왜 여기서 BAPI를 쓰지 않고 BDC를 썼지?", "이건 BADI 구현이구나" 같은 판단이 빠르게 됩니다.
Disclaimer — 이 포스트는 실무 정리 노트를 바탕으로 AI 보조로 정리되었습니다. SAP 시스템 버전과 회사 정책에 따라 추천 패턴이 다를 수 있으므로 적용 전 확인하시기 바랍니다.