λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

ABAP Implimentation (πŸ› οΈμ‹€λ¬΄)/Etc.

ABAP Base64 인코딩과 λ””μ½”λ”© κ΅¬ν˜„ (Feat. CL_HTTP_UTILITY)

λ ˆκ±°μ‹œμ™€ μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„μ‹œ μƒλŒ€λ°© μͺ½μ—μ„œ base64둜 μΈμ½”λ”©ν•΄μ„œ μ£Όκ±°λ‚˜ λ°›κΈ°λ₯Ό μš”μ²­ν•˜λŠ” κ²½μš°κ°€ μžˆλ‹€. Base64κ°€ 무엇인지 μ–΄λ–»κ²Œ μ‚¬μš©λ˜λŠ”μ§€μ— λŒ€ν•΄ μ•Œμ•„λ³΄λ„λ‘ ν•˜μž.


1. Base64λž€ λ¬΄μ—‡μΈκ°€?

Base64λŠ” λ°”μ΄λ„ˆλ¦¬ 데이터λ₯Ό ν…μŠ€νŠΈ λ°μ΄ν„°λ‘œ λ³€ν™˜ν•˜λŠ” 인코딩 방식이닀. 0κ³Ό 1둜 κ΅¬μ„±λœ λ°”μ΄λ„ˆλ¦¬ 데이터λ₯Ό μ‚¬λžŒμ΄ 읽을 수 μžˆλŠ” 문자(AZ, az, 0~9, +, /)둜 λ³€ν™˜ν•΄ μ£ΌλŠ” 것이닀.

  • 3λ°”μ΄νŠΈ(24λΉ„νŠΈ) → 4개의 6λΉ„νŠΈ λΈ”둝 → 4문자둜 λ³€ν™˜
  • λ³€ν™˜λœ κ²°κ³ΌλŠ” 원본보닀 μ•½ 33% μ»€μ§€μ§€λ§Œ, ν…μŠ€νŠΈ μ‹œμŠ€ν…œμ—μ„œλ„ μ•ˆμ „ν•˜κ²Œ λ‹€λ£° 수 μžˆλ‹€.

즉, 이미지, 파일, λ°”μ΄λ„ˆλ¦¬ 데이터λ₯Ό  "ν…μŠ€νŠΈμ²˜λŸΌ μ•ˆμ „ν•˜κ²Œ μ „μ†‘ν•˜κ±°λ‚˜ μ €μž₯" ν•  수 μžˆλ„λ‘ λ³€ν™˜ν•˜λŠ” 과정이 Base64이닀.


2. Base64λŠ” μ–΄λ–€ κ²½μš°μ— μ‚¬μš©λ κΉŒ?

μ‚¬μš© 사둀 μ„€λͺ… 
파일 μ „솑 SAP μ‹œμŠ€ν…œμ—μ„œ μ™ΈλΆ€ μ„œλ²„λ‘œ PDF, μ΄λ―Έμ§€ νŒŒμΌμ„ μ „솑할 λ•Œ
API ν†΅μ‹  μ™ΈλΆ€ REST API ν˜ΈμΆœ μ‹œ, Authorization ν—€λ” λ“±μ— μ‚¬μš©
DB μ €μž₯ λ°”μ΄λ„ˆλ¦¬ λ°μ΄ν„°λ₯Ό ν…μŠ€νŠΈλ‘œ λ³€ν™˜ν•˜μ—¬ λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯
이메일 μ „솑 μ²¨λΆ€νŒŒμΌμ„ Base64둜 μΈμ½”λ”©ν•˜μ—¬ λ©”일에 ν¬ν•¨

3.  Base64의 μž₯점

ν•­λͺ© μ„€λͺ… 
μ‹œμŠ€ν…œ ν˜Έν™˜μ„± λͺ¨λ“  ν”Œλž«νΌμ—μ„œ λ¬Έμ œ μ—†μ΄ μ²˜λ¦¬ κ°€λŠ₯ (ν…μŠ€νŠΈ κΈ°λ°˜)
μ•ˆμ „μ„± 데이터 μ†μ‹€ μ—†μ΄ μ „솑 κ°€λŠ₯
ν‘œμ€€ν™” μ›Ή, λ©”일, ν†΅μ‹  ν”„λ‘œν† μ½œ λ“± λ‹€μ–‘ν•œ κ³³μ—μ„œ ν‘œμ€€ μ§€μ›
κ°„κ²°μ„± 인코딩/λ””μ½”λ”© λ‘œμ§μ΄ κ°„λ‹¨ν•˜μ—¬ λΉ λ₯΄κ²Œ κ΅¬ν˜„ κ°€λŠ₯

4. ABAPμ—μ„œ Base64 μΈμ½”λ”©/λ””μ½”λ”© λ°©λ²•

1) Function Module μ‚¬μš© (SCMS_BASE64_ENCODE_STR, SCMS_BASE64_DECODE_STR)

 

β–Ά Base64 인코딩 ( xstring → string )

DATA: lv_raw TYPE xstring,      "κΈ°μ‘΄ λ°”μ΄νŠΈ νƒ€μž…μ˜ λ°”μ΄λ„ˆλ¦¬ 데이터 
           lv_base64 TYPE string.

CALL FUNCTION 'SCMS_BASE64_ENCODE_STR'
     EXPORTING
          input = lv_raw
     IMPORTING
          output = lv_base64.

 

