청킹으로 Cloud Storage에 파일 업로드

1. 소개

이 Codelab에서는 서비스 계정을 만들고 이를 사용하여 Google Cloud용 ABAP SDK에서 제공하는 클라이언트 키 및 커뮤니케이션 맵 테이블을 구성하고 ABAP에서 Cloud Storage JSON API를 호출하는 단계를 설명했습니다.

이 Codelab에서는 다음 Google Cloud 서비스를 사용합니다.

  • Compute Engine
  • 네트워크 서비스
  • Cloud Shell
  • Cloud Storage JSON API V1

참고: 새 Google Cloud 프로젝트를 만들면 Cloud Storage를 비롯한 특정 API 및 서비스가 자동으로 사용 설정됩니다. 이를 통해 이 강력한 스토리지 솔루션을 즉시 활용할 수 있습니다. 따라서 추가 단계로 사용 설정할 필요가 없습니다.

기본 요건

빌드할 항목

ABAP SDK for Google Cloud를 사용하여 SAP 시스템에서 다음 프로그램을 만듭니다.

  • Cloud Storage 버킷을 만듭니다.
  • 애플리케이션 서버에서 파일을 읽고 만든 Cloud Storage 버킷에 업로드합니다.

2. 요구사항

  • 브라우저(Chrome, Firefox 등)
  • 결제가 사용 설정된 Google Cloud 프로젝트 또는 Google Cloud Platform용 90일 무료 체험판 계정 만들기
  • 시스템에 설치된 SAP GUI (Windows 또는 Java) 노트북에 SAP GUI가 이미 설치되어 있는 경우 VM 외부 IP 주소를 애플리케이션 서버 IP로 사용하여 SAP에 연결합니다. Mac을 사용하는 경우 링크에서 Java용 SAP GUI를 설치할 수도 있습니다.

3. 시작하기 전에

6757b2fb50ddcc2d.png

  • 다음 명령어를 실행하여 계정을 인증하고 기본 프로젝트를 abap-sdk-poc로 설정합니다. 영역 us-west4-b를 예로 들 수 있습니다. 필요한 경우 다음 명령어에서 프로젝트와 영역을 원하는 대로 변경하세요.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b
  • ABAP SDK for Google Cloud가 설치된 SAP 시스템에 액세스할 수 있어야 합니다.
  • 이 Codelab을 진행하기 전에 Codelab 1 (Google Cloud Platform에 ABAP Platform Trial 1909 설치 및 Google Cloud용 ABAP SDK 설치)과 Codelab 2 (Compute Engine VM에 호스팅된 SAP용 토큰을 사용하여 ABAP SDK 인증 구성)을 완료해야 합니다.
  • Codelab 1과 Codelab 2를 완료했다면 Google Cloud에 ABAP Platform Trial 1909 시스템과 인증 및 연결에 필요한 설정이 프로비저닝되었을 것입니다.
  • Codelab 1과 Codelab 2를 완료하지 않으면 이 Codelab에 제공된 단계를 실행하는 데 필요한 인프라와 연결이 모두 갖춰지지 않습니다. 따라서 이 Codelab을 진행하기 전에 Codelab 1과 Codelab 2를 완료해야 합니다.

4. 스토리지 객체 사용자 역할이 있는 서비스 계정 만들기

필요한 역할이 있는 서비스 계정을 만들려면 다음 단계를 따르세요.

  1. Cloud Shell 터미널에서 다음 명령어를 실행합니다.
gcloud iam service-accounts create abap-sdk-storage-tester \
--display-name="Service Account for Cloud Storage"
  1. 이제 위 단계에서 만든 서비스 계정에 필요한 역할을 추가합니다.
gcloud projects add-iam-policy-binding abap-sdk-poc \
--member='serviceAccount:abap-sdk-storage-tester@abap-sdk-poc.iam.gserviceaccount.com' \
--role='roles/storage.objectUser'

위 명령어는 abap-sdk-poc를 Google Cloud 프로젝트의 자리표시자로 사용합니다. abap-sdk-poc를 프로젝트 ID로 바꿉니다.

  1. 역할이 추가되었는지 확인하려면 IAM 페이지로 이동합니다. 아래와 같이 생성한 서비스 계정이 할당된 역할과 함께 표시됩니다.

92d75ce1554efb69.png

5. 클라이언트 키 구성 만들기

