레이블이 PI/PO인 게시물을 표시합니다. 모든 게시물 표시
레이블이 PI/PO인 게시물을 표시합니다. 모든 게시물 표시

2024년 5월 18일 토요일

왜 채널 접속정보가 변경이 안되는 걸까요?

현상정리

  • 채널(어댑터) 접속정보 변경 후 변경된 정보가 아닌 이전 정보로 처리됨
  • 정상적으로 변경되는 채널도 있고 일부분 반영이 안된 채널들도 존재
  • Cache Monitor: Adapter Engine 메뉴에서는 문제의 채널의 오브젝트 아이디로 조회시 변경된 정보로 확인 → 정상으로 보임
  • CPA Cache History의 캐시상태도 정상으로 보임

원인은 찾지 못했지만 어느정도 해결방안은 생각되는 듯
아래는 해당 현상으로 인해 확인해본 사이트

캐시관련사이트

  • 채널의 매개변수 변경 시 수정된 내용이 즉시 작동하지 않을때도 있다고 하고 채널을 중지 후 다시 시작해 보라고함

  • 채널의 고급탭에서 비활성화/활성화하고 전체 캐시를 새로고침해보라고 함

  • 메일 연계시에 수정사항이 반영안되는 문제가 있다고 함 → 풀캐시 언급

PO-SFTP연계 'Algorithm negotiation fail' 에러 관련 노츠정리

에러내용

Message could not be forwarded to the JCA adapter. Reason: com.jcraft.jsch.JSchException: Algorithm negotiation fail

관련노츠

  • 2337525-Jsch library upgrade to version Jsch 0.1.53


  • 3335633-Jsch library replaced with nwiede jsch 0.2.8 versioned/qaq-p/527356
    • 1692819-FAQ: PI SFTP Adapter

  • java.security > crypto.policy의 암호화 정책파일에 대한 limited|unlimited에 대한 내용
  • 자바가 설치된 로컬에서 확인했을때 crypto.policy=unlimited가 주석처리되어있음
  • unlimited는 정책파일에 대한 암호화 제한 없다고 하며 limited는 제한된 암호화가 포함되어있다고 함
  • JSchException: Algorithm negotiation fail-stackoverflow 사이트참고
  • Java 8 릴리즈 주요 기능 사이트 참고
  • AWS GovCloud(US) 리전은 미국 국제 무기거래규정(ITAR)를 준수 참고

non-central Advanced Adapter Engine Extended(AEX)에 대한 정리

non-central AEX도 설치해서 사용할일이 생기는것 같아 정리해보았음
흐름을 보면 Advanced Adapter Engine Extended(AAE) → BS(Business System)호출하는 구성과 다르게 non-Central AAE통해 BS와 연계
구성된 그림을 보면 오래전 dual stack과 single stack 구성과 비슷한데 ABAP엔진의 IE(Integration Engine)를 경유하냐 안하냐에 따라 차이가 있었음

non-central AAE란

  • Non-Central Advanced Adapter Engine = PI-AF
  • de-central Adapter engine = 탈중앙어댑터엔진
  • 채널의 Adapter Engine에 Central Adapter Engine만 선택되는것을 볼수 있는데 non-central aex를 설치하면 다른 선택항목이 보일듯
  • 메시지모니터링에 컴포넌트 등에 카테고리에 메뉴가 하나 추가되는듯
  • SAP_XIAF와 MESSAGING 컴퍼넌트가 보이면 Non-central이라고 함
  • RELEASE나 SP 업데이트 해야 사용할수 있는 어댑터를 사용하는 방법? → sap note 2032345,1997103
    • WS adapter is supported as of 7.31 SP13 / 7.4 SP8
    • REST adapter is supported as of 7.31 SP14 / 7.4 SP9
  • 메시지 트래픽을 줄이는데 사용되는 또다른 자바엔진을 의미

왜 사용하는 걸까

  • central AAE와 분리하여 데이터와 DMZ같은 외부망 시스템과의 연계에서 중앙 어댑터 엔진의 접근을 제어할수 있음 - AI답변
  • SAP NOTE 3457909의 컨커 연계시 오류해결방안으로 non-central aae내용이 있음

출처

2024년 5월 2일 목요일

SAP PO SOAP Adapter, WS_AAE 내용정리

