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

2022-11-20

SAP PO 자바커스텀개발을 위한 패키지 정리

SAP PO의 UDF(User defined function), Adapter Module, Adapter 등을 커스텀개발을 할때 사용되는 PO의 자바 패키지나 클래스를 정리해보았습니다.

SAP NetWeaver 7.5 SP 06 Process Integration의 PI Maaping and Lookup API사이트를 참고하셔서 커스텀개발을 진행하시면 좋을것 같습니다.

com.sap.engine.interfaces.messaging.api


Message

샌더나 리시버 사이에 전송되는 메시지는 헤더와 페이로드 등으로 구성되고 있으며 Message 인터페이스는 아래 헤더필드의 값을 가져올수 있습니다.
Message ID, Service, Receive, Sequence ID, Correlation ID 등

2022-09-29

SELECT * 사용에 대한 특징 간략정리

*는 별표이며 문자라고도 하고 애스터리크(Asterisk)라고 하는데요. 상징,기호,표시,각주,참고 등 여러 의미가 있는것 같습니다. 시스템을 개발하거나 운영하는 경우 대체로 EAI에서 여러 DB와 연계할때 SELECT * 를 아니면 SELECT 컬럼명으로 조회하는 경우가 있는데 습관적으로 사용하는 방법에 대해 간략하게 정리를 해보고 나중에 구체적인 내용도 기회되면 내용을 추가해봐야겠습니다.

  • * 사용시 불필요한 컬럼까지 Fetch하게 됩니다.(응답시간이 증가)
  • Index only access, Index only scan을 사용할수 없습니다.(select할 컬럼에 인덱스 존재 시)
  • SybaseIQ같은 DB는 Column in block저장방식을 택하고 있어 아스타리크를 사용 시 성능차이가 클수 있다고 합니다.(DB마다 다를듯)
  • SELECT * 은 가독성 및 향후 운영(유지보수 관점)을 위해 지양한다고 합니다.
  • Spring같은 프레임워크에서는 자동매핑을 선호하여 select *를 사용하는 경우가 있다고 합니다.(단, 컬럼명 수정/삭제 되는 경우 오류가 발생될수 있다고 함)
  • 리소스 사용률이 높아지고 지연시간이 길어질수 있다고 합니다.
  • SELECT *를 사용 시 많은 열의 캐싱을 시도합니다.(사이즈가 큰 TEXT나 BLOB 컬럼타입도 존재) 
  • SELECT *를 사용하여 다른 테이블로 복사 시 잘못된 열에 복하는 경우도 있다고 합니다.(두개의 테이블의 컬럼순서가 다른경우)

2022-08-23

SAP PO관점에서 보게되는 CPI는 어떤 모습일까요?

대체로 SAP PO만 개발했던 사람으로서 CPI는 비슷하지만 다른부분들이 더 많은것 같고 앞으로 CPI와 PO는 어떻게 다르고 CPI를 어떠한 방향으로 알아야할지 생각을 해보는 내용입니다.

"솔직히 도움되는 내용은 없으면 만약 PO를 오랫동안 하셨던 분이라면 깨끗하게 이전에 개발했던 방식은 잊고 새로운 마음으로 CPI를 해보시는걸 권장드리고 싶습니다."

아직 페이지의 내용을 다 보고 이해한건 아니지만 같은 뱃속에서 태어난것 같은데 이렇게다 서로 다른건지 ㅎ 

Comprehensive SAP CPI Guide for Standards & Best Practices 웹페이지를 보면 자세하게 정리되어있습니다. 이내용에서 제가 이해한 내용에 대해서만 간략하게 정리를 했습니다.

SAP PO의 FCAServerThreadCount 는 무엇일까요?

FCAServerThredCount에 대해 듣게 되어 찾아본 내용에 대해 간략하게 정리해보려고 합니다. 일반적으로 HTTP프로토콜의 REST,SOAP으로 PI/PO를 호출할때 ICM를 통해 각 JAVA 서버노드에 호출되는걸로 알고 있는데요. 호출되는 시스템이 많아지고 자바노드에 동시에 대량요청건에 대한 처리 가능성이나 처리가 되면서 발생되는 현상에 대해 대안으로 SAP에 권장하는 값에 따라 FCAServerThreadCount의 값을 조정하는 경우도 있는것 같습니다.

