CDS ๋ทฐ(Core Data Services View)

j_wisdom_hยท2025๋…„ 6์›” 9์ผ
0

SAP

๋ชฉ๋ก ๋ณด๊ธฐ
14/19

๐Ÿ’ก SAP CDS ๋ทฐ(Core Data Services View)

1. CDS ๋ทฐ๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

CDS ๋ทฐ๋Š” SQL ๊ธฐ๋ฐ˜์˜ ๋ทฐ(View)๋ฅผ ๋ณด๋‹ค ๊ฐ•๋ ฅํ•˜๊ฒŒ ํ™•์žฅํ•œ SAP์˜ ๋ฐ์ดํ„ฐ ์ •์˜ ์–ธ์–ด์ž…๋‹ˆ๋‹ค.
๊ธฐ์กด ABAP SQL์ด ๊ฐ€์ง„ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๋ฉฐ, ์„ฑ๋Šฅ๊ณผ ๊ฐ€๋…์„ฑ ๋ชจ๋‘๋ฅผ ๊ฐ–์ถ˜ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง ๋ฐฉ์‹์œผ๋กœ ๊ฐ๊ด‘๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ญ๋ชฉCDS ๋ทฐSQL ๋ทฐ
๊ธฐ๋Šฅํด๋ผ์ด์–ธํŠธ ์ฒ˜๋ฆฌ, ๊ถŒํ•œ ๊ด€๋ฆฌ, ์‹œ๋ฉ˜ํ‹ฑ ์ •๋ณด ์ œ๊ณต, ์ตœ์‹  SQL ๊ธฐ๋Šฅ ์‚ฌ์šฉ ๊ฐ€๋ŠฅDB ๊ฐœ์ฒด ํ‘œํ˜„, ์ œํ•œ์  ๊ธฐ๋Šฅ
์ƒ์„ฑ ์œ„์น˜ABAP ๋ ˆํฌ์ง€ํ† ๋ฆฌ์—์„œ ์ •์˜, DB ์ง์ ‘ ์ƒ์„ฑ ์•„๋‹˜DB ๋‚ด๋ถ€์— ์ง์ ‘ ์ƒ์„ฑ
ABAP DictionaryOpenSQL๋กœ ์กฐํšŒ ๊ฐ€๋Šฅ์กฐํšŒ๋งŒ ๊ฐ€๋Šฅ, ์ˆ˜์ • ๋ถˆ๊ฐ€
ํด๋ผ์ด์–ธํŠธ ํ•„๋“œ์‚ฌ์šฉ ๊ฐ€๋Šฅ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฏธ์‚ฌ์šฉ
์‹œ๋ฉ˜ํ‹ฑ ์ •๋ณด์ œ๊ณตํ•จ์ œ๊ณตํ•˜์ง€ ์•Š์Œ

โœ… CDS ๋ทฐ๋Š” ์„ฑ๋Šฅ, ๊ตฌ์กฐํ™”, ์—ฐ๋™ ์ธก๋ฉด์—์„œ ๊ธฐ์กด SQL ๋ทฐ๋ณด๋‹ค ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.


2. CDS ๋ทฐ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์ถ•

CDS ๋ทฐ๋Š” Eclipse ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœํ™˜๊ฒฝ์—์„œ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค.

โœ… ํ™˜๊ฒฝ ๊ตฌ์ถ• ์ ˆ์ฐจ

  1. Eclipse ์„ค์น˜
  2. Help > Install New Software โ†’ SAP HANA ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜
  3. SAP BTP ๋˜๋Š” ABAP ํ”Œ๋žซํผ ์„ ํƒ ํ›„ ์„ค์น˜ ์ง„ํ–‰
  4. New > ABAP Project ์ƒ์„ฑ ํ›„ SAP ์„œ๋ฒ„ ์ ‘์† (ID, PW, Client ์ž…๋ ฅ)
  5. ABAP ํ”„๋กœ์ ํŠธ ๋‚ด์—์„œ CDS ๋ทฐ ์ž‘์„ฑ

โœ๏ธ CDS ๋ทฐ ์ƒ์„ฑ ์œ„์น˜

  • ABAP ํ”„๋กœ์ ํŠธ ๋‚ด๋ถ€์˜ ํŒจํ‚ค์ง€
    โ†’ New > Other > Core Data Services > Data Definition

3. CDS ๋ทฐ ๋ฌธ๋ฒ• ๋ฐ ํ™œ์šฉ ์˜ˆ์‹œ

CDS ๋ทฐ๋Š” SQL SELECT ๊ตฌ๋ฌธ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ์ž‘์„ฑ๋˜๋ฉฐ, ๋‹ค์–‘ํ•œ ๋‚ด์žฅ ํ•จ์ˆ˜ ๋ฐ ์—ฐ์‚ฐ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

โœ… ๊ธฐ๋ณธ ๋ฌธ๋ฒ• ์˜ˆ์‹œ