레거시 → PO SOAP Sender방식으로 호출시 /WSAdapter/MessageServlet와 /XISOAPAdapter/MessageServlet URL 차이를 알기 위해 정리함

SOAP Adapter

  • SOAP = Simple object access protocol는 W3C(World Wide Web Consortium)에서 관리하는 공식 프로토콜
  • XML데이터 포맷을 사용함
  • Receiver어댑터에서는 SMTP프로토콜을 사용하여 SOAP메시지 보낼수 있다고 함
  • BODY에 보안설정(Signing,Verifying)을 사용할수 있다고 함
  • WS-security,WS-ReliableMessaging,WS-addressing,WSD 등 기술들이 존재
    • WS-addressing은 네트워크 라우팅 정보 유지관리 아닌 SOAP 헤더 내 메타데이터로 해당 정보를 패키징 하는 웹서비스 주소지정하는것으로 이해
  • WS_Security는 보안계층이 하나 더 추가되어 SOAP통신이 더 안전해진다고 함 → 그외 클라우드나 API방식 같은경우 토큰을 사용한 보안강화를 위한 인증 등 방식이 존재하는것으로 알고 있음
    • WS-Security는 토큰같은 고유식별자 통하나 메시지 보호,전송방식을 표준화하는 웹서비스 보안기술
  • 어싸인된 어댑터의 샌더 Agreements는 서비스 레지스트리에 게시할수 있다고 함
  • Axis프레임워크를 사용할수 있는 옵션이 있다고 함
  • Attachments가 필요한경우 SOAP이나 AXIS어댑터를 사용할수 있다고 함

WS_AAE 타입

  • 어댑터 타입은 WS_AAE = Web Service Adaper for Advanced Adapter Engine
  • WS_AAE어댑터는 Attachments를 지원하지 않는다고 함 → 그외 지원 기능에 대해서는 Note 1957663 확인필요
  • 7.31 SP13/7.4 SP8부터 WS 어댑터 지원 → 업데이트 없이 추가는 SAP Note 1916146

2024년 4월 19일 금요일

REST Receiver의 Broken pipe(Write failed),remote host unknown 에러내용 정리

PROXY to REST 시나리오의 인터페이스에서 아래와 같은 에러가 간혈적으로 발생되었음

메시지 Audit로그는

java.net.SocketException: Broken pipe (Write failed) (local port... remote host unknown)
REST채널 핑 테스트 결과는
Not ok Testing HTTP OPTIONS... 417: Unkown

Error 32 - Broken pipe (Write failed) in Rest Receiver Adapter-SAP Community 사이트를 보면

  • XPI_Inspector의 오류내용을 보여줌
  • 2604240-TLS handshake failure due to missing SNI extension 노츠 적용해도 효과없는듯 → 이노츠통해 해결된 사람도 있음
    • 핸드셰이크는 통신에서 연결을 설정하기 위한 과정 
  • 바이너리 파일의 큰사이즈의 JSON을 보내는 듯
  • 자바에서 클라이언트-서버 간 연결이 예기치 않게 종료될때 발생 → 서버에서 소켓읽기를 중지
    • 일반적으로 서버충돌,네트워크 문제 등으로 인한 연결을 닫아 통신할수 없어 발생
  • 클라이언트 타임아웃 시간으로인한 소켓시간 초과되어 연결종료될수도 있다고 함 → 만약 에러가 바로 발생 시에는 타임아웃을 늘리는건 무의미할수도 있을듯
  • 많은 연결의 처리 시 부하가 발생시에도 통신을 닫는경우 있는것 같음
  • 서버에서 처리가능한 임계값과 권장 사이즈 확인 후 소스에서의 대용량 사이즈에 대한 분할 전송이 필요

그외

  • 대상 서버의 인증서로 인한 문제일수도 있는듯? → xpi_inspector에서 확인 시

SAP PO매핑에서 ALTER SESSION SET CURSOR_SHARING=FORCE를 왜 사용하면 안되는걸까?

표준방식이 아니라서 ALTER SESSION...을 사용하면 안된다는데 이유가 궁금해서 정리함
me.sap.com/servicessupport 관련 노츠를 검색해도 잘 안나오는듯