이제 Google Cloud 측에서 기본 요건을 설정했으므로 SAP 측에서 구성을 진행할 수 있습니다.

인증 및 연결 관련 구성을 위해 ABAP SDK for Google Cloud는 /GOOG/CLIENT_KEY 테이블을 사용합니다.

/GOOG/CLIENT_KEY 테이블의 구성을 유지하려면 다음 단계를 따르세요.

  1. SAP GUI에서 트랜잭션 코드 SPRO를 입력합니다.
  2. SAP 참조 IMG를 클릭합니다.
  3. ABAP SDK for Google Cloud > 기본 설정 > 클라이언트 키 구성을 클릭합니다.
  4. 필드에 다음 값을 유지합니다.

필드

Google Cloud 키 이름

TEST_STORAGE

Google Cloud 서비스 계정 이름

abap-sdk-storage-tester@abap-sdk-poc.iam.gserviceaccount.com

Google Cloud 범위

https://www.googleapis.com/auth/cloud-platform

프로젝트 ID

abap-sdk-poc

승인 클래스

/GOOG/CL_AUTH_GOOGLE

다른 모든 입력란은 비워 둡니다.

6. Z 보고서를 만들어 Cloud Storage에 버킷 만들기

  1. SAP 시스템에 로그인합니다.
  2. 트랜잭션 코드 SE38로 이동하여 ZDEMO_CREATE_BUCKET.라는 이름으로 보고서 프로그램을 만듭니다.
  3. 열리는 팝업에서 아래와 같이 세부정보를 입력합니다.

93f3edb7bbb5c3c4.png

다음 팝업에서 원하는 대로 로컬 객체를 선택하거나 패키지 이름을 입력합니다.

  1. ABAP 편집기에서 다음 코드를 추가합니다.
DATA lv_json_response TYPE string.
DATA ls_input         TYPE /goog/cl_storage_v1=>ty_001.
DATA lo_storage       TYPE REF TO /goog/cl_storage_v1.

TRY.

    lo_storage = NEW #( iv_key_name = 'TEST_STORAGE' ).
        
        " Bucket Name should be globally unique & permanent
    ls_input = VALUE #( name = 'newtest_bucket_abapsdk_gcloud001' ).  
    lo_storage->insert_buckets
                ( EXPORTING iv_q_project = CONV #( lo_storage->gv_project_id )
                    is_input     = ls_input
          IMPORTING es_raw       = lv_json_response
                    es_output    = DATA(ls_output)
                    ev_ret_code  = DATA(lv_ret_code)
                    ev_err_text  = DATA(lv_err_text)
                    es_err_resp  = DATA(ls_err_resp) ).

    IF lo_storage->is_success( lv_ret_code ) = abap_true.
      cl_demo_output=>new(
        )->begin_section( 'Result:'
        )->write_text( 'Bucket was created:'
        )->next_section( 'JSON Response:'
        )->write_json( lv_json_response
        )->display( ).

    ELSE.
      DATA(lv_msg) = lv_ret_code && ':' && lv_err_text.
      cl_demo_output=>new(
        )->begin_section( 'Result:'
        )->write_text( 'Bucket creation failed;'
        )->next_section( 'Error:'
        )->write_json( lv_msg
        )->display( ).
    ENDIF.

  CATCH /goog/cx_sdk INTO DATA(lo_sdk_excp).
    lv_msg = lo_sdk_excp->get_text( ).
    MESSAGE lv_msg TYPE 'S' DISPLAY LIKE 'E'.
ENDTRY.
 

버킷 이름이 전역적으로 고유하지 않으면 버킷이 생성되지 않으므로 코드를 실행하기 전에 버킷에 고유한 이름을 사용하세요.

  1. 보고서를 저장하고 활성화합니다.
  2. 보고서를 실행합니다 (F8 누르기).

실행에 성공하면 아래와 같이 보고서 출력이 표시됩니다.

ff232fba9a4178fb.png

7. Z 보고서를 만들어 애플리케이션 서버에서 파일을 읽고 Cloud Storage 버킷에 업로드

이 활동을 수행하기 전에 큰 텍스트 파일을 준비해야 합니다. 여기서는 이미 큰 텍스트 파일을 만들어 애플리케이션 서버에 업로드했습니다. 트랜잭션 코드 CG3Z를 사용하여 SAP 시스템의 애플리케이션 서버에 파일을 업로드할 수 있습니다.