어떤때는 MMC(SAP Management Console) 보는데 하나의 HTTP Worker가 8분동안 처리중 상태인게 이상하여 해당 키워드에 대해 검색중에 하나의 노츠를 확인할수 있었습니다.
1945745 - How to increase HTTP Worker (FCA) threads in PI

내용을 보면 PI에서 HTTP Worker 스레드 수를 늘려야 할 경우가 있다고 하는데 디폴트 값인 15가 부족할수 있고 제가 보았던 현상처럼 MMC에서 평소보다 처리중 상태가 오랫동안 유지되는 스레드들이나 덤프를 확인 할수 있다고 하는데 위에서 언급한 FCAServerThreadCount의 FCA는 Fast Channel Architecture를 뜻하는것 같은데 ICM을 통과하는 HTTP관련 채널의 스레드에 영향을 주는 파라메터인지는 아직은 모르겠습니다.

일단 아래 노츠에서는 해당 파라메터의 권장 값이 50이라고 나와있는데 해당 내용들은 PO담당자보다 BC쪽에서 더 익숙한 내용들이 많을꺼 같긴한데 PO담당자도 각 NWA에서 볼수 있는 파라메터의 용도에 대해 미리 숙지하고 있으면 나중에 도움이 될꺼라 생각이 듭니다.
SAP Note 1375656 - SAP NetWeaver PI/AEX/PO system parameters 에서 .pdf파일을 다운로드

2022-08-16

SAP PO에서 SQL Bind Mode를 사용해야하는 걸까?

DB연계시 사용되는 JDBC Receiver Adapter에서 Bind Mode를 사용할때는 일반적으로 생성하던 구조와 다르게 metadata라는 어트리뷰트와 값이 추가가 되어야하는데 이런 설정을 통해 DB연계방식으로 개발된 인터페이스의 성능이 좋아지는 경우도 있었던것 같습니다. 하지만 개발(DATE,DECIMAL같은 컬럼타입의 함수 등)이나 모니터링 상 제약이 있는 부분도 있어 연계하는 시스템의 환경에 따라 사용여부가 결정될것 같고 이런부분들에 대해 간단하게 정리하려고 합니다.


Statement, PreparedStatement 차이

기본적으로 PO에서 JDBC Adapter를 생성하여 XML SQL형석으로 실행시 JDBC에서의 Statement로 쿼리를 실행된다고 이해를 합니다. 즉 10개의 쿼리를 각 각 수행한다고 보시면 되는데요. 이 과정에서 하드파싱으로 인하여 연계한 시스템의 DBA한테 바인딩? 처리해달라고 요청을 가끔 받기도 합니다. 그럼 바인딩 처리와 관련된 PreparedStatement와는 어떤차이가 있을지 찾아보면 제일 큰 차이가 캐시사용여부라고 합니다. 예를 들어 동일한 쿼리를 반복적으로 수행하기보다 캐시에 담긴 쿼리를 재사용하면서 안에 변경되는 값만 바인딩 처리하여 DB에 적은부하와 성능을 좋게 할수 도 있다고 하며 실제로도 이런 바인딩처리를 통해 성능이 좋아졌던 인터페이스도 보았습니다.

2022-08-13

SAP PO에서 Correlation ID를 셋팅하는 방법(두개의 인터페이스 상관관계)

지인분이 만드신 프로그램에 Correlation ID 셋팅으로 두 서버나 인터페이스에 대한 상관관계를 만들어 낼수 있는 부분을 보게되어 좀 더 검색을 통해 간략하게 정리를 하려고 합니다.


Correlation ID는 왜 사용하는걸까?

콜러레이션 아이디는 고유성과 기본키로 하나의 메시지에 할당하는 메시지 아이디와 다르게 상관관계에 따라 첫번째 콜러레이션 아이디가 다르고 두번째도 다르고 이런식으로 1:N인 ICO의 여러 타겟시스템에 보내는 구조의 인터페이스에서 봐왔던 아이디였던것 같습니다. 그리고 BPM이나 JMS 그리고 여러 IF 묶여 하나의 시나리오로 수행이 필요한 것들에 대해 동일 메시지 아이디로 인한 상관관계를 만들기 위해서 콜러레이션 아이디 셋팅이 필요해 보입니다.