β–Ά Base64 λ””μ½”λ”© ( string → xstring )

DATA: lv_base64 TYPE string,    "base64둜 μΈμ½”λ”©λœ 데이터 
           lv_raw TYPE xstring.

CALL FUNCTION 'SCMS_BASE64_DECODE_STR'
      EXPORTING
           input = lv_base64
      IMPORTING
           output = lv_raw.

 

 

2) 클래슀 μ‚¬μš© (CL_HTTP_UTILITY )

클래슀λ₯Ό ν†΅ν•œ 인코딩/λ””μ½”λ”© μ‚¬μš©ν•˜λ©΄ μ½”λ“œκ°€ 훨씬 깔끔해지고 가독성이 μ’‹μ•„μ§„λ‹€. 

 

β–Ά Base64 인코딩 ( xstring → string )

DATA(lv_base64) = cl_http_utility=>encode_x_base64( lv_raw ).

 

β–Ά Base64 λ””μ½”λ”© ( string → xstring )

DATA(lv_raw) = cl_http_utility=>decode_x_base64( lv_base64 ).

 

μΆ”κ°€λ‘œ CL_ABAP_CODEPAGE ν΄λž˜μŠ€λ‘œλ„ λ³€ν™˜ κ°€λŠ₯ν•˜λ‹€.( Method : convert_from, convert_to )

 

πŸ’‘λ°”μ΄λ„ˆλ¦¬ 데이터λ₯Ό 인터널 ν…Œμ΄λΈ”λ‘œ κ°€μ§€κ³  μžˆλŠ” 경우 νŽ‘μ…˜ SCMS_BINARY_TO_XSTRING 을 μ‚¬μš©ν•˜μ—¬ xstring으둜 λ³€ν™˜μ΄ κ°€λŠ₯ν•˜λ‹€. 


5. Base64 인코딩할 λ•Œ μ£Όμ˜ν•  점

βœ… Base64 λ°μ΄ν„° κΈΈμ΄ κ³„μ‚° κ³΅μ‹

  • Base64 λ°μ΄ν„° κΈΈμ΄ = ((원본 κΈΈμ΄ + 2) / 3) * 4
  • 데이터 크기가 μ•½ 33% 증가
  • λŒ€λŸ‰ 파일 전솑 μ‹œ 데이터 크기 초과 주의 ν•„μš” ( 이메일 전솑 같은 경우 μš©λŸ‰ μ œν•œ 체크 ν•„μš” )

βœ… Base64 νŒ¨λ”©(Padding) μ²˜λ¦¬

  • νŒ¨λ”©(Padding) μ²˜λ¦¬λŠ” μž…λ ₯ λ°μ΄ν„°μ˜ 길이가 3λ°”μ΄νŠΈμ˜ λ°°μˆ˜κ°€ 아닐 λ•Œ λ°œμƒ
    • Base64 λŠ” λ°”μ΄νŠΈ(24λΉ„νŠΈ) λ‹¨μœ„λ‘œ μ²˜λ¦¬ν•˜μ—¬, 이λ₯Ό 4개의 Base64 문자둜 μΈμ½”λ”©ν•˜λ―€λ‘œ κ²°κ³ΌλŠ” 항상 4의 배수 길이가 λ˜μ–΄μ•Ό 함.
  • λΆ€μ‘±ν•  경우 '=' 문자둜 νŒ¨λ”© μΆ”κ°€ (ex: 2λ°”μ΄νŠΈ 남은 경우: 'TQ==', 1λ°”μ΄νŠΈ 남은 경우 'TWE=' )
  • ABAP의 ν‘œμ€€ 인코딩 κΈ°λŠ₯은 μžλ™ νŒ¨λ”© 처리됨

βœ… Base64 μ€„λ°”κΏˆ(Line Break) λ¬Έμ œ

  • 기본적으둜 μ€„λ°”κΏˆ 없이 κΈ΄ λ¬Έμžμ—΄λ‘œ 생성
  • 일뢀 κ΅¬ν˜• μ‹œμŠ€ν…œμ€ 76μžλ§ˆλ‹€ μ€„λ°”κΏˆ μš”κ΅¬ (MIME ν‘œμ€€)
  • ABAP κΈ°λ³Έ 인코딩은 μ€„λ°”κΏˆ 없이 처리 (ν˜„λŒ€ API ν‘œμ€€μ— 적합)

 


ℹ️ κ°™μ΄ μ½μœΌλ©΄ μ’‹μ€ ν¬μŠ€νŒ…

πŸ”— ABAP Byte νƒ€μž…κ³Ό Hexadecimal(16μ§„μˆ˜) 관계

 

ABAP Byte νƒ€μž…κ³Ό Hexadecimal(16μ§„μˆ˜) 관계

ABAPμ—μ„œ 데이터 νƒ€μž…μ„ 이야기할 λ•Œ μ„Έ κ°€μ§€λ‘œ λΆ„λ₯˜ν•  수 μžˆλ‹€. Character νƒ€μž…(λ¬Έμžν˜•), Numeric νƒ€μž…(μˆ«μžν˜•), 그리고 Byte νƒ€μž…μ΄λ‹€. λŒ€λΆ€λΆ„μ˜ μž…λ¬Έμžλ“€μ€ λ¬Έμžν˜•κ³Ό μˆ«μžν˜• νƒ€μž…μ—λŠ” μ΅μˆ™ν•˜μ§€λ§Œ, "Byte

twossun.tistory.com