이 예에서는 크기가 약 40MB인 텍스트 파일을 사용하며, 이 파일은 이미 /tmp 디렉터리의 애플리케이션 서버에 업로드되어 있습니다.

다음 링크를 사용하여 GitHub에서 이 폴더를 다운로드할 수도 있습니다. 샘플 파일

  1. SAP 시스템에 로그인합니다.
  2. 트랜잭션 코드 SE38로 이동하여 ZDEMO_UPLOAD_FILE.라는 이름으로 보고서 프로그램을 만듭니다.
  3. 열리는 팝업에서 아래와 같이 세부정보를 입력합니다.

19cbe6987bba58e4.png

다음 팝업에서 원하는 대로 로컬 객체를 선택하거나 패키지 이름을 입력합니다.

  1. ABAP 편집기에서 다음 코드를 추가합니다.
DATA lv_file_length TYPE i.
DATA lv_msg         TYPE string.
DATA lv_dset        TYPE string.
DATA lv_data        TYPE string.
DATA ls_data        TYPE xstring.
DATA lo_storage     TYPE REF TO /goog/cl_storage_v1.

" Read file data from the application server
DATA(dset) = '/tmp/sample_file.txt'.
OPEN DATASET dset FOR INPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc <> 0.
  MESSAGE 'Cannot opening/reading dataset' TYPE 'E'.
ENDIF.
DO.
  READ DATASET dset INTO lv_dset.
  IF sy-subrc <> 0.
    EXIT.
  ENDIF.

  CONCATENATE lv_data lv_dset INTO lv_data SEPARATED BY cl_abap_char_utilities=>newline.
  CLEAR lv_dset.

ENDDO.

CLOSE DATASET dset.

CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
  EXPORTING  text   = lv_data
  IMPORTING  buffer = ls_data
  EXCEPTIONS failed = 1
             OTHERS = 2.
IF sy-subrc <> 0.
  MESSAGE 'Conversion from string to xstring failed' TYPE 'E'.
ENDIF.

TRY.

    lo_storage = NEW #( iv_key_name = 'DEMO_STORAGE' ).

    lo_storage->add_common_qparam( iv_name = 'uploadType' iv_value = 'resumable' ).

    lo_storage->insert_objects( EXPORTING iv_q_name       = 'large_text_file_demo.txt'
                                          iv_p_bucket     = 'newtest_bucket_abapsdk_gcloud001'
                                          is_data         = ls_data
                                          iv_content_type = 'text/pdf'
                                IMPORTING es_output       = data(ls_output)
                                          ev_ret_code     = data(lv_ret_code)
                                          ev_err_text     = data(lv_err_text)
                                          es_err_resp     = data(ls_err_resp) ).

    IF lo_storage->is_success( lv_ret_code ) = abap_true.
      cl_demo_output=>new(
        )->begin_section( 'Result:'
        )->write_text( 'Object was uploaded successfully'
        )->write_text( 'Object Self Link:'
        )->write_text( ls_output-self_link
        )->display( ).
    ELSE.
      cl_demo_output=>new(
        )->begin_section( 'Error:'
        )->write_text( lv_msg
        )->display( ).
    ENDIF.
  CATCH /goog/cx_sdk INTO data(lo_sdk_excp).
    lv_msg = lo_sdk_excp->get_text( ).
    MESSAGE lv_msg TYPE 'S' DISPLAY LIKE 'E'.
    RETURN.
ENDTRY.

lo_storage->close( ).
  1. 보고서를 저장하고 활성화합니다.
  2. 보고서를 실행합니다 (F8 누르기).

실행에 성공하면 아래와 같이 보고서 출력이 표시됩니다.

c982bfcd07d7e487.png

아래와 같이 Cloud Storage 버킷으로 이동하여 파일이 업로드되었는지 확인할 수 있습니다.

90678b475e165adf.png

1886be610c63ed6b.png

8. ABAP SDK 코드를 사용하여 Cloud Storage에 파일 업로드 방법 설명

이 ABAP 프로그램은 기본적으로 Google Cloud Storage와 통합됩니다. 애플리케이션 서버에서 파일을 읽고 Storage API의 API 클라이언트 스텁에 파일 데이터를 전달하여 이전 보고서 프로그램에서 만든 스토리지 버킷에 업로드합니다.

파일을 업로드하기 위해 만든 보고서 프로그램은 다음을 실행합니다.

