본문 바로가기
ABAP 문법 & 기법

[SAP ABAP] RFC 펑션 모듈 종류 — Normal · Remote-Enabled 차이와 선택 기준 (SE37)

by Song.sh 2026. 5. 12.

SAP에서 인터페이스(I/F) 개발을 하다 보면 펑션 모듈(Function Module)을 만들 때 Processing Type 을 골라야 하는 순간이 옵니다. SE37 에서 펑션을 새로 만들 때 보이는 라디오 버튼 — Normal / Remote-Enabled / Update Module — 의 차이를 정확히 모르면 외부 시스템에서 호출이 안 되거나 SAP 내부에서 의도와 다르게 동작합니다.

 

가장 헷갈리는 부분은 "SAP가 보내는 거냐, 받는 거냐" 에 따라 Processing Type 선택이 반대가 된다는 점입니다.

송신은 외부 시스템이 SAP 펑션을 부르는 것이고,

수신은 SAP 안에서 펑션을 직접 부르는 것이라는 관점 전환이 필요합니다.

 

이 글은 RFC 펑션의 Processing Type 종류·선택 기준·개발 후 인계 절차 를 정리한 메모입니다.


핵심 원리

Function Module은 누가 호출하느냐 에 따라 Processing Type을 다르게 잡아야 합니다. 잘못 잡으면 외부에서 호출 시도 자체가 거부되거나(Remote-Enabled가 아닌 경우), 반대로 SAP 내부 호출이 RFC 오버헤드를 거치게 됩니다.

Processing Type 호출 주체 언제 쓰는가
Normal Function Module SAP 내부 ABAP 동일 시스템 내 프로그램에서 호출. 외부 접근 불가
Remote-Enabled Module (RFC) 외부 시스템 (MES, Web, 타 SAP 등) 외부에서 SAP 펑션을 호출해야 할 때. RFC 인터페이스 노출
Update Module SAP 내부 (LUW 단위) DB 변경을 트랜잭션 LUW 끝에서 한꺼번에 처리. COMMIT WORK 시점 동기

핵심은 "외부에서 부른다면 무조건 Remote-Enabled" 라는 점입니다. 내가 SAP에서 외부로 데이터를 보낸다고 해도, 결국 그 송신을 수행하는 펑션을 외부 시스템이 호출한다면 Remote-Enabled여야 합니다.


1단계 — SE37 Attributes 화면에서 Processing Type 선택

SE37 에서 펑션을 새로 만들거나 변경 모드로 열고 Attributes 탭으로 이동하면 Processing Type 라디오 버튼이 보입니다.

옵션 의미
Normal Function Module SAP 내부 사용 전용. 가장 일반적인 유형
Remote-Enabled Module RFC 노출. 외부에서 호출 가능. 인터페이스용 펑션은 모두 이 옵션
Update Module → 즉시 시작 LUW 종료 시 즉시 업데이트 (가장 일반적인 V1 업데이트)
Update Module → Immediate Start, No Restart 실패 시 재시작 안 함. 로그성 업데이트에 사용
Update Module → Start Delayed (V2) V1 업데이트가 끝난 후 비동기로 실행. 통계·요약성 작업용
Update Module → 일괄 실행 (Collective Run) 여러 LUW를 모았다가 한 번에 처리 (V3)
BasXML supported (체크박스) 웹 서비스로 노출할 때 체크. 일반 RFC에는 불필요

대부분의 인터페이스 개발은 Remote-Enabled Module 하나만 알면 됩니다. Update Module은 SAP 표준 트랜잭션 안에서 DB 업데이트를 분리할 때 쓰는 특수 옵션이라, 일반 CBO RFC에서는 사용 빈도가 낮습니다.


2단계 — 인터페이스 방향에 따른 분기

이 단계가 가장 헷갈리는 부분입니다. "SAP에서 보내냐, 받느냐" 가 아니라 "누가 펑션 호출 코드를 실행하느냐" 로 판단해야 합니다.

방향 펑션을 호출하는 쪽 선택할 타입
SAP → MES (송신) MES (외부 시스템) Remote-Enabled — MES가 SAP 펑션을 호출해서 데이터를 가져감
MES → SAP (수신) SAP 내부 (수신용 처리 펑션) Normal — SAP가 받은 데이터를 자체 펑션으로 처리
외부 Web → SAP Web 시스템 (외부) Remote-Enabled — Web에서 SAP 데이터를 조회·등록
SAP → 타 SAP 시스템 호출 측 SAP Remote-EnabledCALL FUNCTION ... DESTINATION 사용

판단 공식은 단순합니다 — 펑션 본체가 있는 시스템 기준으로, 그 펑션을 부르는 코드가 다른 시스템에 있으면 Remote-Enabled.


3단계 — Remote-Enabled 호출 흐름 이해