cursor_sharing 파라메터 재정리

  • 목발같은 파라메터인듯 다리가 나을때까지 임시적으로 사용하기 좋은 도구
  • SAP PO에서는 채널에 BindMode로 하는게 좋을것 같음?
  • 일시적인 바인드변수에 대한 하드파싱 문제 해결할수 있지만.. 완전한 해결책은 아님
    • 하드파싱은 SQL 처음 실행 시 Shared Pool,Library Cache에 없어 완전히 전부 새로 파싱을 한다는 의미라고 함
    • 리터널 sql문을 많이 사용하면 하드파싱 빈도를 높이게 된다고 함
    • 파스과정 완료 후 sql문자과 실행계획이 공유풀 한 영역의 라이브러리 캐시에 저장 → 성능개선
    • 파스(Parse)과정: sql실행 → 하드파싱 → sql오류확인 → sql테이블,컬럼,권한 확인 → 효율적인sql문장변환 → 어떤방식으로 실행할지 선택
  • 라이브러리 캐시 경합을 일시적으로 해결하기 위한 파라메터 → 고려할수있는부분
  • 오라클 9i의 성능향상 내용에서의 Optimizer개선 내용
    • 옵티마이저는 최적화 Optimization은 손실함수 Loss Function의 결과값을 최소화하는 모델 파라미터(강중치)를 찾는 것을 의미한다고 함
  • 오라클 8.1.6에서 새로 추가된 기능 → EXACT,FORCE값 사용
  • ALTER SYSTEM SET cursor_sharing = FORCE로도 사용가능
  • 오라클 9I에서는 CURSOR_SHARING=SIMLAR로 지정 가능
    • FORCE사용 시 바람직하지 않은 실해 계획을 선택하는 단점 개선
  • 바인딩 사용안하는 SQL을 많이 사용하는 경우 컴파일 과정의 오버헤드를 줄일수 있다고 함
  • 실행계획공유,재활용 수준 개선 → 효과는 제한적
  • SQL Injection 공격방지 효과를 기대할수 없다고 함
  • ALTER SESSION은 현 세션에만 영향 → 영구적인 부분은 DBA에 요청필요
  • auto binder라고 하며 올바른 방향이지만 최종 해결책이나 장기적으로 사용하는건 주의필요 → 커서공유로 인해 발생하는 부작용도 있는듯

PO7.5-오라클 OJDBC8과 14 .jar파일을 둘다 사용할수 있을까?

지인분이 PO 7.5에서 JVM 1.8+OJDBC14와 오라글 19c 연계할때 ojdbc 8를 사용하려고 디폴로이 후 JDBC Adapter 채널에서 테스트를 하는데 8은 안붙고 14로 연결이 된다고 함

확인된 내용으로는  .JAR파일을 열었을때 JDBC 드라이버 패키지와 클래스명이 동일하여 PO내 JDBC클래스를 불러올때 14로 설정되어있어서 8을 못불러오는게 아닌지 생각됨

다시 정리를 하자면

7.5버젼에 호환되는 자바 버젼은 8이며 class format version major number는 52로 확인됨

ojdbc14.jar나 ojdbc8.jar 파일의 뒤 숫자는 설치된 jdk버전과 관계가 있다고 하는데 노츠에서는 14=jdk/jre 1.4, 8=jdk/jre 1.8 또는 8로 확인됨

Oracle JDBC FAQ 사이트를 보면 19.x 버전을 지원하는 최소 JDBC,JDK 버전으로는 ojdbc8.jar+JDK8에서 사용 가능한것으로 확인
하지만 ojdbc14.jar버젼같은 경우 이 사이트에서 확인할수 없지만 PO 7.5에서는 사용을 지양해야될것 같아 보이며 다른 사이트에서 jdbc14.jar+Oracle10g+java 1.5에서 사용되었던것으로 확인

만약 ojdbc8와 14를 둘다 사용해야된다면

 SAP PO+JDK 1.8에서 OJDBC14로 연계되었던 오라클 DB라면 지금은 인터페이스 수행이 잘된다고 해도 나중을 위해서는 14를 제거하고 연계하는 오라클 DB버전과 모두 호환되는 OJDBC8.JAR로 사용해야 될것으로 보임
JDBC Adapater에서 위 ojdbc14,8 버전을 모두 사용해야한다면 왠지 막고 싶다는 생각이 듬

SAP PO에 JDBC드라이버는 어떻게
SAP PO 신규 JDBC 드라이버 배포방법_SAP PO New JDBC Driver Deploy Guide-감귤은탱귤 20240117 에 내용이 정리가 되어있는데 sdaMakerTool.jar+sdaMakerTool를 사용하여 sda파