단계별 분석

연결 설정:

  • /GOOG/CL_STORAGE_V1 클래스를 사용하여 Google Storage 서비스에 대한 HTTP 연결을 설정합니다.

파일 데이터 읽기

  • OPEN DATASET를 실행하여 애플리케이션 서버의 파일을 읽은 다음 표준 SAP 함수 모듈 SCMS_STRING_TO_XSTRING를 호출하여 XSTRING 형식으로 변환합니다.

일반 쿼리 매개변수 추가

  • 청크 처리를 하려면 '중단한 부분부터 다시 시작할 수 있는' 업로드 유형을 선택해야 합니다. 기본적으로 재개 가능한 업로드를 선택하면 파일 데이터가 8MB 청크로 나뉘어 업로드됩니다. 그러나 개발자는 IV_P_CHUNK_SIZE 매개변수를 설정하여 이 청크 크기를 변경할 수 있지만 기본 설정을 사용하는 것이 좋습니다.
  • API 메서드에 '중단한 부분부터 다시 시작할 수 있는' 업로드 옵션을 선택해야 한다고 알리기 위해 ADD_COMMON_QPARAM 메서드를 호출하고 uploadTyperesumable.로 전달합니다.

객체 삽입

  • 다음 매개변수를 전달하여 INSERT_OBJECTS 메서드를 호출합니다.
  • IV_Q_NAME: Cloud Storage에 콘텐츠를 저장할 파일 이름입니다.
  • IV_P_BUCKET: 파일을 업로드해야 하는 버킷 이름
  • IS_DATA: 업로드해야 하는 파일 데이터
  • IV_CONTENT_TYPE: 파일의 콘텐츠 유형입니다. 현재 시나리오에서는 텍스트 파일을 업로드하므로 'text/plain'을 사용합니다.

가져오기 매개변수 IV_CHUNK_SIZE에 값을 전달하지 않으며 API 클라이언트 스텁이 이 매개변수와 연결된 기본값(8MB)을 사용하도록 합니다.

성공/오류 처리:

  • API 호출의 성공 여부에 따라 API 응답을 표시합니다.

연결 닫기:

  • 스토리지 서비스에 대한 HTTP 연결을 닫습니다.

9. 축하합니다

축하합니다. 'Cloud Storage 버킷에 파일 업로드' Codelab을 완료했습니다.

Cloud Storage JSON API에는 많은 기능이 있으며 ABAP SDK for Google Cloud를 사용하면 ABAP를 사용하여 SAP 시스템에서 직접 이러한 기능에 액세스할 수 있습니다.

Google Cloud Storage는 대용량 데이터를 저장하고 관리하는 데 적합한 옵션입니다. 다양한 비즈니스, 기업, 애플리케이션에서 사용됩니다.

Google Cloud Storage를 사용하는 경우의 몇 가지 이점은 다음과 같습니다.

  • 비용 효율성: Google Cloud Storage는 대용량 데이터를 저장하고 관리하는 비용 효율적인 방법입니다.
  • 단순성: Google Cloud Storage는 간단하고 직관적인 API를 사용하여 사용하기 쉽습니다.
  • 유연성: Google Cloud Storage는 다양한 애플리케이션과 플랫폼에서 사용할 수 있습니다.

이제 아래 Codelab을 진행하여 ABAP SDK를 사용하여 다양한 Google Cloud 서비스에 액세스하는 방법을 계속 학습할 수 있습니다.

  • Pub/Sub에 이벤트 전송
  • Cloud Pub/Sub에서 이벤트 수신
  • Cloud Translation API를 사용하여 텍스트 번역
  • DLP API를 사용하여 개인 식별 정보 삭제
  • ABAP에서 BigQuery ML 호출

10. 삭제

ABAP SDK for Google Cloud와 관련된 추가 Codelab을 계속 진행하고 싶지 않다면 정리를 진행하세요.

프로젝트 삭제

  • Google Cloud 프로젝트를 삭제합니다.
gcloud projects delete abap-sdk-poc

개별 리소스 삭제

  1. 컴퓨팅 인스턴스를 삭제합니다.
gcloud compute instances delete abap-trial-docker
  1. 방화벽 규칙을 삭제합니다.
gcloud compute firewall-rules delete sapmachine
  1. 서비스 계정을 삭제합니다.
gcloud iam service-accounts delete \
    abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com