RFC(Remote Function Call)

j_wisdom_h·2025년 6월 9일
0

SAP

목록 보기
13/19
post-thumbnail

1. SAP RFC란 무엇인가?

RFC(Remote Function Call)는 원격 시스템에 있는 SAP 기능(함수 모듈)을 호출할 수 있는 메커니즘입니다. 복잡한 연동 모듈 없이도 SAP 시스템의 기능을 외부에서 직접 실행할 수 있는 장점이 있습니다.

예를 들어:

  • 웹에서 입력한 정보를 SAP 기능과 연결
  • 외부 시스템과 SAP 간의 실시간 연동
  • BAPI, IDoc 등에서도 사용됨

2. RFC 개발 환경 및 필수 설정

RFC 개발을 위해 다음과 같은 환경 설정이 필요합니다.

필수 T-Code 및 구성 요소

T-Code설명
SE37펑션 모듈 생성 및 관리
SM59RFC Destination (원격 접속 정보) 설정

설정 순서

  1. 펑션 모듈 생성: SE37에서 구현할 기능을 정의합니다.
  2. 펑션 그룹 지정: 펑션 모듈은 반드시 펑션 그룹에 소속되어야 하며, 보통 Z로 시작하는 그룹명을 사용합니다.
  3. RFC Destination 설정: SM59에서 외부 시스템의 접속 정보(IP, 포트, 사용자 ID 등)를 입력합니다.

3. RFC 펑션 모듈 생성 및 구현

RFC용 펑션 모듈을 구현할 때 핵심은 다음과 같습니다:

  • Remote-Enabled Module 옵션 체크 (중요!)
  • 인터페이스 정의 시 Pass by Value 사용 권장
  • 내부 로직은 일반 펑션 모듈과 동일

🔧 Remote-Enabled Module 옵션 (SE37에서 설정)
SAP에서 RFC를 위한 펑션 모듈을 만들 때, SE37에서 반드시 설정해야 하는 항목이 있습니다.

펑션 모듈을 생성하거나 수정할 때, 상단의 속성 중에 다음과 같은 라디오 버튼(Radio Button) 형태의 옵션이 나옵니다:

  • Normal Function Module (기본값)

  • Remote-Enabled Module ✅ (✔️ 이걸 선택해야 RFC 가능!)

  • Update Module


✅ Pass by Value란?
Pass by Value는 값 자체를 복사해서 전달하는 방식입니다.

즉, 외부 시스템이 어떤 데이터를 SAP로 보낼 때, 그 데이터의 복사본이 SAP로 전달되고, SAP 내에서 그 값을 수정해도 원래 값(외부 시스템의 값)은 바뀌지 않습니다.


📌 RFC에서 Pass by Value를 써야 하는 이유

데이터 일관성 유지: 외부 시스템의 원본 데이터를 보호할 수 있습니다.

보안성과 안정성 향상: 의도치 않게 외부 데이터를 변경하는 위험 방지

RFC에서는 기본적으로 권장되는 방식

  VALUE(NUM1) TYPE I

위처럼 VALUE(...)를 쓰면 Pass by Value로 설정된 것입니다.
SE37의 파라미터 설정 화면에서 Pass Value 체크박스를 체크해도 같은 의미입니다.

4. SE37 설정 화면 요약

1. 펑션 모듈 생성

  • 트랜잭션 코드: SE37

  • 상단 메뉴에서 Function Module → Create 선택

  • Function Module Name: Z로 시작하는 이름 권장 (예: Z_MY_RFC_MODULE)

  • Function Group: 기존 그룹 또는 새 그룹 입력

2. Attributes 탭에서 Remote-Enabled 설정

Processing Type

✅ 반드시 Remote-Enabled Module 선택 (라디오 버튼)

이 설정이 되어 있어야 RFC 호출 가능

3. Import / Export / Tables 탭에서 Pass by Value 설정

항목설명
Parameter NameNUM1, NUM2, SUM 등 원하는 변수명 입력
Type SpecType / Like 선택 (보통은 Type 사용)
Associated Type예: I (정수), CHAR20 (문자열), 구조 타입 등
Pass Value✅ 체크 시 Pass by Value로 값 복사 방식 전달 (RFC에서 매우 중요!)