자바 HttpURLConnection으로 PI/PO Directory API 웹서비스(SOAP) 호출하는 방법

다이나믹웹프로젝트(JAVA EE)+톰켓을 사용한 이클립스 환경에서의 WSDL파일을 제너레이션해서 웹서비스 호출을 위한 개발은 진행했으나 순수 자바프로젝트에서 동일한 방식으로 진행하려니 웹서비스 프레임워크나 톰켓 버젼에서 문제 발생되어 원인 찾아 셋팅하는것만으로도 시간을 많이 소비될것 같은 생각이 듬

알고 있는 웹서비스 프레임워크는 AXIS(Deprecated),AXIS2,CXF이고 WSDL파일을 제너레이션 하게되면 생되는 자바파일도 늘어나고 그래서 REST로 PI/PO의 Directory API를 웹서비스 호출하려고 함

웹서비스 호출 정보 확인

호출하려는 PI/PO 웹서비스 정보는 NWA > Configuration > Connectivity > Single Service Administration 메뉴클릭 후 서비스명을 검색 후 확인되는 웹서비스정보를 확인하면 됨

만약 해당 메뉴 접근을 못하는 경우 PO담당자한테 WSDL+호출URL정보를 제공받아 SOAP UI에 임포트하거나 WSDL URL로 웹서비스 정보를 확인할수 있음

위 경로를 통해 자바에서 REST로 호출하는 SOAP구조와 URL로 확인하고 웹서비스 프로그램으로 미리 호출테스트를 해보는것도 좋을것 같음

개인적으로 PO메뉴보다 SOAP UI에서 확인되는 요청데이터가 불필요한 태그가 없어서 좋은데 보통 SOAP방식으로 호출되는 XML데이터는 아래와 같은데 SAP PO에서 제공하는 웹서비스마다 XML구조가 다름
⁠<soapenv:Envelope xmlIns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlIns:bas="http://sap.com/xi/BASIS">
 <soapenv:Header/>
 <soapenv:Body>
  <bas:BusinessSystemQueryRequest>
  </bas:BusinessSystemQueryRequest>
 </soapenv:Body>
</soapenv:Envelope>

2024년 4월 5일 금요일

SOAP UI에서 호출시 is not a valid SOAP version 에러

현상정리

  • SOAP UI호출시 PO 메시지 모니터링 로그 상태는 Log version으로 확인되거나 로그가 안보이고 로그뷰어에서만 호출이력이 보이는 경우
  • 보통 Log version상태는 전송되는 데이터타입과 PO의 데이터타입 메시지 구조가 상이할때도 발생되는데 → 확인 후 다른 원인으로 발생되는 현상이였음

에러내용

SOAP UI에서 에러발생 시 전송했던 데이터 호출시 아래와 같은 오류가 확인되어었음
⁠<soap:Value xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/">ns1:VersionMismatch</soap:Value>
⁠<soap:Text xml:lang="en">"[XML Namespace], the namespace on the "[Message Type명]" element, is not a valid SOAP version.</soap:Text>

원인&해결

  • Log  version과 SOAP version 현상은 ICO오브젝트를 다시 저장 후 엑티브하고 해결
  • is not a valid SOAP version 오류같은 경우 내 자리에서만 ⁠SOAP UI에서 기본적으로 생성되는 요청구조의 ⁠<soapenv:Envelope><soapenv:Header><soapenv:Body>⁠를 제거 하면 동일한 오류가 재현됨

"하나 의문인건 SOAP UI에서 발생된 오류가 SOAP구조로 전송 안되어 발생된 에러라면? 왜 갑자기 이런 오류가 PO에서 발생되었고 상대방 클라이언트에서는 PO의 ICO를 다시 저장한것만으로 해결이 되었는데 내 자리에서 SOAP UI호출 시 SOAP구조로 안보내는경우 is not a valid SOAP version이 발생되는건지 의문임"

"왜 SOAP UI 버젼은 다를지라도 상대방과 난 같은 SOAP UI를 사용하는데 왜 내 SOAP UI에서만 오류가 발생되는건지 모르겠음"

2024년 3월 26일 화요일

XPI Inspector르르 사용하여 HTTP SSL컨넥션 확인 테스트