2022-08-11

SAP서버구성할때 CI,SCS,ERS들은 무엇일까?

SAP PO개발이나 테스트서버와 다르게 여러대의  AP(Application Server)서버를 하나로 로드밸런싱 해주는 L4/L7라는 로드밸런서를 보게되는데 그외 구성에 사용되는 CI,SCS,ERS들에 대해 몰라 간단하게 정리해볼려고 합니다. PO뿐만 아니라 SAP서버구성시 사용되는 것들로서 어떤역할을 하는지에 대해 가볍게 알면 좋을것 같습니다.

보통 SAP PO운영서버 장애 시 Take-Over발생하여 장애가 발생된 엑티브중인 서버가 스텐바이 서버로 테이크오버가 된다는 얘기를 들은적이 있는데 이런 과정에서 과연 위에 언급된 서버들은 무슨 역할을 하는지 궁금하기도 합니다.


ASCS(ABAP SAP Central Service)

ASCS는 두가지 역할을 한다고 하는데 MS(Message Server)는 ABAP Dispatcher간의 통신과 부하분산 역할을 한다고 하며  ES(Enqueue Server)는 Lock Table관리를 한다고 합니다.

2022-07-28

CPI(Cloud Platform Integration)를 왜 알아야하는가?(PO 7.5 유지보수종료기간)

요즘 국내에  CPI(Cloud Platform Integration) 환경에서 진행되는 프로젝트 소문이 들려오는데 현재 SAP PO 7.5 서포트하는 기간과 CPI를 왜 알아야 하는지에 대해 관련 사이트를 찾아정리해보기로 합니다.(CPI는 몰라요)
현재 PO 7.5까지 알고 있는데 2003년의 XI(Exchange Infrastructure) 2.0부터 지금의 PO(Process Orchestration) 7.5까지 그다음에 어떤 버젼이 이어질지 궁금하기도 합니다.  
일단 SAP PO 7.5 서포트관련 로드맵과 CPI를 같이 검색해보니 아래 사이트들이 눈에 보입니다.

EAI(Enterprise Application Integration) Kinds, History of SAP XI/PI/PO


SAP PO 7.5 유지보수 기간은 

어디서 확인가능한가요?

3045368-SAP Roadmap for CPI and PI/PO products의 내용을 보면 CPI로 전환하거나 로드맵에 관심있는경우 SAP Road Maps 사이트에서 해당 제품명으로 검색을 해보라고 하는데 해당 사이트에 들어가 각 제품명으로 검색을 해보면 년도,분기별로 세부적은 로드맵정보를 볼수 있으며 생소한 화면이라 나중에 좀더 자세하게 봐야될것 같습니다.

2022-07-08

SAP PO의 특정 AP서버에서 부하가 발생하는 경우, 이설정을 의심해보세요

혹시 SAP PO시스템을 운영중에 특정 AP서버나 노드에서 부하가 발생하는 현상을 보신경우 로그레벨 설정을 의심해보는것도 좋을것 같습니다. 일반 어플리케이션 프로젝트를 진행하더라도 운영에 배포하는 경우  Log4j나 로그관련 라이브러리의 로그레벨은 개발과 운영환경의 설정 차이는 존재하는데요. PO에서도 채널, 메시지, 서버의 로그 등 운영상에 잘못된 설정으로 인해 전체시스템에 부하를 줄수 있는 부분이라 만약 신규 운영서버 오프 시 고려해야될 부분중에 하나인것 같습니다.

SAP PO의 로그레벨 설정

NWA > Configuration > Infrastructure > Log Configuration 메뉴를 보면 여러 카테고리가 존재하는데 서버, 각 어댑터의 로그레벨에 영향을 주는것 같고 아마 다른  AP서버의 로그레벨과 비교를 해보면 차이점을 찾을수 있을것 같습니다.

2022-06-16

MYSQL프로시 호출시 User does not have access to metadata required to determine stored procedure parameter... 에러 해결방법

SAP PO와 MYSQL 프로시저 동기방식으로 연계시 발생된 에러발생 후 해결하는 과정에 대해 정리를 했으며 연계하는 프로시저는 INPUT,OUTPUT 존재했는데 오라클 프로시저 연계할때와는 Request,Response구조나 DB호출파라메터가 달라지는것 같습니다.