Pass Value 체크박스가 체크되어 있어야 원격 호출 시 복사 방식으로 값이 전달됨

체크하지 않으면 Pass by Reference가 되어 의도치 않게 외부 데이터가 변경될 수 있음

SUM1 = NUM1 + NUM2.


----------------------------------------
| Function Module: Z_MY_RFC_MODULE     |
----------------------------------------
| Processing Type:                    |
|  ( ) Normal                         |
|  (•) Remote-Enabled Module  ✅       |
|  ( ) Update Module                 |
----------------------------------------

[Import Parameters]
| Name  | Type | Type Spec | Assoc. Type | Pass Value |
|-------|------|-----------|--------------|-------------|
| NUM1  | I    | Type      | I            |   ✅        |
| NUM2  | I    | Type      | I            |   ✅        |

[Export Parameters]
| Name  | Type | Type Spec | Assoc. Type | Pass Value |
|-------|------|-----------|--------------|-------------|
| SUM1  | I    | Type      | I            |   ✅        |

5. RFC 호출 및 활용 사례

SAP ABAP에서는 RFC를 다음과 같이 호출합니다:

CALL FUNCTION 'Z_ADD_NUMBERS'
  DESTINATION 'RFC_DEST_ID'
  EXPORTING
    NUM1 = lv_num1
    NUM2 = lv_num2
  IMPORTING
    SUM1 = lv_sum1.

"RFC_DEST_ID라는 이름의 외부 시스템에 접속해서
거기에 있는 Z_ADD_NUMBERS라는 Function Module을 호출하고,
두 숫자(NUM1, NUM2)를 전달해 덧셈 결과(SUM1)를 받아와라."

외부 시스템에서 이 펑션을 RFC로 호출하면, SAP는 결과를 계산해 반환합니다.

항목설명
ExceptionRFC 실행 중 발생 가능한 오류 상황을 미리 정의하여, 호출 측에서 오류를 감지 가능하게 함
Validation외부 입력값의 형식, 값, 누락 등을 사전에 검사하여 잘못된 데이터 유입을 차단

✅ RFC 예외 처리 (Exception Handling)

✔️ 예시 코드

IF NUM1 IS INITIAL OR NUM2 IS INITIAL.
  RAISE INPUT_MISSING.
ENDIF.

IF NUM1 < 0 OR NUM2 < 0.
  RAISE INVALID_INPUT.
ENDIF.

위 예시에서 INPUT_MISSING, INVALID_INPUT은 SE37의 Exception 탭에서 미리 정의한 사용자 정의 예외입니다.

✅ 자주 사용하는 사용자 정의 Exception 이름

RFC Function Module의 Exceptions 탭에 등록하여 사용할 수 있는 대표적인 예외 이름입니다.
직관적인 이름을 정의하면 외부 시스템에서도 오류 상황을 명확하게 파악할 수 있습니다.

Exception 이름설명
INPUT_MISSING필수 입력값이 누락된 경우
INVALID_INPUT형식이 잘못된 값이 입력된 경우
AUTHORIZATION_ERROR권한이 부족한 경우
NO_DATA_FOUND조회 결과가 없을 때
SYSTEM_FAILURE시스템 오류, DB 연결 실패 등
CUSTOM_ERROR기타 사용자 정의 예외 상황

6. RFC 사용 시 고려사항 및 라이센스 문제

⚠️ 주의사항

라이센스 문제
RFC 호출은 SAP 사용자로 인식되기 때문에 호출 주체에 따라 라이센스 비용이 부과됩니다.
단순 데이터 조회 목적이라면 RFC 대신 DB 직접 연동이 더 경제적일 수 있습니다.

보안 이점
DB 정보를 직접 노출하지 않기 때문에 RFC 방식이 보안적으로 더 안전합니다.
외부에서 SAP 시스템을 직접 접근하는 위험을 줄일 수 있습니다.

RFC는 외부 시스템이 SAP의 DB에 직접 접근하지 않고,
SAP가 제공하는 기능(RFC 모듈)을 호출하는 방식이라
SAP 내부 구조나 DB 정보가 외부에 노출되지 않아 보안상 안전합니다.

7. SM59

RFC Destination(원격 호출 접속 정보)를 관리하는 트랜잭션 코드

profile
뚜잇뚜잇

0개의 댓글