SSL인증서 작업은 SAP PO프로젝트나 운영할때 수시로 해야하는 부분이였으며 연결과정에서 인증서 오류가 발생되어 해결하는 과정도 있었음

이전에는 인증서교체나 에러확인 시 수행중인 인터페이스로 확인했던적도 있었는데 XPI Inspector를 사용하여 확인하는 방법도 있어 테스트하면서 정리해보려고 함

전체조건

  • XPI Inspector를 사용하려면 미리 설치가 되어있어야한다고 함
    • 설치 방법으로는 파일 다운로드 후 NWDS 배포방식이 있는듯
  • 테스트를 위한 SOAP,REST Receiver 채널 등 타겟 URL셋팅필요(시나리오 구성해야함)

XPI인스펙터 실행 및 테스트

  • 인스펙터 URL은 /xpi_inspector/index.jsp로 실행
  • Example은 11 (Authentication, SSL & PP), SSL Server URL Address는 타겟 채널의 URL의 도메인을 입력
  • 스타트 버튼 누른다음 테스트로 만든 인터페이스를 실행
  • 스탑버튼을 누르면 로그수집 후 결과가 화면상에 출력됨

로그 분석

  • 로그는 .zip 압축파일로 다운로드 가능
  • SAP System,Java Instances,Server Nodes,JEE Services 항목들을 볼수 있음

SAP PO시스템 운영 시 도움되는 프로그램

SAP PO시스템을 운영하며 PO내 기본적인 기능들인 MessageMonitoring로그,데이터 그리고 Adapter 엔진상태를 볼수 있는 핑테스트 등 통해서 운영은 가능하나 송,수신 시스템 연계하는 인터페이스를 개발하고 테스트를 하는 입장에서는 소스/타겟 시스템의 연계 방식과 최대한 재연이 필요할때도 있었음

아래는 PO운영과 테스트시나리오에 도움이 되는 프로그램에 대해 정리했음

Notepad++

  • 문서편집기이자 소스코드 편집기
  • 플러인을 추가하여 원하는 기능을 사용할수 있음
    • XML Tools를 사용하여 PO의 XML데이터 정렬과 문법체크 등사용
    • JSON Viewer json포맷 데이터를 보기좋게 정렬
    • SQLLinForm를 사용하여 복잡한 쿼리 정렬과 수정
    • Compare를 사용하여 복잡한 쿼리 비교 사용
  • 자바매핑이나 UDF소스를 정렬하여 분석할때 사용

SAP GUI

  • SAP 서버에 연결할수 있는 GUI클라이언트
  • 듀얼스텍일때는 컨넥션추가,셋팅 등 작업에 사용하였음
  • 싱글스텍인 현재는 프록시연계 방식의 인터페이스의 모니터링이나 기타 확인용도로 사용하고 있음

SoapUI

  • 오픈 소스 웹 서비스 테스트 애플리케이션
  • SOAP이나 REST 연계방식의 테스트 및 확인용도로 사용하고 있음

2024년 3월 19일 화요일

Message Type안에 XML Namespace는 왜 넣어야하는 걸까?

SAP PO의 소스가 SOAP 등 연계방식인 경우 ESB의 메시지타입을 생성하게 되면 XML네임스페이스는 디폴트로 들어가 있고 이렇게 생성된 오브젝트로 소스쪽에 WSDL를 배포하면 
소스쪽은 그 WSDL가지고 개발 툴에서 제너레이션 해서 PO에서 생성된 네임스페이스대로 호출을 하거나 임의로 SOAP구조,네임스페이스,호출 소스를 미리 구현하여 실제 PO를 호출할때 소스와 PO가 네임스페이스가 달라 호출이 실패되는 경우도 있었음
실제 네임스페이스는 무엇을까 이런 의문을 통해 관련 내용을 정리해보려고 함

네임스페이스란

  • URI(Uniform Resource Identifier)로 표현
  • 네임스페이스 이름을 URL로 사용 → 도메인 유일보장 값
  • 네임스페이스명 접두사(prefix) 사용 → 쿼리의 컬럼명 뒤 별칭(Alias) 같은
  • XML안에 엘리먼트 앞에 접두사를 사용하여 네임스페이스 별로 구분 가능
  • SOAP메시지안에 메소드,데이터항목 등을 구별할수 있게 해준다고함
  • XML 요소 간의 이름에 대한 충돌 방지하는 방법 제공
  • XML네임스페이스 선언은 xmlns나 xmlns:로 시작
  • 두가지 마크업 언어(HTML,WML 등) 합쳤을때 동일한 이름의 엘리먼트에 대한 충돌방지