첫번째에러내용

java.sql.SQLException: User does not have access to metadata required to determine stored procedure parameter type. If rights an not be granted, configure connection with 'noAccessToProcedureBodies=true' to have driver generate parameters that represent INOUT strings irregardless of atual parameter types
번역기를 돌려보면 연계하는 MYSQL DB의 권한확인이나 PO에서 호출하는 JDBC호출 URL에 파라메터 추가 한 후 테스트가 필요해보이는것 같습니다.

2022-05-22

SAP Concur와 Rest채널에서의 엑세스토큰 옵션 3가지+1

"실제 해보진 않았고 관련 사이트를 보고 개념만 정리했습니다."


SAP PO와 Concur간 연계방식인 Rest 채널통해 서비스 URL호출하기전에 엑세스토큰(OAuth 2.0) 인증에 대한 지원옵션에 대해 담아봤습니다.
PO에서 Concur 업무를 위한 API를 호출하기위해서는 엑세스 토큰이 필요하다고 하는데요. 제가 보았던 부분에 대해서는 1회만 엑세스토큰을 받아 계속 사용할수 있는게 아닌 주기적으로(예를들어 한시간 마다) 받아야 하는 번거로움이 있어보였습니다.


SAP Concur란?
SAP Concur 솔루션은 모든 경비, 출장 및 공급업체 송장 지출을 하나의 시스템에 연결하여 지출을 엔드 투 엔드에서 관리, 거래에 대한 가시성을 높이고 모든 사용자를 위한 프로세스를 단순화하는 단일 방법을 제공한다고 한다고 하는데.. 쉽게 얘기하면 Concur는 경영진이 출장 경비를 관리할수 있게 해주는 '클라우드 기반 경비 및 관리 소프트웨어 솔루션'이라고 합니다. 

2022-05-09

SAP PO, JDK, JDBC 버젼 호환성 체크방법

10년이상의 오래된 EAI 솔루션, 플랫폼을 다른 EAI로 전환할 시에 일반적으로 JDBC버젼도 그대로 전환하는것을 보게 되었고 DB연계방식의 인터페이스들의 오라클, MSSQL 등 버젼업 되면서 변경요청하는 JDBC .jar 버젼들을 보며 PO내부에 있는 JDBC버젼들도 확인 및 교체가 필요해 보여 관련내용에 대해 정리를 해봤습니다.

참고한 사이트를 보면 SAP PO의 NetWeaver 릴리즈와 자바의 JVM버젼과 호환되는 JDBC드라이버 버젼들을 사용하게 되는데요. 신규 PO프로젝트를 진행 시에 아래 사이트를 참고하여 PO의 JVM 버젼에 맞게 각 DB업체에서 제공하는 JDBC파일을 다운로드 받아 PO에 디폴로이를 진행하면 되는 부분인데 DB종류가 다양해지는 만큼 EAI담당자 입장에서 관리대상이 많이 지는 부분도 고려가 필요해보입니다.

PO프로젝트 진행, 운영하다보면 3073720-PO JDBC Adapter error DriverManaerException 관련 오류들도 발생된적도 있는데 연계하는 JDBC드라이버와 데이터베이스 그리고 PO의 자바 버젼간의 호환성에 대해 확인을 해야될 부분 같고 이에 대해 SAP 입장에서는 JDBC드라이버는 공급업체(오라클,MSSQL 등)에 제공되어 SAP의 영역밖인 문제로 보는것 같고 이런 문제에 대해서는 공급업체 쪽에 문의하라는 가이드를 SAP 공식문서에서 본적도 있었던것 같습니다.

2022-04-26

scheduler.relocMode 값이 샌더채널의 폴링실행시 주는 현상

이전에 폴링되는 샌더채널의 이상증상에 대한 내용을 정리 후에 relocMode 값에 대해 좀더 자세하게 담아보려고 하는데요. 이전글도 미리 참고해주시면 좋을것 같습니다.

자신이 진행하는 SAP PO 프로젝트나 운영중인 시스템의 샌더채널에서 아래와 같은 현상들이 보이신다면 scheduler.relocMode 관련 설정값을 확인해보시는것도 좋을것 같습니다.
  1. 파일, JDBC 등 샌더채널의 폴링작업 시 두개의 노드에서 중복실행 됩니다.
  2. 폴링작업이 한 노드에서만 실행됩니다.
  3. 폴링설정한 시간과 다르게 불규칙하게 실행됩니다.(예를들어 더 빨리실행)

