- raspberry pi
- ionic3
- raspbian
- 윈도우 서비스
- TypeScript
- SAP BTP
- cf push
- eclipse plugin
- BTP
- HANA Cloud
- Devian
- sapui5
- BTP 배포
- Capire
- BTP Deployment
- CAP Java
- JavaScript
- ionic native
- blue-green
- HANA DB
- angularJS
- tomcat
- ChatGPT
- 구글맵 예제
- cloud foundry
- Business Application Studio
- ionic
- sap
- Windows Service
- springboot
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- Today
- Total
Ryan's Log
BAS에서 CAP Java(CDS)로 OData만들어 배포하기 본문
이 글은 SAP BTP의 BAS를 사용하여 CAP Java Application으로 CDS를 통해 OData를 구현하고 이를 MTA로 배포 합니다. 이게 대체 머선 말이고...
SAP BTP : Business Technology Platform --> SAP Cloud Platform
BAS : Business Application Studio. --> IDE
CAP : Cloud Application Programming Model --> https://cap.cloud.sap/docs/
CDS : Core Data Service
MTA : Multi-target Application --> https://help.sap.com/docs/BTP/65de2977205c403bbc107264b8eccf4b/d04fc0e2ad894545aebfd7126384307c.html
이 글은 아래 사항들을 설명합니다.
1. BTP Trial에서 BAS 실행
2. BAS Dev Space 생성
3. CAP Java Project 생성
4. CDS Model 및 Service 작성
5. OData 쿼리
6. CDS 배포 / HDI Container 배포 (HANA Deployment Infrastructure)
7. CAP Java Application을 BTP에 배포 (MTA)
사용 가능한 BTP 혹은 이미 만들어 놓은 BTP Trial이 없다면 아래 글을 참고하여 BTP trial을 생성한다.
2022.08.24 - [SAP BTP] - SAP Trial BTP + HANA Cloud DB 생성
SAP Trial BTP + HANA Cloud DB 생성
SAP BTP Trial에 HANA DB생성 후 쿼리 실행 이 글은 아래 사항들을 설명합니다. 1. SAP Universal ID 생성 (가입) 2. SAP BTP trial 생성 3. trial HANA DB 생성 4. HANA DB Explorer (Cloud Web DB Client ??) 소개 BTP Trial에 로그인
ryans-log.tistory.com
SAP BTP 혹은 BTP trial에 로그인 한 후 Business Applicatoin Studio를 실행한다.
Service Marketplace에서 Business Application Service를 검색하여 찾아 실행한다.
Dev Space를 만들어야 한다. "Create Dev Space"
Full Stack Cloud Application을 선택하고 이 Dev Space를 구분 할 이름을 입력 한 후 "Create Dev Space" 클릭
생성된 Dev Space를 Start하여 구동한다. (생성 시 자동 구동됨)
Dev Space는 trial인 경우 최대 2개 생성 가능하고 동시에 1개만 구동 가능하다.
구동 된 Dev Space 실행 하여 BAS를 실행한다.
BAS는 Visual Studio Code의 Web 버전이다. 이런 저런 SAP Application을 개발 할 수 있는 extension들을 포함한 Web VSCode이며 BTP에 연결되어 있다.
VSCode for Web을 상상하면 된다.
https://vscode.dev/
Visual Studio Code for the Web
Build with Visual Studio Code, anywhere, anytime, entirely in your browser.
vscode.dev
SAP가 만들어놓은 Template을 기반으로 CAP Java Application을 만든다.
열려있는 "Get Started" 화면에서 "Start form template"으로 부터 시작된다.
CAP Project 선택 후 "Next"
CAP Project Details를 입력한다.
Runtime은 Java를 선택하고, Configuration SAP HANA Deployment, MTA based BTP Deployment를 선택한다.
Configuration SAP HANA Deployment :
CDS Model table과 Service view등을 HANA DB로 배포하여 생성 하는데 필요한 설정이 추가된다.
MTA based SAP BTP Deployment :
BTP에 개발된 application을 배포할 때 MTA배포를 이용 할 수 있다.
MTA를 사용하지 않아도 CF(Cloud Foundry) deploy를 이용해 배포 할 수 있다.
"Finish" 버튼을 눌러 프로젝트를 생성한다.
생성된 후 생성한 프로젝트로 작업 폴더가 변경된다.
폴더를 펼쳐보면 아래와 같다.
db 및 srv 폴더 하위에 schema와 service cds를 작성한다.
db/schema.cds에 Countries, Populations 두 entity를 작성하고, Populations의 country_code로 Countries에 assocation한다.
namespace org.starj.cds.demo;
using { Currency, managed, sap } from '@sap/cds/common';
type GeoPoint : String;
type Timezone : String;
type CountryCode : String(2);
type LanguageCode : String(2);
entity Countries {
official_language : LanguageCode;
key country_code : String(2);
iso3_code : String(3);
onu_code : Integer;
name_en : String;
name_fr : String;
name_sp : String;
geo_point : GeoPoint;
}
entity Populations {
key id : Integer;
name : String;
ascii_name : String;
alternate_name : String;
feature_class : String(1);
feature_code : String;
country_code : CountryCode;
country : Association to Countries on country_code = country.country_code;
population : Integer;
elevation : Integer;
timezone : Timezone;
geo_point : GeoPoint;
}
srv/service.cds에 path가 /main인 MainService를 작성 한 후 Countries와 Populations를 MainService에 노출한다.
namespace org.starj.cds.demo;
using { org.starj.cds.demo as model } from '../db/schema';
service MainService @(path:'/main') {
entity Countries as select from model.Countries {
*
} excluding { onu_code, geo_point };
entity Populations as projection on model.Populations;
action adjustPopulation(population_id: model.Populations:id, population: Integer);
};
schema.cds, service.cds가 작성된 모습
CDS 서비스 구동 시 schema.cds에 의해 만들어질 Countries, Populations 두 테이블에 기본 데이터를 채울 수 있다.
db/data 폴더 생성 후 하위에 .csv 파일을 아래 그림과 같이 namespace와 entity 이름의 조합으로 생성한다.
org.starj.cds.demo-Countries.csv
org.starj.cds.demo-Population.csv
두 파일은 첨부한 두 csv 파일로 채운다. (BTP의 Explorer에 Drag & Drop으로 업로드 가능)
csv 파일의 첫 줄은 헤더로 entity에 정의한 컬럼 명을 나열하고, 두번째 행 부터 데이터를 정의한 컬럼 type에 맞게 작성하면 된다.
위 데이터 Countries, Populations는 아래 opendatasoft.com에서 csv로 다운로드 하여 일부 편집함
https://public.opendatasoft.com/explore/dataset/countries-codes/table/
이제 terminal을 열고 SpringBoot을 구동하여 OData 결과를 확인한다.
> mvn spring-boot:run
구동 후 BAS의 우측 하단에 Port 8080이 exposed된 결과 메시지를 통해 제공된 서비스 URL에 접속 할 수 있다.
"Open in a New Tab" 버튼 클릭하여 OData $metadata와 main 서비스의 Countries, Populations 두 entity의 결과를 확인 할 수 있다.
다만 Spring Security에 의해 인증이 필요하다.
사용자이름은 user
비밀번호는 BAS의 terminal에서 spring-boot:run 구동 로그에 있다.
사용자이름 및 비밀번호를 넣고 OData 결과를 확인한다.
OData URL에 아래와 같이 query파라메터를 추가하여 원하는 결과를 얻어낼 수 있다. 왜 OData를 써야 하는지 느껴보자.
/odata/v4/main/Populations?$filter=timezone eq 'Asia/Seoul'
/odata/v4/main/Populations?$top=10&$expand=country
/odata/v4/main/Populations?$top=10&$filter=timezone%20eq%20%27Asia/Seoul%27&$expand=country
/odata/v4/main/Populations?$orderby=population desc&$filter=timezone eq 'Asia/Seoul'
아래 사이트에서 OData v4의 URL Conventions 확인
https://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html
OData Version 4.01. Part 2: URL Conventions
docs.oasis-open.org
다음으로 작성 한 CDS를 BTP의 HANA DB에 배포하고, 생성한 CAP Java Application 또한 BTP에 배포하여 서비스한다.
BTP는 Cloud Foundry 기반 클라우드 플랫폼이며, 배포를 위해 Cloud Foundry(이하 CF)에 로그인 해야한다.
또한 연결할 BTP에 HANA DB가 생성되어 준비되어 있어야 한다.
HANA DB생성 또한 아래 글 참조
2022.08.24 - [SAP BTP] - SAP Trial BTP + HANA Cloud DB 생성
SAP Trial BTP + HANA Cloud DB 생성
SAP BTP Trial에 HANA DB생성 후 쿼리 실행 이 글은 아래 사항들을 설명합니다. 1. SAP Universal ID 생성 (가입) 2. SAP BTP trial 생성 3. trial HANA DB 생성 4. HANA DB Explorer (Cloud Web DB Client ??) 소개 BTP Trial에 로그인
ryans-log.tistory.com
아래 CF API 명령으로 연결할 Target API Endpoint를 지정 한 후 이에 로그인 한다. "cf api <API Endpoint>"
> cf api https://api.cf.us10.hana.ondemand.com
여기서 API Endpoint는 아래 그림처럼 BTP의 trial Subaccount의 Cloud Foundry Environment에 있다.
BAS의 터미널에서 API Endpoint를 지정했다면 다음 명령으로 CF에 로그인 한다.
> cf login
BTP에 로그인 할 때 사용하는 계정의 email / password를 넣는다.
로그인에 성공하였다면 "cf target" 명령으로 연결된 정보 확인 가능하다.
CF에 로그인 후 HANA DB로 CDS를 배포한다.
관련 문서는 : https://cap.cloud.sap/docs/guides/databases?q=cds+deploy#deployment
> cds deploy --to hana
cds deploy는 HANA DB에 이 CAP Java Application이 사용할 새로운 HDI Container를 생성하여 배포한다.
이때 별도로 이름을 지정하지 않으면 <프로젝트명> + '-db' 형태의 이름을 기본값으로 하여 Container를 생성한다.
위 그림의 "starj-capjava-cds-demo-db" 값이 명시적인 Container의 이름이다.
CDS를 수정 한 후 재 배포시에도 동일한 이 이름의 HDI Container에 배포하여야 한다.
배포 결과를 확인하기 위해 DB Explorer에 접속하여 좌측 상단의 + 버튼을 클릭하여 배포 된 HDI Container를 추가한다.
Instance Type을 HDI Container로 변경하면 BTP HANA Cloud DB에 배포된 모든 HDI Container들의 목록이 나타난다.
이중 배포한 HDI Container "starj-capjava-cds-demo-db"를 선택하고 "OK" 버튼을 클릭하여 추가한다.
배포를 통해 생성한 DB Schema 및 테이블 데이터를 확인하여 CDS가 정상 배포됨을 확인한다.
CDS 배포 성공 후 CAP Java Application을 BTP에 배포한다.
본 프로젝트 생성 시 함께 옵션으로 선택한 MTA(Multi Target Application)로 빌드하고 것이며 빌드 후 생성된 .mtar 파일을 배포한다.
배포를 위해 mta.yaml 파일을 마우스 우클릭 하여 "Build MTA Project"를 실행한다.
이 과정은 Terminal에서 "mbt build"를 실행 한 것과 같다.
빌드를 성공하면 아래 그림과 같이 프로젝트 폴더 내에 "mta_archives" 폴더와 함께 빌드된 .mtar 파일이 생성된다.
이제 이 .mtar파일을 우클릭 하여 "Deploy MTA Archive"를 실행한다. 현재 로그인된 CF에 Application을 배포하는 과정이다.
터미널에서 "cf deploy ./mta_archives/starj-capjava-cds-demo_1.0.0-SNAPSHOT.mtar" 명령을 실행 한 것과 동일하다.
배포 후 배포된 결과를 BTP Cockpit의 Space > Application에서 확인 가능하며, 위 그림 mta.yaml에 등록된 대로 크게 db-deployer와 srv로 나뉘어 배포된다.
배포된 srv를 클릭하여 "Application Routes" 아래 생성된 Routing URL을 클릭하면 배포된 결과 application을 확인 할 수 있다.
main 서비스 및 $metadata등은 사용자 인증을 필요로 하는 서비스다.
위 그림과 같이 사용자이름 및 비밀번호를 물어보는 것은 당연하며 사용자 인증이 필요 없도록 service.cds를 아래와 같이 @requires : 'any' Annotation을 추가한 후 CAP Java Application을 재 배포한다.
namespace org.starj.cds.demo;
using { org.starj.cds.demo as model } from '../db/schema';
service MainService @(path:'/main', requires: 'any') {
...
};
참고로 CDS의 Annotation은 DB Object에 영향을 주지 않는다. 따라서 cds 재 배포는 필요 없다.
하지만 MTA에 포함된 db-deployer에 의해 cds deploy가 Application 배포 시 같이 진행된다.
아래 결과는 BTP에 배포된 Application의 실행 결과이며, 데이터는 HANA DB로 부터 쿼리된다.
본 글의 소스코드는 아래에서 받을 수 있다.
https://github.com/devidiot/demo-capjava-cds
'SAP BTP' 카테고리의 다른 글
SpringBoot + JPA(HANA Cloud DB) + BTP 배포 (gradle project) (0) | 2022.11.19 |
---|---|
SpringBoot + MyBatis + HANA Cloud DB 구성 + BTP 배포 (maven project) (1) | 2022.08.29 |
SAP Trial BTP + HANA Cloud DB 생성 (0) | 2022.08.24 |