PO에서의 네임스페이스

  • ESR네임스페이스 생성하려면 소프트웨어 컴퍼넌트가 있어야하고 그안에 네임스페이스는 여러개 생성할수 있음
  • 네임스페이스 종류는 Repository Namespaces, XML Namespaces가 있음
  • Repository Namespaces는
    • ES Repository 디자인 요소의 객체 이름간에 충돌을 방지하기 위해 사용
    • 프록시 방식(SPROXY티코드)에서 네임스페이스를 식별자 정의
    • Integration Directory에서 Receiver 시스템에 동일한이름,네임스페이스가 존재한다면? 식별할수 없다고 함

2024년 3월 16일 토요일

JDBC Adapter의 PreparedStatement 메모리 누수가 있을까?

2020-04-14에 작성된 JDBC dapter with Oracle high heap space consumption 글을 재정리하면

  • PO 7.5(SP15)로 업그레이드 후 Oracle 12c JDBC연계
  • 일반 트랜잭션 모드의 처리가 느려 배치모드로 옵션체크,파라메타 추가
    • 파라메터는 sqlBindMode,dateWithBindMode 추가
  • 시스템 메모리 부족으로 현상 
    • oracle.jdbc.driver.T4CPrepareStatement클래스 메모리 사용
    • 해당 채널의 중지하면 메모리 감소하는것을 확인
  • 최신버젼 드라이버(19.3),poolWaitingTime,note 1916598를 적용했을시 별다른 효과를 보지 못한것 같음

2916999-Memory Leak when using sqlBindmode with Batch process in JDBC receiver adapter

  • JDBC 어댑터에서 메모리 누수 현상은 있었음
  • T4CPreparedStatement > java.util.LinkedList 힙덤프 내용에서 처리 후 닫지 못하는 현상있다고함  
  • SAP Note 952402 설명대로 패키지 적용이 필요하다고 함

그외 자바프록시,다른 어댑터, 파서, 지원방식 등에서 메모리 누수/부족 현상이 확인되었던것 같음

2717777-OOM in PI XML Hardener
1297935-SyncMessageRemover may cause memory leak
 1974920-Fixes in cleanup of synchronous message store
2654452-High CPU Usage on SAP Process Orchestration instance
948169-High memory consumpton when using Java proxies

2024년 3월 14일 목요일

힙 덤프 분석을 위한 Eclipse Memory Analyzer tool 사용방법 정리

 출처: 1883568-How to self analyze a Heap Dump using MAT


https://eclipse.dev/mat/ 에서 Memory Analyzer 1.15.0 Release 다운로드

처음 실행 할때 아래와 같은 메시지가 확인되면 실행 안됨
Version 1.8_201 of the JVM is not suiable for this product. Version: 17 or greater is required
현재 내 컴퓨터에 설치된 JVM버전은 맞지 않은것 같음

툴을 설치한 폴더안에 MemoryAnalyzer.ini 파일내용을 수정하여 해결할수 있다고 하는데
-Dosgi.requiredJavaVersion=1.8을 추가

추가 후 실행해보면 로딩 로고가 나오지만 안됨
An error has occurred. See the log file [로그파일경로]/1710314750556.log
어느 사이트에서는 .ini파일내용에 javaw.exe 자바를 실행하는 가상머신 경로가 없어서 그런다고 하여 추가해봄
-vm
[JDK설치경로]/bin/javaw.exe
동일함

1.13버젼에서는 Version: 11이 필요하다고 하는데 1.10에서는 실행이 됨

이클립스외에 MAT관련 SAP확장패키지 설치

OOM(OutOfMemory)에러에 대한 원인 및 해결방안에 대한 정리

SAP PO에서 발생되는 OOM(OutOfMemory)에 에러원인과 해결방안은 다양한것 같음

