[SAP] RFC modules, only parameters with passare allowed
RFC에서 "Pass by Value(값 전달)"만 허용된다는 것은, 데이터를 주고받을 때 '원본의 복사본'을 만들어 보내야 한다는 뜻입니다.
일반적인 ABAP Function Module(로컬용)은 메모리 주소를 공유하는 'Pass by Reference(참조 전달)'가 기본이지만,
RFC는 서로 다른 시스템 간의 통신이기 때문에 메모리를 공유할 수 없어 이 제약이 생깁니다.
1. 참조 전달(Reference) vs 값 전달(Value) 비교
이해를 돕기 위해 파일 공유에 비유해 보겠습니다.
| 구분 | 참조 전달 (Pass by Reference) | 값 전달 (Pass by Value) |
| 비유 | 구글 문서(Google Docs) 링크 공유 | 워드(.docx) 파일을 메일로 첨부 |
| 방식 | 메모리 주소(위치)만 알려줌 | 데이터 전체를 복사해서 새로 생성 |
| 특징 | 같은 데이터를 같이 수정함 (빠름) | 원본과 복사본이 분리됨 (안전/독립적) |
| RFC 허용 | 불가능 (상대 시스템이 내 메모리에 못 들어옴) | 필수 (네트워크를 타고 복사본이 넘어가야 함) |
2. RFC에서 왜 '값 전달'만 될까?
RFC(Remote Function Call)는 이름 그대로 '원격' 호출입니다.
- System A에서 System B를 부를 때, System A의 메모리 번지수(예: 0x1234)를 넘겨줘 봤자 System B는 그 위치에 접근할 권한이 없습니다.
- 따라서 호출하는 시점에 System A가 가진 데이터를 패키징(Serialization)해서 네트워크를 통해 System B로 통째로 복사해서 전달해야 합니다. 그래서 반드시 'Value' 옵션을 체크해야 하는 것입니다.
3. 실제 RFC 설정의 의미
함수 모듈의 Import, Export, Changing 탭에 있는 'Pass Value' 체크박스를 누르는 행위는 SAP 시스템에 다음과 같은 명령을 내리는 것과 같습니다.
"이 파라미터는 메모리 주소를 공유하지 말고, 네트워크를 타고 넘어갈 수 있게 별도의 복사본(Value)으로 처리해라."
4. 주의할 점 (성능 및 설계)
- 데이터 오버헤드: 'Pass by Value'는 데이터를 복사하기 때문에, 데이터 양이 아주 많으면(예: 수십만 건의 Internal Table) 메모리 사용량이 순간적으로 늘어나고 네트워크 전송 속도가 느려질 수 있습니다.
- TABLES 탭의 특이점: TABLES 탭에 정의된 테이블은 명시적인 체크박스가 없더라도 RFC로 설정되는 순간 SAP가 내부적으로 'Pass by Value'로 처리합니다.
- 최신 권장사항: 최근 SAP 가이드라인(BAPI 등)에서는 TABLES 탭 대신 Import/Export 탭에서 Deep Structure(구조체 안에 테이블이 있는 형태)를 사용하고 'Pass Value'를 체크하는 방식을 더 권장합니다.
결론적으로, RFC 개발 시 "Pass by Value" 에러가 난다면, 파라미터 탭에서 'Pass Value' 체크박스가 누락되었는지 확인하시면 됩니다.
'ERP(SAP)' 카테고리의 다른 글
| [SAP SD] Sold-to Party / Shipt-to-Party / Bill-to Party / Payer 개념 정리 (0) | 2026.05.20 |
|---|---|
| 📅 SAP 날짜·주차 계산 함수(Function) 완벽 가이드 (0) | 2026.05.06 |
| [SAP] OData API를 Java와 연동/호출 예제 (0) | 2026.04.28 |
| SAP BAPI의 모든 것: 개념부터 S/4HANA 실무까지 (0) | 2026.04.23 |
| [MM] SAP 수입 프로세스에서 제비용 원가 반영 이슈와 개선 방안 (0) | 2026.04.22 |
