SAP Connector 운영 질문
ABAP 추가 기능이 필요한 이유
애플리케이션 계층의 추가 기능은 SAP 자원을 확인하면서 추출하고 테이블뿐 아니라 뷰, BW InfoProvider와 BEx 쿼리 등을 읽을 수 있습니다. 원천 탐색, 여러 증분 방식과 실패 진단도 같은 SAP 로직을 사용합니다.
지원 시스템과 버전
R/3, ECC, S/4HANA, CDC용 SLT Replication Server와 BW 계열을 지원합니다. BW 기반 APO 같은 도구도 해당 범위에 포함됩니다.
주 Connector의 최소는 SAP_BASIS 7.4 SP5이며 7.5에는 추가 최소 SP 조건이 없습니다. 더 높은 8.x 계열, 예를 들어 816도 지원합니다. SLT OData의 PALODATA에는 별도로 7.50 SP09 이상이 필요합니다. 더 오래된 원천은 지원 버전의 gateway와 제한된 Remote Agent 경로를 사용합니다.
판단 기준은 ABAP 추가 기능을 설치하는 경로와 버전입니다. S/4HANA Cloud Private Edition은 지원 대상이지만 SAP IBP나 Ariba처럼 이 추가 기능 설치 경로에 해당하지 않는 서비스는 다른 수집 방법을 사용해야 합니다. 해당 서비스의 연결 대안은 Palantir 지원팀과 확인합니다.
SAP 인증과 제거
이 Connector는 SAP 인증 추가 기능이며 SAP Certified Solutions에서 Palantir의 인증 기록을 확인할 수 있습니다. 제거 가능성도 인증 과정에서 시험합니다. 추가 기능은 자체 네임스페이스를 사용하며 설치와 제거 이력은 SAINT 로그에 남습니다.
실제 제거에는 Foundation 의존 관계와 제거 전 보정을 따라야 합니다. 인증이 사용자의 SAP 라이선스 및 계약 검토를 대신하는 것은 아닙니다.
시스템 부하와 라이선스
추출은 페이지로 나누어 처리하고 기본적으로 각 페이지를 요청하기 전에 메모리, 시스템 및 사용자 CPU와 dialog/background process의 가용성을 확인합니다. 기준을 벗어나면 추출을 중단하고 자원이 충분해졌을 때 다시 시도할 수 있습니다.
SAP 라이선스 준수 여부는 사용하는 조직이 판단해야 합니다. 애플리케이션 계층의 정기 읽기가 SAP의 indirect static read에 해당하여 비SAP 시스템 활용에 별도 라이선스가 필요하지 않을 수 있지만 이를 일반적인 면제로 가정하면 안 됩니다. 외부 시스템에서 SAP에 쓰는 사용자는 추가 라이선스가 필요할 수 있습니다. 실제 사용과 계약은 법무 담당자 또는 SAP 담당자와 검토합니다.
보안과 인증서
에이전트 워커 경로에서는 SAP에서 에이전트, 에이전트에서 Foundry까지 HTTPS로 전송하고 에이전트 호스트에 임시 저장한 데이터도 암호화합니다. SAP 원천 시스템의 전체 저장소 정책과 이 전송 및 임시 저장 범위는 구분합니다.
권한은 서비스 실행, 콘텐츠 접근, 쓰기 반영과 모니터링/디버그 역할로 나뉩니다. 서비스 역할은 변경하지 않고 콘텐츠 역할은 복사하여 업무 범위를 제한할 수 있습니다. 세부 객체와 활동은 권한 역할에 있습니다.
PKIX path building failed
javax.net.ssl.SSLHandshakeException: PKIX path building failed
호출 측에 SAP HTTPS 인증서를 신뢰할 충분한 정보가 없다는 뜻입니다. SAP Basis 또는 보안 담당자에게 올바른 서버/CA 인증서를 확인하고 신뢰 저장소에 추가합니다.
에이전트 호스트에서 서버가 제시하는 인증서 체인을 조사하려면 OpenSSL을 사용할 수 있습니다. 다음 호스트와 포트는 예시이며 실제 SAP ICM HTTPS 값으로 바꿉니다.
SAP_HOST='sap.example.com'
SAP_PORT='443'
openssl s_client -showcerts -servername "$SAP_HOST" -connect "$SAP_HOST:$SAP_PORT" < /dev/null
이 명령으로 체인을 받았다는 사실 자체가 해당 인증서를 신뢰해도 된다는 근거는 아닙니다. SAP 담당자가 확인한 인증서와 대조하고 연결 진단 출력 전체가 아닌 올바른 인증서 내용을 사용합니다.
기존 에이전트 워커에서는 Agent Settings > Manage agent certificates > Add a new certificate에서 별칭과 인증서 내용을 입력하고 저장한 뒤 에이전트를 재시작합니다. Foundry 워커 소스는 소스의 서버 인증서 설정을 사용합니다.
Hostname not verified
javax.net.ssl.SSLPeerUnverifiedException: Hostname XXXXX not verified
인증서에 호스트를 확인할 SAN(Subject Alternative Name)이 없을 때 발생할 수 있습니다. CN(Common Name)만으로 호스트를 확인하는 방식에 의존하지 말고 SAP Basis 또는 보안 팀에 SAN을 포함한 인증서를 요청합니다.
비운영 환경에서는 기존 hostname verifier를 사용하는 useLegacyHostnameVerifier: true 설정이 가능하지만 권장하지 않습니다. 운영용 인증서의 호스트 이름 문제를 이 옵션으로 대신 해결하지 않습니다.
ERP와 BW 중 어디서 추출할 것인가
가장 세밀한 원천 ERP 데이터를 확보하면 이후 분석과 앱의 선택 범위를 넓힐 수 있습니다. 이미 처리한 BW 데이터만 쓰면 원천에 있던 상세가 없어 다른 업무로 확장하기 어려울 수 있습니다. 기존 BW 보고서나 쿼리를 활용해야 하면 원시 ERP 데이터와 BW 결과를 함께 수집하는 패턴을 사용할 수 있습니다.
Transparent, pool과 cluster 테이블을 모두 추출할 수 있습니다. BW는 DSO, InfoCube와 InfoObject를 포함한 InfoProvider 및 BEx 쿼리를 지원합니다.
ABAP에서 Foundry로의 자료형 대응
| SAP ABAP | Foundry | 의미 |
|---|---|---|
| ACCP | String | 회계 기간 |
| CHAR | String | 고정 길이 문자열 |
| CLNT | String | Client 필드 |
| CUKY | String | CURR에서 참조하는 통화 키 |
| CURR | Decimal | 통화 값 |
| D16D | Decimal | BCD로 저장한 십진 부동소수점 |
| D16N | Decimal | 십진 부동소수점 |
| D16R | Decimal | 이진 형식으로 저장한 십진 부동소수점 |
| D16S | Decimal | 스케일을 가진 이전 십진 부동소수점 형식 |
| D34D | Decimal | BCD로 저장한 십진 부동소수점 |
| D34N | Decimal | 십진 부동소수점 |
| D34R | Decimal | 이진 형식으로 저장한 십진 부동소수점 |
| D34S | Decimal | 스케일을 가진 이전 십진 부동소수점 형식 |
| DATN | Date | YYYYMMDD 날짜. HANA의 DATE에 대응 |
| DATS | Date | 날짜 값 |
| DEC | Decimal | 부호 있는 고정 소수점 |
| FLTP | Double | 부동소수점 |
| INT1 | Integer | 매우 작은 정수 |
| INT2 | Integer | 작은 정수 |
| INT4 | Integer | 일반 정수 |
| LANG | String | 언어 키 |
| LCHR | String | 고정 길이 문자열 |
| LRAW | Binary | 가변 길이 바이트열 |
| NUMC | String | 숫자 등을 담는 텍스트 문자열 |
| PREC | String | QUAN의 정밀도 정보 |
| QUAN | Decimal | 수량 값 |
| RAW | Binary | 해석하지 않은 바이트열 |
| RAWSTRING | Binary | 가변 길이 바이트열 |
| TIMS | String | 시각 값 |
| UNIT | String | QUAN에서 참조하는 단위 키 |
Foundry의 일반 데이터셋에는 Date 및 Timestamp와 별도의 Time 자료형이 없으므로 TIMS는 String으로 표현합니다. 대응하는 DATS와 결합하여 필요한 날짜 또는 Timestamp 열로 정규화하는 것을 권장합니다.
ERP 뷰는 ERP Table 객체 유형에서 이름 옆 VIEW 표시로 찾을 수 있습니다. ABAP CDS 지원은 SP21, HANA Information View 지원은 SP22부터 제공됩니다. HANA 뷰는 외부 뷰 게시 조건도 충족해야 합니다.
동기화 실행 중 하는 일
Data Connection Coordinator가 실행 위치를 정하고 SAP 플러그인을 시작합니다. SAP 추가 기능에 paging-init을 보내면 대상 객체를 조회하고 SAP의 /PALANTIR/ 네임스페이스 테이블에 압축된 페이지 데이터를 준비합니다.
이후 페이지를 차례로 폴링하며 아직 준비되지 않았으면 기다렸다가 다시 요청합니다. 마지막 페이지를 받으면 paging-close를 보냅니다. 기존 에이전트 워커 경로에서는 페이지를 호스트의 암호화된 Parquet 파일로 준비하고 대상 Foundry 데이터셋에 업로드합니다. Foundry 워커와 에이전트 프록시 구성은 실행 위치 및 네트워크 경로를 별도로 구분합니다.
자주 보는 오류
| 오류 | 의미와 대응 |
|---|---|
Unexpected value encountered in SAP data Failed to parse value XXX in field YYY | 잘못된 날짜나 숫자를 해석하지 못했습니다. Ignore unexpected values는 해당 값을 null로 두고 계속 수집하는 선택지이므로 데이터 의미에 맞는 경우에 사용합니다. |
Current CPU user load(X%) is higher than the max. CPU user parameter(Y%)... | 설정한 자원 보호 기준을 넘었습니다. 부하가 낮아질 때까지 기다리는 것이 적절할 수 있습니다. 기준 자체가 지나치게 보수적인지 검토한 경우에만 조정합니다. |
ERROR : User XXXXX does not have enough authorization for this service call. | 기술 사용자의 역할 할당이나 authorization profile 생성이 올바른지 확인합니다. |
오류 문구에 임계값을 높이라는 제안이 있더라도 모든 자원 부족을 검사 비활성화로 해결하지 않습니다.
증분과 CDC
SLT는 원천 ERP 트리거를 사용하고 BW extractor는 지원하는 경우 자체 delta를 사용합니다. ERP/S/4HANA의 일반 테이블에는 Connector의 증분 필드, 변경 문서와 twin table 등의 방식을 사용할 수 있습니다.
증분 필드는 단조 증가하는 값이 적합합니다. 시각 없는 날짜밖에 없을 때에도 누락을 줄이려고 기본 비교를 >가 아닌 >=로 사용합니다. 따라서 경계값을 다시 읽어 중복이 생길 수 있으며 후속 변환에서 기본 키와 변경 순서를 기준으로 정리합니다.
SNAPSHOT에서 APPEND로 바꾸면 전체 데이터가 다시 들어오는 이유
SNAPSHOT 실행은 증분 상태를 기록하지 않습니다. 이후 APPEND로 바꾸면 첫 증분 실행이 전체 데이터를 다시 읽고 그다음부터 delta를 추적하므로 기존 데이터와 중복될 수 있습니다.
증분 수집이 필요하면 처음부터 APPEND를 계획합니다. 이미 중복된 경우에는 증분 상태 초기화를 사용하여 전체 재적재와 이후 증분을 맞춥니다.
자원 검사 기본 동작
CPU_CHECK는 CPU 사용량, MEMORY_CHECK는 메모리 사용량, PROCESS_CHECK는 가용 작업 프로세스 수를 확인합니다. 기본적으로 모두 활성화하며 continuous 검사도 켜져 있어 초기 요청뿐 아니라 페이지 요청 전마다 확인합니다.
개별 동기화의 Extras에서 Resource Check 또는 Continuous Resource Check를 Off로 바꿀 수 있습니다. 전자는 전체 검사를, 후자는 반복 페이지 검사를 조정하는 것이므로 파라미터의 적용 범위를 확인합니다.
민감한 데이터가 SAP를 떠나기 전에 제한
콘텐츠 역할을 복사하여 특정 테이블이나 객체 전체의 추출을 제한할 수 있습니다. 행 제한에는 Foundry 동기화 필터와 SAP Cockpit의 prefilter를 사용합니다. Prefilter는 Foundry 필터에 추가 적용되므로 탐색 및 동기화 미리보기에도 적용됩니다.
열 단위로는 동기화의 Drop Columns 또는 SAP Cockpit의 마스킹, 암호화와 해시 설정을 사용합니다. 이 처리들은 SAP에서 데이터를 내보내기 전에 적용하는 범위입니다.
SAP 쓰기와 실제 사용자 귀속
추가 기능은 Foundry 웹훅에서 SAP 함수 모듈을 호출할 수 있습니다. 구조와 실패 메시지가 명확한 BAPI를 권장하지만 필요한 경우 다른 함수 모듈도 사용할 수 있습니다.
실제 사용자에게 쓰기를 귀속하려면 OAuth 2.0 Authorization Code 구성을 사용합니다. SAP가 서버, Foundry가 클라이언트가 되며 사용자에게 처음 권한 위임을 요청합니다. 토큰을 받았다는 사실이 대상 업무 함수의 SAP 권한을 대신하지는 않습니다.
업데이트와 로그 정리
일반 업그레이드는 Support Package로 수행합니다. 고정 릴리스 일정은 없으며 보통 2~3개월마다 새 SP가 제공됩니다. SP 사이의 Fix Pack은 해당 SP에만 적용합니다.
로그 테이블이 무한히 커지지 않도록 housekeeping 작업을 활성화해야 합니다. SAINT 설치가 자동으로 이 작업을 켜지는 않으므로 housekeeping 설정과 예약 주기를 별도로 관리합니다.