@AbapCatalog.sqlViewName: 'ZVIEW_EXAMPLE'
define view ZCDS_SALES as select from sflight
{
  carrid,
  connid,
  seatsocc,
  price,
  round( price / seatsocc, 2 ) as avg_price_per_seat
}

โœ… ๊ธฐ์กด ABAP SQL์˜ ํ•œ๊ณ„ vs CDS ๋ทฐ์˜ ๊ฐœ์„  ์˜ˆ์‹œ

๐Ÿ“Œ ์˜ˆ์‹œ 1: ๋‹ค๋‹จ๊ณ„ ์กฐ์ธ / ์ฝ๊ธฐ ๋ณต์žก์„ฑ

โŒ ABAP Open SQL

๊ธฐ์กด ABAP์—์„œ๋Š” ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•˜๋ ค๋ฉด ๋ฐ˜๋ณต์ ์œผ๋กœ SELECT, LOOP, READ TABLE ๋“ฑ์˜ ๋ณต์žกํ•œ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

SELECT * FROM sflight INTO TABLE @DATA(lt_sflight).

LOOP AT lt_sflight INTO DATA(ls_sflight).
  SELECT SINGLE carrname INTO @DATA(lv_carrname)
    FROM scarr
    WHERE carrid = @ls_sflight-carrid.
ENDLOOP.`

โœ… CDS ๋ทฐ

CDS ๋ทฐ์—์„œ๋Š” ์กฐ์ธ์„ ๋ทฐ ์ •์˜์— ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด ๊ฐ„๊ฒฐํ•˜๊ณ  ์„ฑ๋Šฅ๋„ ๋›ฐ์–ด๋‚ฉ๋‹ˆ๋‹ค.

define view ZCDS_FLIGHT_INFO as
  select from sflight
    inner join scarr on sflight.carrid = scarr.carrid
{
  sflight.carrid,
  scarr.carrname,
  sflight.connid,
  sflight.price
}

๐Ÿ“Œ ์˜ˆ์‹œ 2: ๊ณ„์‚ฐ ํ•„๋“œ

โŒ ABAP Open SQL

ABAP์—์„œ๋Š” ๊ณ„์‚ฐ ๋กœ์ง์ด SQL์—์„œ ์–ด๋ ต๊ณ  ๋ณดํ†ต ABAP ์ฝ”๋“œ์—์„œ ์ฒ˜๋ฆฌํ•จ:

DATA(avg_price) = price / seatsocc.`

โœ… CDS ๋ทฐ

๊ณ„์‚ฐ๋œ ํ•„๋“œ๋ฅผ ๋ทฐ ์ •์˜ ์•ˆ์—์„œ ๋ฐ”๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

round( price / seatsocc, 2 ) as avg_price_per_seat

๐Ÿ“Œ ์˜ˆ์‹œ 3: ์‹œ๋ฉ˜ํ‹ฑ & ๊ถŒํ•œ ์ œ์–ด ๋‚ด์žฅ

ABAP SQL์€ ๋‹จ์ˆœํ•œ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ๋งŒ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๊ถŒํ•œ ์ œ์–ด๋‚˜ ํ•„๋“œ ์„ค๋ช…์€ ์ถ”๊ฐ€ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

CDS๋Š” @Annotations๋ฅผ ํ†ตํ•ด ๋ทฐ์— ๊ถŒํ•œ(Authorization), ์„ค๋ช…, UI ์†์„ฑ ๋“ฑ์„ ๋ฐ”๋กœ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'ํ•ญ๊ณตํŽธ ์š”์•ฝ ๋ทฐ'

โœ… ์š”์•ฝ

ํ•ญ๋ชฉABAP SQLCDS ๋ทฐ
๋‹ค๋‹จ๊ณ„ ์กฐ์ธ๋ณต์žกํ•œ ์ค‘์ฒฉ SELECT & LOOP๋‹จ์ผ SELECT ์ •์˜ ๊ฐ€๋Šฅ
๊ณ„์‚ฐ ํ•„๋“œ์ฝ”๋“œ๋กœ ์ˆ˜๋™ ๊ณ„์‚ฐ๋ทฐ ๋‚ด์žฅ ์ˆ˜์‹์œผ๋กœ ์ฒ˜๋ฆฌ
์‹œ๋ฉ˜ํ‹ฑ/๊ถŒํ•œ ๊ด€๋ฆฌ๊ตฌํ˜„ ์ฝ”๋“œ ๋ณ„๋„ ํ•„์š”Annotation์œผ๋กœ ์ง์ ‘ ์„ค์ •
๊ฐ€๋…์„ฑSQL + ABAP ์„ž์ž„๊น”๋”ํ•œ SQL ๊ธฐ๋ฐ˜ ์ •์˜
ํผํฌ๋จผ์Šค๋Ÿฐํƒ€์ž„์—์„œ ์ฒ˜๋ฆฌDB ๋ ˆ๋ฒจ์—์„œ HANA ์ตœ์ ํ™” ์‹คํ–‰
profile
๋šœ์ž‡๋šœ์ž‡

0๊ฐœ์˜ ๋Œ“๊ธ€