T-Code, 테이블에 이어 정리 시리즈 세 번째는 API입니다. 외부 시스템과 SAP을 연동하는 인터페이스 개발자에게는 사실 이게 본론입니다. 화면으로 하던 일을 프로그램으로 시키려면 결국 API를 호출해야 하니까요. 저도 레거시 ERP와 SAP을 연결하는 인터페이스를 개발하면서 “이 업무는 어떤 BAPI/OData로 처리하는가”를 찾는 데 가장 많은 시간을 썼습니다. 이 글에서는 SAP API의 종류부터 모듈별 대표 API, 그리고 S/4HANA 표준 OData API까지 정리합니다.
SAP API의 종류부터 구분하자
SAP 연동 방식은 크게 네 가지입니다.
- BAPI (Business API): SAP가 공식 제공하는 표준 함수 모듈입니다. RFC(원격 호출)가 가능해서 외부 시스템에서 직접 부를 수 있습니다. 이름이 BAPI_로 시작하며, SE37에서 테스트할 수 있습니다. 클래식 환경의 표준 연동 수단입니다.
- RFC 함수: BAPI가 아니어도 RFC 가능 속성이 켜진 함수는 외부 호출이 됩니다. 다만 표준 보장이 없는 내부 함수를 쓰는 것은 업그레이드 리스크가 있습니다.
- IDoc: 전자문서 교환용 비동기 메시징입니다. 대량 배치성 연동(마스터 배포, 주문 수신)에 여전히 많이 쓰입니다.
- OData API: S/4HANA 시대의 표준입니다. REST 기반 HTTP + JSON/XML로 호출하며, SAP가 공개한 표준 API 목록은 SAP Business Accelerator Hub(api.sap.com) 에서 검색할 수 있습니다. 신규 프로젝트, 특히 클라우드 환경이라면 OData가 1순위입니다.
어떤 것을 쓸지는 환경이 결정합니다. 온프레미스 ECC라면 BAPI/IDoc, S/4HANA(특히 클라우드)라면 표준 OData API가 기본값입니다.
모든 BAPI에 적용되는 대원칙: COMMIT
본론 전에 가장 중요한 것 하나. 대부분의 BAPI는 호출만으로는 DB에 반영되지 않습니다. 반드시 뒤에 커밋을 호출해야 합니다.
| 함수 | 용도 |
|---|---|
| BAPI_TRANSACTION_COMMIT | 커밋 (WAIT = ‘X’ 권장) |
| BAPI_TRANSACTION_ROLLBACK | 롤백 |
BAPI를 호출했는데 성공 메시지가 왔는데도 데이터가 없다면 십중팔구 커밋 누락입니다. 또한 BAPI의 RETURN 파라미터(메시지 테이블)를 반드시 검사해서 TYPE = ‘E’/’A’가 있으면 롤백하는 것이 기본 패턴입니다.
FI (재무회계) — 회계전표 API
| API | 설명 |
|---|---|
| BAPI_ACC_DOCUMENT_POST | 회계전표 전기 (FI 인터페이스의 핵심) |
| BAPI_ACC_DOCUMENT_CHECK | 전표 사전 검증 (전기 없이 오류만 체크) |
| BAPI_ACC_DOCUMENT_REV_POST | 전표 역분개 |
| BAPI_AP_ACC_GETOPENITEMS | 구매처 미결 아이템 조회 |
| BAPI_AR_ACC_GETOPENITEMS | 고객 미결 아이템 조회 |
| BAPI_GL_ACC_GETDETAIL | G/L 계정 상세 조회 |
BAPI_ACC_DOCUMENT_POST는 헤더(DOCUMENTHEADER), G/L 라인(ACCOUNTGL), 구매처 라인(ACCOUNTPAYABLE), 고객 라인(ACCOUNTRECEIVABLE), 세금 라인(ACCOUNTTAX), 금액(CURRENCYAMOUNT)을 구조별로 나눠 받는 방식이라 처음엔 복잡해 보이지만, 라인 번호(ITEMNO_ACC)로 각 구조를 연결한다는 원리만 잡으면 됩니다. 실무 팁 하나: 본전기 전에 BAPI_ACC_DOCUMENT_CHECK로 먼저 검증하는 2단계 설계를 하면 오류 대응이 훨씬 깔끔해집니다.
거래처/비즈니스 파트너
| API | 설명 |
|---|---|
| BAPI_BUPA_CREATE_FROM_DATA | 비즈니스 파트너 생성 |
| BAPI_BUPA_CENTRAL_CHANGE | BP 일반 데이터 변경 |
| BAPI_BUPA_ADDRESS_CHANGE | BP 주소 변경 |
| API_BUSINESS_PARTNER (OData) | S/4HANA 표준 BP API (조회/생성/변경) |
S/4HANA에서 거래처는 비즈니스 파트너로 통합됐기 때문에, 신규 인터페이스라면 처음부터 API_BUSINESS_PARTNER(OData)를 검토하는 것이 좋습니다. 클래식 구매처/고객 BAPI들은 환경에 따라 제약이 있습니다.
MM (자재/구매)
| API | 설명 |
|---|---|
| BAPI_MATERIAL_SAVEDATA | 자재 마스터 생성/변경 |
| BAPI_MATERIAL_GET_DETAIL | 자재 상세 조회 |
| BAPI_PO_CREATE1 | 구매오더 생성 |
| BAPI_PO_CHANGE | 구매오더 변경 |
| BAPI_PR_CREATE | 구매요청 생성 |
| BAPI_GOODSMVT_CREATE | 입출고(자재이동) 생성 — MIGO의 API 버전 |
| BAPI_INCOMINGINVOICE_CREATE | 송장검증 생성 — MIRO의 API 버전 |
| API_PURCHASEORDER_PROCESS_SRV (OData) | S/4HANA 표준 구매오더 API |
| API_MATERIAL_DOCUMENT_SRV (OData) | S/4HANA 표준 자재문서 API |
BAPI_GOODSMVT_CREATE는 이동 유형(GM_CODE + BWART)에 따라 입고/출고/이전이 모두 처리되는 만능 API라서 MM 연동의 중심입니다.
SD (영업/판매)
| API | 설명 |
|---|---|
| BAPI_SALESORDER_CREATEFROMDAT2 | 판매오더 생성 (SD 연동의 표준) |
| BAPI_SALESORDER_CHANGE | 판매오더 변경 |
| BAPI_SALESORDER_GETSTATUS | 판매오더 상태 조회 |
| BAPI_OUTB_DELIVERY_CREATE_SLS | 판매오더 기반 출하 생성 |
| BAPI_OUTB_DELIVERY_CONFIRM_DEC | 출하 확정(피킹/수량 확정) |
| BAPI_BILLINGDOC_CREATEMULTIPLE | 대금청구 생성 |
| API_SALES_ORDER_SRV (OData) | S/4HANA 표준 판매오더 API |
| API_BILLING_DOCUMENT_SRV (OData) | S/4HANA 표준 빌링 API |
PP (생산)
| API | 설명 |
|---|---|
| BAPI_PRODORD_CREATE | 생산오더 생성 |
| BAPI_PRODORD_RELEASE | 생산오더 릴리스 |
| BAPI_PRODORDCONF_CREATE_TT | 작업 확인(실적 입력) |
| BAPI_PRODORD_GET_DETAIL | 생산오더 상세 조회 |
| API_PRODUCTION_ORDER_2_SRV (OData) | S/4HANA 표준 생산오더 API |
MES(생산실행시스템)와 SAP을 연동하는 프로젝트에서는 BAPI_PRODORDCONF_CREATE_TT(실적 확인)가 인터페이스의 핵심이 됩니다.
HR/HCM (인사)
| API | 설명 |
|---|---|
| BAPI_EMPLOYEE_GETDATA | 사원 기본 데이터 조회 |
| HR_READ_INFOTYPE | 인포타입 읽기 (HR 데이터 접근의 표준 함수) |
| HR_INFOTYPE_OPERATION | 인포타입 생성/변경/삭제 |
| BAPI_ABSENCE_CREATE | 결근(휴가) 생성 |
앞선 테이블 글에서 언급했듯 HR 데이터는 PA 테이블을 직접 SELECT하지 말고 반드시 이런 표준 함수를 경유해야 합니다. 권한 체크와 데이터 무결성이 함수 안에 들어 있기 때문입니다.
공통/기술 API
| API | 설명 |
|---|---|
| RFC_READ_TABLE | 테이블 범용 조회 (편하지만 보안·성능상 운영 사용은 신중히) |
| BAPI_COMPANYCODE_GETLIST | 회사코드 목록 |
| BAPI_EXCHANGERATE_GETDETAIL | 환율 조회 |
| BAPI_CURRENCY_CONV_TO_INTERNAL / EXTERNAL | 통화 금액 내부/외부 형식 변환 |
| CONVERSION_EXIT_ALPHA_INPUT / OUTPUT | 선행 0 채우기/제거 (자재번호·전표번호 처리 필수) |
CONVERSION_EXIT_ALPHA는 API라기보다 변환 함수지만, 외부 시스템과 데이터를 주고받을 때 “SAP에 넣을 땐 선행 0을 채우고, 내보낼 땐 뗀다”는 규칙을 모르면 조회가 안 되는 사태를 겪게 되어 함께 정리했습니다.
필요한 API를 찾는 방법
- SAP Business Accelerator Hub (api.sap.com): S/4HANA 표준 OData/SOAP API의 공식 카탈로그입니다. 업무명으로 검색하면 API 스펙, 필드, 샘플 페이로드까지 나옵니다. 신규 개발이라면 여기부터 검색하세요.
- BAPI 탐색기 (T-Code: BAPI): 업무 오브젝트 트리에서 모듈별 BAPI를 탐색할 수 있습니다.
- SE37에서 테스트: 찾은 BAPI는 SE37의 테스트 기능으로 파라미터를 직접 넣어 실행해보는 것이 스펙 문서 읽기보다 빠릅니다. 단, 테스트 실행 시 커밋이 붙으면 실제 데이터가 생기니 개발 서버에서만 하세요.
- ST05 트레이스 역추적: 표준 화면으로 처리하면서 트레이스를 걸어 내부에서 호출되는 함수를 찾아내는 방법도 있습니다.
마치며
인터페이스 개발의 절반은 “맞는 API를 찾는 일”이고, 나머지 절반은 “RETURN 메시지와 싸우는 일”이라고 해도 과언이 아닙니다. 표로 정리했지만 결국 손에 익는 것은 SE37에서 직접 넣어보고 오류를 겪은 API들입니다. 다음 글에서는 이 중 FI 전표 인터페이스(BAPI_ACC_DOCUMENT_POST와 OData 방식)를 실제 개발 관점에서 자세히 다뤄보겠습니다. 빠진 API나 잘못된 내용이 있으면 댓글로 알려주세요.