외부에서 SAP RFC를 호출하는 일반적인 흐름은 다음과 같습니다.

단계 위치 동작
1 외부 시스템 (MES 등) SAP RFC 클라이언트 라이브러리로 펑션 호출 요청
2 SAP Gateway RFC 접속 인증 (ID/PW) + 호출 라우팅
3 SAP RFC 펑션 파라미터 받기 → 비즈니스 로직 수행 → 결과 리턴
4 외부 시스템 리턴값 수신 → 후속 처리

SAP 측에서 RFC Destination 설정은 SM59 에서 확인·관리합니다. 반대로 외부 시스템이 SAP에 접속할 때 쓰는 RFC 계정(ID/PW)은 별도 관리되며, 보통 BC(Basis) 담당자에게 발급을 요청합니다.


4단계 — 개발 후 인계 정보 (타 시스템 담당자에게)

RFC를 만든 다음 외부 시스템 담당자(MES·Web 등)가 실제로 호출할 수 있도록 정보를 넘겨야 합니다.

전달할 정보 설명
펑션 모듈 이름 호출할 RFC 펑션의 정확한 이름 (예: Z_XX_INTERFACE)
SAP 접속 정보 시스템 호스트, 시스템 번호(System Number), 클라이언트(Client) 번호
RFC 접속 계정 (ID/PW) 신규 계정이면 BC 담당자에게 발급 요청. 기존 계정 재사용이면 그대로 전달
파라미터 명세 IMPORTING / EXPORTING / TABLES / EXCEPTIONS 각 항목과 데이터 타입
호출 예제·테스트 데이터 최초 연동 테스트용 샘플 입력값과 기대 출력값

ID/PW 발급 절차는 사이트마다 다르므로 신규 계정이 필요한 상황이면 BC 담당자에게 미리 협의해두는 게 안전합니다. 운영 이송 직전에 계정 이슈로 인터페이스가 막히는 사고가 의외로 자주 발생합니다.


흔히 빠뜨리는 함정

Normal로 만들고 외부에서 호출 시도

외부에서 호출했을 때 펑션이 RFC로 노출되지 않으면 SAP Gateway 단계에서 거부됩니다. 에러 메시지로는 "function not remote-enabled" 형태가 나오는데, 이 경우 SE37에서 Attributes 탭의 Remote-Enabled 옵션이 켜져있는지 먼저 확인.

Remote-Enabled로 변경 후 활성화(Activation) 누락

라디오 버튼만 바꾸고 저장만 한 채로 두면 메타데이터는 바뀌어도 호출 시점 정의가 갱신되지 않습니다. 반드시 활성화(Activation) 까지 완료해야 외부에서 인식됩니다.

EXPORTING 파라미터에 비-Character 타입 사용

RFC 펑션은 일부 ABAP 전용 타입(예: 깊은 구조, 참조 변수)을 외부 시스템에 그대로 넘기지 못합니다. 외부와 주고받는 파라미터는 CHAR / NUMC / DEC 등 표준 DDIC 타입 + DDIC 구조체로만 정의해야 합니다.

트랜스포트 누락

RFC 펑션을 새로 만들면 펑션 모듈 자체 외에도 펑션 그룹 / DDIC 구조체 / 인클루드 가 함께 생성됩니다. 운영 이송 시 펑션 모듈 하나만 담아서 보내면 호출 시점에 구조체를 못 찾아 덤프 발생. 펑션 그룹 단위로 모두 포함했는지 점검 필요.


요약

단계 위치 할 일
1 SE37 Attributes Processing Type 선택 (대부분 Remote-Enabled)
2 방향 판단 호출하는 쪽이 외부면 Remote-Enabled, SAP 내부면 Normal
3 SM59 RFC Destination 확인 + 외부 시스템 인증 흐름 이해
4 개발 후 인계 펑션명·접속 정보·ID/PW·파라미터 명세 전달 (신규 계정은 BC에 요청)
5 운영 이송 펑션 그룹·DDIC 구조체·인클루드까지 동반 이송 확인

Function Module Processing Type 선택은 한 번 잘못 잡으면 나중에 호출 자체가 막혀서 인터페이스 전체가 재작업되는 경우가 종종 있습니다. "내가 보내는지 받는지" 가 아니라 "어느 쪽에서 펑션을 부르는 코드가 돌아가는지" 로 판단하는 습관을 들이면 헷갈리지 않습니다.


Disclaimer — 이 포스트는 실무 정리 노트를 바탕으로 AI 보조로 정리되었습니다. SAP 버전·시스템 구성·인터페이스 패턴(EAI / PI / 직접 RFC 등)에 따라 세부 절차가 다를 수 있으므로 운영 환경 적용 전 개발 시스템에서 동작을 확인하시기 바랍니다.