지금까지는 폴링시간을 60초로 제 자신이 생각한 기준으로 연계시스템에 가이드를 했었지만 그 이하의 실시간에 가까운 폴링시간에서는 위와 같은 현상이 드물게 보이기도 하는것 같습니다. 폴링하는 시간이 짧다고 해서 위 현상에 대한 원인이라고 하기 충분하지 않은게 해당 폴링관련 설정값들은 시스템특성, 인터페이스 시나리오, 사용자 요청사항에 따라 변경이 가능하도록 되어있으며 중복문제 해결을 위해 기존 설정값들의 의도(분산,성능 등)와 모순될 가능성이 있는부분이 있어 충분한 확인과 테스트가 필요해보입니다.


2022-04-25

Log Viewer 로그 출력을 위한 카테고리 설정

SAP PO의 매핑이나 자바프록시, 어댑터모듈, 어댑터 및 메시지나 채널모니터링 그리고 Log Viewer에서 확인할수 있는 로그 출력방법이나 소스들은 각 각 다른것 같습니다. 이중 Log Viewer에 로그를 출력하기 위해서는 아래의 구문을 적용하면 되는 것  같은데요.

com.sap.tc.logging.Category.getCategory(Category.getRoot(), "<카테고리명>" 

이렇게 넣고

NWA > Troubleshooting > Logs and Traces > Log Configuration에서 카테고리명을 검색하면 해당 Severity를 선택할수 있는데 항목들은 All, Debug, Path, Into, Warning, Error, Fatal, None 가 확인이 됩니다.
그리고 하단에 Per Instance Configuration 탭에도 해당 노드의 Severity를 선택할수 있는데 실제로 못해봐서 이렇게 하면 로그출력을 할수 있는지 잘 모르겠습니다.


일단 참고만 하시길요..

SAP PO프로젝트나 운영 중 발생되는 문제해결 순서

SAP PO프로젝트나 운영을 하다보면 다양한 원인과 문제는 달고 진행되는것 같습니다. 경력이 쌓이다보면 웬만한 문제에 대해서는 알고 있는 지식으로 해결이 가능하지만 가끔 알수 없는 에러나 증상으로 PO담당자를 당황하게 하거나 힘들게 하는 경우도 발생됩니다. 그래서 이번에는 문제 발생시 해결순서에 대해 정리를 해보았는데요. 이런 부분은 사람마다 다를수도 있을것 같습니다.

2022-04-24

ORA-00984: 열을 사용할 수 없습니다.(column not allowed here)에러 해결방법

프로그램이나 DB 툴로 실행했을때는 아무 문제 없이 문제되는 쿼리가 SAP PO와 연계했을 때 알수 없는 문제로 에러가 발생되는 경우가 있습니다. 이번에 발생되었던 오라클 에러인
'ORA-00984: 열을 사용할 수 없습니다.'는 PO에서 어떠한 원인으로 발생된건지 확인하고 어떻게 해결을 해야할지 담아보려고합니다.

이 에러에 대해 인터넷 검색을 해보면 대략 이런 원인이 나오네요.

  1. Insert 쿼리의 문자열에 싱글쿼테이션(')가 포함되었거나 안된경우
  2. 싱글쿼테이션 대신에 더블쿼데이션을 사용할 경우
  3. 내장 함수 등의 이름에 오타가 있는경우

1번 원인 같은경우 PO프로젝트나 운영을 하다보면 데이터문제로 종종 발생되었던 원인이고 PO에서 한개의 싱글쿼테이션을 ' -> '' 이렇게 변경하게되면 해결이 되었던적은 있습니다. 이부분은 아마 다른 언어로 개발된 프로그램에서도 마찬가지일것 같네요.

하지만 이 에러에 대한 원인은 위 3가지가 아닌 다른 원인으로 발생되었는데

현상은 문자와 숫자가 섞인 데이터였고 타겟DB컬럼 타입은 NVARCHAR2 였습니다.

SWCV 운영이관으로 인한 캐시에러 방지하는 방법

SAP XI/PI/PO 프로젝트나 운영을 했던 분이라면 한번쯤 겪었을 현상일것 같은데요. ESR(Enterprise Services Repository)에서 운영시스템으로 이관할 파일을 Tool > Export Design Objects > Individual Objects 메뉴를 통해 수정된 오브젝트만 받을수 있습니다.  하단의 옵션들을 보면 3가지가 있는데 

이중에 'With Software Component Version Definition'는 기본적으로 체크된 상태인데 이대로 Export받은 파일을 운영시스템에 Import한다면? 결국에 전체 SWCV아래의 모든 개체에 대해 캐시가 새로고침되어 운영중인 인터페이스에 영향을 주게 되어 아래와 같은 에러가 발생되는 경우가 있습니다.

"CPAException: Could not Determine mapping steps for message"

임포트한 운영시스템의 Cache Status Overview메뉴를 보았을때 전체SWCV목록의 상태가 'Not Started' 라면 약간 긴장하시는게 좋을것 같은데 이런 실수는 10년차 경력자도 종종 발생될수 있는 부분이였던것 같습니다.

2022-03-26

SAP PO 스레드 로그(Thread Dump) 특징과 상태

스레드 상태

SAP PO에서 대용량사이즈 유입이나 부하를 주는 로직 등으로 인해 OOM(OutOfMemory)가 발생되는 경우가 있는데 이때 발생되는 Thread나 Heap 덤프분석파일이 nwa > troubleshooting > Advanced... 메뉴에 생성되네요. 이 파일 내용을 보고 덤프의 내용 안에서 OOM이 발생된 원인을 알수 있지않을까 생각이 듭니다.

Thread Dump파일을 보는데 확장자가 .b00으로 된 파일이 여러개가 존재하며 안에는 알수없는 수치나 내용으로 복잡하게 보이네요. 이 덤프는 JAVA(JVM)에서 사용되는 스레드에 대한 Thread call stack정보를 담고 있는 스냅샷이라고 하는데 SAP PO내부에 Java application이 hang, 처리속도저하, OOM, CPU사용랑이 높을때 등 발생되는것 같습니다. 해당 내용은 nwds의 SAP Management Console메뉴 > Threads의 Show Call Stack메뉴를 통해서도 볼수 있지만 NWA에서 보는것과는 내용이 달라보입니다.

2022-03-01

SAP ABAP Proxy관련 트랜잭션 코드 SXI_MONITOR와 SXMB_MONI비교 및 메시지포맷설명


예전에 듀얼스택(ABAP)에서 자주 보았던 SXI_MONITOR와 SXMB_MONI의 트랜잭션 코드와 메시지포맷에 대해 정리를 해보았는데요. 현재 싱글스택(온리 자바)에서 EAI업무를 하게되다보니 직접 모니터링하기보다 SAP에서 ABAP Proxy개발을 하는 개발자에게 설명하기 위해 해당 티코드에 대해 가이드를 많이 하게되는 것같습니다.


SXI_MONITOR와 SXMB_MONI의 차이

두개의 티코드에 대한 큰 차이는 없지만 SXMB_MONI는 SXI_MONITOR보다 상위 트랜잭션이라고 말할수 있는 부분이 모니터링 조회화면으로 바로 실행되는 SXI_MONITOR과 다르게 추가로 기본적으로 조회화면 외 

JDBC Sender채널의 Poll Interval(secs) 셋팅 시 0이 왜 필요할까요?

SAP PO에서 DB연계방식으로 사용되는 JDBC Sender 어댑터에서 특정 날,시에만 인터페이스를 수행하기위해서는 채널모니터링의 Availability Planning에서 스케쥴(월,일,시 등) 설정한 항목에 채널을 추가하면 되고 추가로 채널상태는 Stop, Automatic이여야 합니다.

그리고 채널의 Poll Interval(secs)는 보통 86400(24시간)마다 설정하면 지정된 스케쥴 시간에 맞춰 딱 한번 채널이 실행되는데 이 값을 테스트환경에서 Availability Planning설정없이 86400값을 넣으면 24시간마다 채널이 실행이 되는반면에 0으로 넣으면 불필요하게 채널이 실행되지 않아 더 알맞는 값인것 같습니다.

최근글

2026년 5월 12일 데일리 뉴스요약