SAP PO에서의 OOM에러 원인들은

  •  예를들어 자바프록시 등 내 개발자가 생성한 로직에 잘못된 코드나 메모리 누수가 있는 경우 → 예를들어 테스트 없이 운영배포 후 무한루프 로직이나 라이브러리 사용과는 다른 구현
  • 커스텀으로 개발된 코드에서 사용한 외부 라이브러리에 버그가 있는 경우 → 예를들어 레퍼런스가 없는 서비스 지원이 끊긴 라이브러리
  • 인터페이스 시 사이즈 제한으로 인한 강제 에러나 대용량 사이즈 처리로 인한 부하가 발생된 경우 → 예를들어 소스시스템에서의 대용량 전송 및 타겟쪽 조회 시 대용량사이즈 리턴
  • PO내의 처리관련 설정 보다 더 많은 건수나 빈도수로 호출되어 정체가 되는경우 → 예를들어 소스시스템에서의 무작위 호출
  • 시스템내 처리중인 메시지 건수가 많고 이 데이터를 쿼리실행 할때 → 예를들어 집계쿼리 실행이나 인터페이스 내 PO테이블 조회 등
  • 트레이스 로그는 모르겠지만 시스템 내 많은 로깅이 쌓일때 → 예를들어 로그레벨 수정으로 인한 불필요한 로깅 등

해결방안으로는

  • 무작위로 호출되어 에러가 발생되는 경우 → 소스 배치인경우 일단 중지 후 에러난 로그나 처리중인건들은 확인 후 재처리나 캔슬처리
  • 불필요한 로깅 → 시스템 로그레벨을 조정하거나 자바프록시내 로깅은 해당 인터페이스를 수정
  • 메모리 누수같은경우
    • 노드추가나 JVM파라메터 추가하는경우에도 문제가 지속적으로 발생되는 경우가 있다고 함
    • 힙 메모리 크기를 늘리는 경우에는 OOM오류를 지연될 뿐이라고 함

Log Viewer 'Analyzed structure: 0. Level 2...'이런 에러메시지는 왜 나오는걸까?

내용을 요약하자면

  • 메시지 모니터링 Audit로그에는 안보이고 로그뷰어에만 보이는 메시지인듯
  • Log Configuration에 error,info 상태에서도 나오는 메시지
  • 전송방식,DB종류와 상관없이 발생되는것 같음
  • Receiver JDBC방식에서만 발생되는것 같음
  • 로그뷰어의 특정 로케이션에서 발생되는 것 같음

로그뷰어의 내용으로는

Category: /Applicatons/ExchangeInfrastructure/AdapterFramework/Services/ADAPTER/ADMIN/JDBC
Location: com.sap.aii.adapter.jdbc.xml2sql.processList()
Application: sap.com/com.sap.aii.af.app
Thread: XI XI2JDBC[채널명]_474633
Customer Message Component: BC-XI-CON-AFW
Message:
Analyzed structure:
0. Level 2 Name: [메시지구조]
1. Level 5 Name: [메시지구조]
2. Level 4 Name: [메시지구조]
관련 인터페이스는 채널명 통해 찾을수도 있는데 NWDS > SAP MMC통해  ./log/applications.log 파일 통해 찾는데 더 쉬울수도 있을것 같음

저 위에 Analyzed structure 메시지구조들은 AI한테 물어보면 '메시지 구조분석 과정 발생되는 문제로 번호는 구조의 인덱스 번호' 이해가 되지만 해당 메시지 해결방안으로는 힌트를 얻을수 없었음

2024년 3월 6일 수요일

JDBC Receiver채널에서의 오라클 ORA-04054 Database link does not exist에러 내용 정리

아는 지인분이 SAP PO JDBC어댑터에서 아래와 같은 에러가 발생되어 해당 문의 데이터를 AA||@||BBB.COM 로 합쳐서 처리를 하였음
에러내용은
Ora-04054 database link does not exist(데이터베이스 링크 'BBB.COM'이 존재하지 않습니다)

오라클에서 @이 포함한 이메일 데이터가 들어가 DB링크로 인식이되어 에러가 발생된것 같고 PO에서는 기본적으로 JDBC처리시 리터럴로 되어있어 오라클DB+이메일 데이터에서 위와같은 에러가 발생된것 같음

SAP PO에서의 해당에러에 대한 내용을 웹서핑이나 SAP NOTE에서 찾지 못하였는데 ORA-04054: database link GMAIL.COM does not exist-stack overflow 사이트내용을 보면

SQL파서에서는 문자열 리터럴로 인식못하여 DB링크로 처리된다고 하는데 PrepareStatement로 해결이 되는것으로 보임

