부제. Created by SAP 로 살펴본 CDS View 구성방법
이 글은 지난 [Guide] ABAP CDS View 아는 만큼 그리고 필요한 만큼 사용하기 1부의 연속으로
2. ABAP Dictionary 데이터 재구성
3. VDM(버추얼 데이터 모델링) 구현
을 설명하는 글이다.
간단한 데이터 보정이야 1개의 ABAP CDS View에서 구성할 수 있지만
집계와 복잡한 비즈니스 로직이 들어있다면(대부분이 그러하겠지만)
아무리 머리를 굴려도 단일 레이어 즉 1개짜리 View 로는 원하는 최종결과에 도달할 수 없다.
이럴때는 어쩔 수 없이 ABAP CDS View를 여러겹으로 감싸서 최종 결과에 도달하게 된다.
이렇게 덮어놓고 낳다보면 거지꼴을 못 면할 것같은 구성이 탄생하기도 하는데
자연스레 이게 내가 잘하고 있는 것일까 자문하게 된다.
과연 어떻게 하는게 좋은 방법이고 네이밍은 어떤식이 좋을까?
그 해답은 Created by SAP ABAP CDS View 에서 찾을 수 있지 않을까 싶다.
그래서 모든 DDL 소스를 다운받아 살펴보았다.
HANA 자료실에 다운로드 프로그램을 공유했으니 직접 확인하시면 더 좋을 것이라 생각된다.
S4H 1511 8,000
S4H 1610 16,000
정도가 있고 이를 목적별 카테고리를 나눠 살펴보면 아래와 같다.
1. Compatibility & Alternative View
2. VDM
3. SAP인증 솔루션, 데모, ABAP 내부사용 목적
하나씩 살펴보자.
1. Compatibility & Alternative View
MATDOC, ACDOCA 같은 역할 또는 기존의 집계 및 히스토리 테이블의 대체용 View 이다.
가장 찾기 쉬운 예로 아래와 같은 것들이 있다.
NSDM_V_MARC, NSDM_V_MARCH, NSDM_V_MARD, NSDM_V_MARDH...
여기서 NSDM_V_MARC 를 예를들어 SAP 의 설계 방식을 훔쳐보자.
참고로 평소 자기가 좋아하는 테이블의 호환성 뷰를 찾아보면 이해에 도움이 돌 것이다.
위 그래프를 보면 MARC View는 기존의 MARC 테이블과 MARC 집계 뷰의 Left outer Join으로 이뤄져 있음을 알 수 있다.
비록 MATDOC 기준으로 물류정보가 저장(사실 Stock 관련된 테이블은 MATDOC_EXTRACT에 저장됨)으로 바꼈음에도 불구하고 기존의 MARC를 사용하는 이유는 2가지 정도로 예상할 수 있다.
하나는 업그레이드시 기존 데이터를 품기 위해서고 두번째는 MARC 구조를 그대로 사용하기 위해서 였을 것이다. 이렇게 구성된 뷰는 과거 데이터를 보존하면서 기존의 Function 이나 BADI, BAPI의 호환성을 지키는 영리한 방법임이 틀림없다.
만약 집계용 CBO 테이블을 업그레이드 이후 활용하고자 한다면 이 방법을 벤치마킹하면 좋을 것이다.
이 그래프는 하나의 뷰가 사실 다층 레이어로 구성되어 있음을 보여준다.
기존과 동일한 데이터가 리턴될 수 있게 MARC 구조체를 참조한 Result Set 을 기준으로(NSDM_V_MARC_DIFF)
집계 한뒤(NSDM_V_MARC_AGG)
다시 다른 테이블 또는 뷰와 관계를 정의(NSDM_V_MARC)한 아주 전형적인 ABAP CDS View의 모습이다.
1.1. SAP는 CDS View를 어떻게 구성했을까?
1.1.1. 다층 레이어 설계
최종결과에 도달할 때까지 집계용, 분류용 그리고 다시 관계용이 무수히 쪼개져 만들어져 있다.
다시말해 1개의 View에서 끝내지 않고 복잡한 계산식을 나름의 레이어를 나누고 집계 후
다시 관계에 따라 합치고 다시 집계하기를 반복해 만들어져 있음을 확인할 수 있다.
아마 중간 단계 View들의 재사용성을 높히고 유지보수성을 높히기 위해서 그런것으로 보인다.
1.1.2. 일관된 네이밍
- 최종결과와 비슷비슷한 네이밍을 유지하고 있다.
- 정확히 일치하는 규칙은 없으나 대부분 최종 View의 이름을 참조해 그 하위 레이어가 이어지는 것 같다.
1.2.그래서 우리는 어떻게 만들어야 할까?
1.2.1. 우리도 다층 레이어로 설계한다.
- ALV 출력용 인터널테이블 만들 듯이 최종 레이아웃을 나열한 뒤 그 값을 채우기 위한 View를 유형별로 쪼개며 개발한다.
- 단 나를 포함해 대부분의 개발자들이 SAP 소속이 아니기 때문에 SAP 컨셉에 맞는 완벽한 방식을 누구도 알지 못할 뿐더러 다른 개발자와의 설계를 협업할 수 없기에 너무 많이 쪼개면 구성이 산으로 갈 수 밖에 없다.
따라서 스탠다드 분석과 내 경험에 비춰 만든 규칙을 공개하고 독자들에게 제안하고자 한다.
아래 5 유형을 넘지 않아야 하며 각 View이름만 보고도 유형을 파악할 수있도록 별도의 서브 네이밍 규칙을 따른다.
유형 1. 최종결과 Result Set 선언 (흔히 ALV Output 을 위해 선언한 인터널테이블 구조 만들 듯이), 네이밍 규칙: *_L1 또는 (없음)
유형 2. 최종전 하위 레이어과의 관계 + 계산식 포함 (글자 조작, 컬럼별 금액, 수량의 계산이 포함), 네이밍 규칙: *_L2 또는 _DIFF
유형 3. 유형1의 키에 따른 집계, 네이밍 규칙: *_L3 또는 _AGG
유형 4. 유형1의 외래키에 따른 집계, 네이밍 규칙: *_L4 또는 _AGG
유형 5. 중복제거, 네이밍 규칙: *_L5 또는 _DIST
1.2.2. 집계 View 생성시 Where 조건의 파라미터는 물론 View Parameter 를 사용할 수 있으면 최대한 이용해 메모리 사용량을 줄인다.
1.2.3. 가능하다면 join 구문보다 정교한 스펙 아래 association 구문을 활용해 관계를 밝히고 잘못된 데이터로 인한 뻥튀기를 예방한다.
2. VDM(버추얼 데이터 모델링)
S4H로 변하면서 하드웨어와 아키텍쳐 변화를 제외하고 가장 큰 변화를 뽑자면
FI, CO에서 트랜잭션이 발생하면 전표헤더와 아이템, 집계 테이블 등을 나눠 데이터를 저장하지 않고
ACDOCA 에만 기록하도록 ABAP Table이 통합된 것이다.
#Abani Pattanayak, Rajeev Koppolu. 2017. Introducing SAP S4HANA Embedded Analytics(pp. 20). SAP PRESS.
기왕 통합하는거 용도만 맞다면 모든 테이블을 물리적으로 합치고 싶겠지만
사실 굳이 그럴 필요도 없고 구현하기도 어렵다는 것을 어림 짐작할 수 있다.
그래서인지 SAP는 기존의 ABAP 테이블을 최대한 활용하되
HANA 분석 엔진을 이용한 ABAP CDS View를 만들어 제공하고 있다.
이것이 1번에서 언급한 Compatibility & Alternative View 목적일 것이라 생각한다.
여기서 SAP는 더 나아가 S4HANA Embedded Analytics 라는 솔루션(ABAP CDS + Fiori + 자체 솔루션 연계)를 제공하고 있다.
이 S4HANA Embedded Analytics 에는 단순히 기존 테이블을 통합하고 집계하는 용도를 넘어
모듈간 경계가 아닌 업무 분석 단위로 설계된 데이터 모델링된 CDS View를 개발해 BP에 포함되어 있다.
바로 여기서 사용된 개념이 VDM 이다.
#Abani Pattanayak, Rajeev Koppolu. 2017. Introducing SAP S4HANA Embedded Analytics(pp. 20). SAP PRESS.
VDM은 아래와 같은 레이어를 가지고 있고 시멘틱 명령어를 통해 구별된다.
2.1 Consumetion View
2.2 Interface View
2.2.1 Composite View(Private Compiste View)
2.2.2 Basic View(Private Basic View)
#Abani Pattanayak, Rajeev Koppolu. 2017. Introducing SAP S4HANA Embedded Analytics(pp. 22). SAP PRESS.
여기서 View 앞에 Private/Public 이란 레이어 자체를 분류하는 레벨이 아니고 뷰의 속성을 의미하는데
먼저 Private이란 SAP 에서 유지보수하는 속성이라고 이해하고 넘어가시면 된다.
우리 정서에는 Private라고 하면 커스터마이징이 가능한 것처럼 느껴질 수 있으나 그 반대이며
우리가 수정하고 Extend 할 수 있는 View의 속성은 Public 임을 주의한다.
VDM은 이미 BP에 포함되어 있기 때문에 고객이나 개발자가 모르고 있을뿐 이미 서버에 구현되어 있다.
다만 우리가 바빠서(아니면 몰라서) 활용하고 있지 않을 뿐이다.
CBO CDS View를 개발하기전 최대한 유사한 목적의 VDM CDS View를 찾아 본다면 분명 개발 품질을 높히는데 도움이 될 것이다.
만약 프로젝트내 요구사항에 런치패드 쿼리 뷰기능과 KPI 모듈러를 통한 분석이 포함되어 있다면 참고할 가치는 더 높아진다.
3. SAP인증 솔루션, 데모, ABAP 내부사용 목적
SAP에 인증받은 솔루션이나 데모, ABAP 내부적인 사용을 위해 만들어진 View로 우리가 굳이 알 필요는 없을 것 같다.
마무리하며
변화가 무조건 옳지도 빠른 적응이 프로젝트의 품질을 보장하지는 않겠지만
적어도 변화에 대응하려는 노력을 함께 해야 앞으로 다가올 HANA로의 대전환시기에 도움이 될거라 생각한다.
따라서 이런 내용이 최대한 알기쉽고 널리 퍼지고 잘못된 점은 보완되길 바란다.
3부에서는
1부에 언급한 1번으로 언급한 ABAP 단을 넘어 다른 곳에서 쓰려고 만든 ADS View에 대해 다룰 예정이다.
댓글 2
-
낭만돼지
2018.11.20 01:49
-
youngseols
2021.08.27 17:25
정리 잘 해주셔서 감사합니다. 도움 많이 되었습니다.
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
11 | [Guide] 하나 천재가 된 하대리의 비밀 [14] | 공상우 | 2017.12.30 | 7726 |
» | [Guide] ABAP CDS View 아는 만큼 그리고 필요한 만큼 사용하기 2부 [2] | 공상우 | 2017.12.30 | 16674 |
9 | [Tips] ABAP CDS View 에서 Join과 Association 의 차이 | 공상우 | 2017.12.30 | 4938 |
8 | [Tips] S4H 1511 이후 자재문서 테이블에 커스텀 필드 추가방법 >> 23.03 수정 [5] | 공상우 | 2017.12.29 | 4106 |
7 | [Guide] ABAP CDS View 아는 만큼 그리고 필요한 만큼 사용하기 1부 [1] | 공상우 | 2017.12.28 | 6357 |
6 | [Tips] 기존 테이블명으로 CDS View 찾기 [1] | 공상우 | 2017.12.28 | 3739 |
5 | [Tutorial] HANA View 모델링부터 Extention View 까지 [1] | 공상우 | 2017.03.20 | 6587 |
4 | [Tutorial] ABAP CDS 3부 / AMDP / CDS with AMDP [2] | 공상우 | 2017.03.06 | 11319 |
3 | [Tutorial] ABAP CDS 2부 [2] | 공상우 | 2017.03.06 | 7003 |
2 | [Tutorial] ABAP7.4 / ABAP ALV IDA / ABAP CDS 1부 [8] | 공상우 | 2017.02.20 | 9203 |
1 | [Guide]어려운 이야기는 쏙 뺀 ABAP으로 하나 플랫폼 이용하기 [10] | 공상우 | 2017.02.12 | 7919 |
좋은글 감사합니다.