그리고 UDF 등을 사용하는 방법 외에
JDBC Receiver채널에 Batch Mode라는 옵션이 존재하는데 보통 바인딩변수 처리할때 sqlBindMode = true함께 사용하고 있음
하지만 Batch Mode만 체크하여 위 문제를 해결이 가능할것 같다는 생각이 들고 Batch Mode에서 지원하지 않은 쿼리 실행(action)은 SELECT, INSERT_UPDATE, EXECUTE, SQL_QUERY라고 함

2024년 2월 24일 토요일

NWDS의 Profiling 서버 등록 시 'No jvmmond is running' 에러내용 정리

전에 잘 등록되었던것으로 기억이 나는데.. 이번에 PO메모리에 약간 부하가 있는것 같아 Manage Hosts...에 호스트:1099 등록해서 확인해보려니 아래와 같은 메시지가 발생
No jvmmond is running!

해당 에러메시지로 찾아본 내용
방화벽,네트워크,RMI 등 관련 내용이 나오는거서 보니 혼자 해결할수 없는 문제로 보임

1099 포트에 대한 핑 테스트는 tcping.exe툴을 사용했고 다운로드 주소는 https://elifulkerson.com/projects/tcping.php 이며 Windows > System32 폴더에 넣고 CMD창에서 사용하면 됨
그래서 핑 결과는?
tcping [아이피] [포트]
Probing 아이피:포트/tcp - No response - time=2010.107ms
Ping statistics for 아이피:포트
 4 probes sent.
 0 successful, 4 failed. (100.00% fail)
Was unable to connect, cannot provide trip statistics.

역시.. 혼자서는 해결이 어려워보임

SAP PO 데이터베이스 테이블 관련 정리

SAP PO운영하다 보면 BC_*나 XI_* 등 이런 테이블명으로 시작되는 내용을 보게 되는데 각 각의 테이블의 설명이 필요할것 같아 내용찾아 정리해보았음 

BC_*

BC_MSG
  • PI 7.0x에서는 XI_AF_MSG 테이블 명
  • 자바스텍의 메시지 마스터성 테이블
  • 비동기 방식의 메시지 하나 = 테이블에는 하나의 ROW
BC_MSG_VERSION
  • 메시지 편집,스테이징 될때 메시지 버젼
  • Receiver and Interface determination(MS) 단계후에 생성된다고 함
  • 타겟이 여러개인 분할메시지 인경우 MS,AM단계 이후 하나의 버젼이라는 것을 알려준다고함
BC_MSG_LOG
  • 로깅 후 버전당 하나의 레코드가 생성
BC_MSG_LOG_STAT
  • 로깅 후 메시지당 하나의 레코드
  • 모니터링 목적으로 사용
BC_MSG_AUDIT
  • 7.0x이하에서는 XI_AF_MSG_AUDIT이라고 함
  • RWB_PIMON에서 볼수 있는 AUDIT로그
  • 7.1이상에서는 기본적으로 오류/에러 메시지에 대해 DB에 생성된다고 함

2024년 2월 12일 월요일

보안강화를 위한 리버스 호출이란?(SAP 웹 디스패처)


리버스 호출이란?

  • 보안네트워크(인트라넷)에서 네트워크 연결 설정하는 기술이라고 함 → 네트워크 보안 강화
  • 일반적인 시나리오에서는 A가 B로 연결 시도후 
  • 정상적으로 연결이 되면 데이터 전송
  • 리버스 호출에서는 B가 A연결을 설정 후 A가 B에게 데이터를 전송할수 있음
  • 리버스 호출설정은 표준설정보다 더 복잡할수 있다고 함
  • SAP는 웹 디스패쳐 간 설정으르 권장
  • 웹디스패쳐와 백엔드 시스템 간 직접 설정이 피하라고 얘기하는 듯
  • 리버스 호출은 연결보다 안전하게 설정하는게 더 중요하다고 얘기하는 듯

하나의 예로 양과 늑대의 어느 동화 내용이 떠오르는데

첫번째: 나쁜늑대가 양의 집 문을 똑똑 두들기고 들어가는 것
두번째: 양이 문틈으로 착한늑대인지 나쁜늑대인지 확인 후 잠긴 문을 열어주는 것
두가지 시나리오를 보면 두번째가 더 안전해 보임