본문 바로가기

ABAP 프로그래밍 개념/ABAP Data Dictioanry

1.1 Creating a Database Table

하나하나 스텝별로 ABAP Data Dictionary에서 Database Table을 만드는 방법에 대해서 알아보겠습니다.


1.


ABAP Data Dictionary의 초기 화면에서, 데이터베이스 테이블 라디오 버튼을 선택하고 생성하려는 데이터베이스 테이블의 이름을 입력한 후 생성 버튼을 클릭합니다. 데이터베이스 테이블의 이름은 Customer Namespace (고객 네임스페이스, Y 또는 Z로 시작)에 있어야 합니다.


2.


테이블은 Dictionary: Change Table 화면에서 열립니다. 이 화면에서 테이블에 대한 의미 있는 설명을 제공할 수 있습니다. 기본적으로 시스템은 Transparent Table을 생성합니다. Cluster, Pool 또는 Global Temporary 테이블과 같은 다른 유형의 테이블을 생성하려면  Extras • Change/Display Table Type를 선택하여 테이블 카테고리를 변경하세요.

아래 적힌 테이블 카테고리는 ABAP Data Dictionary에서 정의될 수 있습니다.

▶ Transparent Table : ABAP 데이터 사전에서 정의된 각 Transparent Table은 기본 데이터베이스에 정확히 하나의 동일한 이름과 필드를 가진 데이터베이스 테이블을 생성합니다. 비즈니스 데이터를 저장하는 테이블을 포함한 모든 Custom Table은 Transparent Table로 정의되어야 합니다.

▶ Pooled Table and Cluster Table : Pool Table과 Cluster Table은 SAP에 특화된 데이터베이스 테이블 카테고리로, 기본 데이터베이스 테이블과 일대다 관계를 가지고 있습니다. 다시 말해, ABAP Data Dictionary에서 Pool Table과 Cluster Table을 정의하면 기본 데이터베이스에 여러 개의 데이터베이스 테이블을 생성할 수 있습니다. 이러한 테이블은 일반적으로 SAP에서 내부 제어 정보, 문서 등을 저장하는 데 사용됩니다.

더보기

이러한 테이블은 비즈니스 데이터를 저장하는 데 사용해서는 안 됩니다. SAP는 기존의 Pool Table과 Cluster Table을 Transparent Table로 변환하는 것을 권장합니다. Transparent Table과 유사하게, Pool Table과 Cluster Table에 대해 Open SQL 문을 사용하여 액세스할 수 있지만, Pool Table과 Cluster Table에 대해서는 Native SQL 문을 사용할 수 없습니다.

▶ Global temporary tables (GTTs) :  SAP NetWeaver 7.5의 출시로 새로운 GTT(General Temporary Table) 범주가 제공됩니다. GTT는 데이터베이스 논리적 처리 단위(LUW : Logical Unit ot Work) 내에서 임시 데이터를 저장하는 데 사용되는 특수한 Transparent Table입니다. 각 대화 단계(Dialog Step) 사이에는 데이터베이스 LUW가 존재합니다. 각 대화 단계(Dialog Step)는 두 개의 연속된 화면 사이에서 프로그래밍 로직을 포함합니다. 프로그램의 개별 대화 단계는 응용 서버(Application Server)의 다른 작업 프로세스에서 실행될 수 있으며, 프로그램은 여러 (Dialog Step)로 구성됩니다. GTT를 사용하면 임시 소계를 저장하는 등 복잡한 데이터베이스 프로세스를 여러 단계로 분할할 수 있습니다.

더보기

GTT(General Temporary Table)는 데이터베이스 LUW 내에서 임시 데이터를 저장하기 위해 특별히 설계되었으며, 일반적인 Transparent Table보다 훨씬 낮은 관리 비용이 발생합니다. GTT는 데이터베이스 LUW의 시작 시점에 항상 비어 있으므로, 각 데이터베이스 LUW의 끝에서는 GTT를 지워야 합니다. 데이터베이스 시스템은 일반적으로 GTT에 대한 네이티브 지원을 제공하며, 이는 GTT 데이터베이스 테이블의 데이터를 트랜잭션별 데이터로 암묵적으로 정의합니다. 이로써 GTT의 데이터는 데이터베이스 LUW의 끝에서(데이터베이스 커밋 또는 롤백이 수행될 때) 암묵적으로 삭제됩니다.

ABAP Data Dictionary에 정의된 GTT를 Open SQL 문을 사용하여 명시적으로 채운 경우, 데이터베이스 LUW의 끝에서 명령문 DELETE FROM dbtab을 사용하여 명시적으로 지워야 합니다. 또한 ABAP 문장인 COMMIT WORK, COMMIT CONNECTION, ROLLBACK WORK, ROLLBACK CONNECTION 또는 관련된 Native SQL 문장을 사용하는 경우에도 GTT를 명시적으로 지워야 합니다. COMMIT WORK 및 ROLLBACK WORK 문은 현재 열려있는 모든 데이터베이스 연결의 GTT를 지웁니다. 그러나 COMMIT CONNECTION 및 ROLLBACK CONNECTION 문을 사용하여 지정된 연결의 GTT를 삭제할 수 있습니다.

암묵적인 데이터베이스 COMMIT이 수행되기 전에 ABAP Data Dictionary의 GTT가 명시적으로 DELETE FROM dbtab 문으로 지워지지 않으면, 런타임 오류 COMMIT_GTT_ERROR가 발생합니다. 이러한 런타임 오류는 테이블이 비어 있더라도 WHERE 절이 포함된 DELETE FROM dbtab 문이 제공된 경우에도 발생합니다.

SAP는 ABAP Data Dictionary GTT의 명시적인 지움을 강제하여 코드가 투명하고 이해하기 쉬운지를 보장합니다. 예를 들어, 개발자는 원격 함수 호출(RFC)에 의해 수행된 데이터베이스 LUW로 인해 테이블이 암묵적으로 지워진 경우에 프로그래밍 모듈 사이에서 테이블이 비어 있다는 사실에 놀라게 될 수 있습니다. GTT를 명시적으로 지움으로써 플랫폼 종속성을 피하는 데에도 도움이 됩니다. 왜냐하면 모든 데이터베이스 시스템이 GTT를 암묵적으로 지우지는 않기 때문입니다. GTT는 일반적인 투명 테이블과 동일하게 Open SQL 및 Native SQL 문을 사용하여 액세스할 수 있습니다. 그러나 SAP는 GTT 작업 시 Open SQL 문만 사용할 것을 권장합니다.


3.


Dictionary: Change Table 뷰는 데이터베이스 테이블의 다양한 속성을 유지하기 위해 여러 탭으로 구성됩니다. Delivery and Maintenance이 기본적으로 선택되어 있습니다. 이 탭에서는 Delivery Class와 Data Browser/Table View Maint 설정을 관리할 수 있습니다.

▶ Delivery Class : 이 필드를 사용하여 데이터베이스 테이블에 포함될 데이터 유형을 선택할 수 있습니다. 아래 그림에서와 같이 사용 가능한 옵션 중 하나를 선택하기 위해 (F4) 도움말을 사용하면 됩니다. Delivery Class에 선택한 옵션은 설치, 업그레이드 및 클라이언트 복사 중에 테이블 데이터의 전송을 제어합니다. 이 설정은 또한 커스텀 시스템 간의 전송에도 영향을 줍니다. 이 예제에서는 응용 프로그램 데이터를 이 테이블에 저장할 수 있도록 A 값을 선택하면 됩니다.

▶ Data Browser/Table View Maint: 이 필드를 사용하여 사용자가 수동으로 데이터를 입력할 수 있는지 또는 테이블이 프로그램(예: 트랜잭션 SE16)을 통해서만 업데이트될 수 있는지를 제한할 수 있습니다. 드롭다운 목록에서 관련 옵션을 선택하세요. 이 설정에 대해 자세히 알아보기 위해 두 필드 모두 (F1) 도움말을 사용하세요.

 


4.


Delivery and Maintenance 탭에서 설정을 유지한 후, 필드 탭을 클릭하여 데이터베이스 테이블의 필드를 유지하세요 . 필드 탭은 필드의 다양한 속성을 유지하기 위한 테이블 컨트롤을 제공합니다.

Fields 탭에서는 테이블은 다수의 컬럼을 포함하고 있습니다
Field : 필드의 이름을 적는 곳. 필드이름에 허용가능한 캐릭터들은 Letter, Number, Underscore(_)입니다. 필드이름은 문자로 시작해야합니다. 필드이름은 16글자를 넘길 수 없습니다.

  Key : 이 체크박스를 선택하면 해당 필드는 테이블 키의 일부입니다. 모든 키 필드는 테이블 상단에 연속적으로 위치해야 합니다.

  Initial Values : 데이터베이스에 NOT NULL 플래그를 설정하려면 이 체크박스를 선택하세요. 이 설정은 기존 데이터베이스 테이블에 새로운 필드를 추가할 때 유용합니다. 시스템은 필드의 모든 행에 대해 타입 호환 가능한 초기값으로 자동으로 채웁니다. 기존 테이블의 새로운 필드에 이 플래그가 설정되지 않은 경우 시스템은 해당 필드의 모든 행에 대해 NULL 값을 할당합니다. ABAP에서는 NULL에 해당하는 상대적인 값이 없으므로, 이 필드는 Open SQL에서 특별한 WHERE 조건인 IS NULL 또는 IS NOT NULL을 사용하여 쿼리할 수 있습니다.

이 세팅을 사용할 때는 아래와 같은 요점을 주의깊게 생각하고 있어야합니다.

-이 설정은 새로운 테이블에는 영향을 미치지 않습니다. 왜냐하면 새로운 테이블에는 기본적으로 NOT NULL 플래그가 설정되기 때문입니다. 이 플래그는 항상 키 필드에 설정됩니다.

-테이블의 구성 요소는 ABAP Data Dictionary에 있는 다른 flat Structure의 구성 요소를 포함하여 정의할 수 있습니다. 이러한 구조는 Include Structure 라고 합니다. 이 플래그가 인클루드 구조에 설정되면, 설정된 플래그에만 해당하는 구조 구성 요소에 적용됩니다. 만약 구조 구성 요소에 이 플래그가 설정되지 않았다면 무시됩니다.

-이 플래그는 필요한 경우에만 또는 테이블에 몇 개의 레코드만 있는 경우에 사용하는 것이 좋습니다. 많은 레코드가 있는 테이블에서는 타입 호환 가능한 초기값을 설정하는 데 시간이 오래 걸릴 수 있습니다.

Data Element : 필드가 의미론적 및 기술적 속성을 상속해야 할 Data Element를 제공하십시오. 새로운 Data Element를 생성하려면 Data Element의 이름을 입력한 다음 두 번 클릭하십시오.

  Data Type / Length / Decimal Places / Short Description : 이 필드들은 기본적으로 비활성화되어 있으며, 이전 필드에서 제공된 Data Element를 기반으로 자동으로 채워집니다. 이러한 필드를 수동으로 유지하려면 "Predefined Type" 버튼을 클릭하고 세부 정보를 수동으로 입력하면됩니다. 데이터 요소가 없는 필드에는 제한된 기능만 제공됩니다. 이러한 필드에는 Foreign Key(외래키)나 Fixed Value가 정의될 수 없습니다. 이러한 필드에 대해서는 (F1) 도움말이 제공되지 않습니다.

  Group : 테이블에 Structure를 포함할 때 해당 Structure에 그룹 이름을 할당할 수 있습니다. ABAP 프로그램은 그룹 이름을 사용하여 해당 Include Structure의 필드를 개별적으로 또는 함께 액세스할 수 있습니다. 그룹 이름을 제공하는 것은 선택 사항입니다. 그러나 Include Structure의 구성 요소는 테이블의 일부이므로 테이블 이름 참조를 사용하여 직접 액세스할 수 있습니다.


5.


"Fields" 탭에서 항목 작성을 마친 후 "Entry help/check" 탭으로 이동하십시오. 이 탭에는 필드에 대한 연결된 체크 테이블(Check Table), 입력 도움말(Input Help) 및 검색 도움말(Search Help)에 대한 정보가 표시됩니다.

 


6.


만약 테이블에 통화 (CURR 유형) 또는 수량 (QUAN 유형) 필드가 있는 경우, 참조 필드는 "Currency/Quantity Fields" 탭에서 유지되어야 합니다(아래 그림 참조). 통화 필드는 CUKY 유형의 필드를 참조해야 하며, 수량 필드는 UNIT 유형의 필드를 참조해야 합니다. Reference fields(참조 필드)는 동일한 테이블이나 다른 테이블에 존재할 수 있습니다. 이 탭은 테이블에 통화 또는 수량 필드가 없는 경우 무시할 수 있습니다.


7.


모든 필드가 입력 & 유지되는 후에는 테이블의 enhancement category를 유지해야 합니다. 그렇지 않으면 시스템이 활성화 중에 경고 메시지를 생성합니다. enhancement category를 유지하기 위해 "Extras • Enhancement Category"를 선택하여 표시된 아래 그림과 같은 "Maintain Enhancement Category" 대화 상자를 엽니다. 다음 옵션을 사용할 수 있습니다.

- Can Be Enhanced(Deep) : 이 옵션을 선택하면 테이블에 어떤 유형의 필드든지 추가하여 개선할 수 있습니다.

- Can be enhanced (character-type or numeric) : 이 옵션을 선택하면 테이블은 문자 또는 숫자 필드로 개선될 수 있지만 테이블, 객체 참조(Data Reference) 또는 문자열과 같은 Deep Data Types을 포함해서는 안 됩니다.

- Can be enhanced (character-type) : 이러한 테이블은 문자 유형 필드 (C, N, D, T 및 X 유형)만으로 개선할 수 있습니다.

- Cannot Be Enhanced : 이 옵션을 선택하면 테이블은 어떤 방식으로도 개선되지 않아야 합니다.

아래 그림처럼, "Information" 아이콘을 클릭하여 이 옵션에 대해서 더 확인할 수 있습니다.


8.


테이블의 enhancement category를 유지한 후에는 활성화되기 전에 테이블의 기술적인 설정(Technical Setting)을 유지해야 합니다.

Technical setting은 테이블이 데이터베이스에서 어떻게 생성되는지를 정의합니다. 테이블의 Technical setting 화면을 호출하기 전에 테이블을 저장하십시오. 테이블의 Technical setting을 유지하려면 application toolbar에 있는 "Technical Settings" 버튼(위 그림 참조)을 클릭하여 "Dictionary: Maintain Technical Settings" 화면(아래 그림 참조)을 호출합니다. 이렇게 하면 SE13 트랜잭션이 열립니다.


9.


Technical setting 화면에서 데이터베이스 테이블을 위한 Technical setting을 설정할 수 있습니다.

▶ Data Class : 이 설정은 Oracle과 Informix 데이터베이스 플랫폼에만 중요합니다. 다른 모든 데이터베이스 플랫폼에서는 이 설정을 무시해야 합니다. 이 설정은 테이블이 생성되어야 하는 데이터베이스의 물리적 영역인 테이블스페이스를 결정합니다. (F4) 도움말을 사용하여 테이블에 저장할 데이터 유형을 선택하십시오. 값에 따라 시스템은 자동으로 테이블의 위치를 데이터베이스에서 결정합니다.

▶ Size Category : 이 설정은 데이터베이스 테이블에 할당할 초기 메모리 공간을 결정합니다. 초기 메모리 공간이 소진되면 확장(extends)이라고 하는 동일한 값으로 테이블의 크기가 증가합니다. 너무 많은 작은 메모리 영역이나 너무 큰 메모리 영역을 피하기 위해 적절한 추정치를 제공해야 합니다. (F4) 도움말을 사용하여 해당 값을 선택하십시오. 컨설턴트에게 예상 레코드 수에 대한 추정치를 요청하여 초기 세팅을 잘 설정하여야 합니다.

▶ Bufffering : 이러한 설정은 데이터베이스 테이블의 데이터를 버퍼링할지 여부를 결정합니다. 버퍼링이 켜져 있는 경우, 시스템은 데이터베이스 내용의 복사본을 응용 프로그램(Application Server) 서버에 유지하여 데이터 선택 속도를 높이고 성능을 향상시킵니다. 버퍼링된 테이블의 데이터는 응용 프로그램 서버(Application Server) 버퍼에서 직접 액세스할 수 있으므로 데이터베이스에 액세스하고 네트워크 부하를 줄이는 번거로운 프로세스를 피하는 데 도움이 됩니다.

버퍼링은 자주 변경되지 않는 데이터에 대해 권장됩니다. 응용 프로그램이 응용 프로그램 서버(Application Server)의 버퍼링된 테이블의 데이터를 변경할 때, 데이터베이스 인터페이스는 이 변경 사항을 로그에 기록합니다. 동기화 프로그램은 이 로그를 확인하고 정기적인 간격(예: 1분에서 2분마다)으로 변경 사항에 따라 업데이트하여 응용 프로그램 서버(Application Server) 버퍼를 해당 데이터베이스 테이블의 데이터와 동기화합니다. 데이터베이스 테이블의 데이터가 자주 변경된다면, 동기화 프로그램은 지속적으로 버퍼의 데이터를 업데이트하며 시스템 성능에 영향을 줄 수 있습니다. 이러한 이유로, 데이터가 자주 변경되는 테이블에 대해서는 버퍼링을 권장하지 않으며, 실시간 데이터에 액세스가 필요한 경우에도 버퍼링을 사용하지 않는 것이 좋습니다.

아래는 버퍼링 허가를 가능하게 하는 옵션들입니다.

- Buffering Not Allowed : 이 설정은 데이터베이스 테이블의 버퍼링을 해제하고 이 테이블이 어떠한 시스템에서도 버퍼링되지 않아야 함을 지정합니다.

- Buffering allowed but switched off : 이 옵션은 데이터베이스 테이블에 대해 버퍼링이 초기에는 해제되지만, 테이블의 사용 방법에 따라 나중에 다른 시스템에서 활성화될 수 있음을 지정합니다.

- Buffering Activated : 이 설정은 버퍼링을 활성화하고 데이터베이스 테이블 내용을 응용 프로그램 서버(Application Server)에 버퍼로 저장합니다.

- Buffering Type : 테이블 버퍼가 활성화되면 버퍼링 유형(Buffering Type)을 정의해야 합니다. 버퍼링 유형(Buffering Type)은 데이터베이스 테이블에서 레코드를 읽을 때 얼마나 많은 레코드를 버퍼로 유지할지를 정의합니다.

다음과 같은 버퍼링 유형을 사용할 수 있습니다: Single Records Buffered(단일 레코드 버퍼링), Generic Area Buffered(일반 영역 버퍼링) 및 Fully Buffered(전체 버퍼링).

Single Records Buffered가 선택된 경우 프로그램에서 액세스하는 행만 버퍼로 유지됩니다. Generic Area Buffered가 선택된 경우 입력 필드에 키 필드 수를 입력해야 합니다. 데이터베이스 테이블에서 행을 읽을 때, 시스템은 이 설정에 대해 유지되는 주 키 필드와 일치하는 모든 행을 버퍼로 유지합니다. 또한, Fully Buffered가 선택된 경우 테이블의 모든 행이 읽힐 때 테이블의 모든 행이 버퍼로 유지됩니다. 이 옵션을 선택하면 데이터베이스 테이블의 모든 데이터가 버퍼에 존재하거나 데이터가 전혀 존재하지 않게 됩니다.

▶ Log data changes : 이 설정은 테이블의 데이터 변경 사항을 로그로 기록할지 여부를 결정합니다. 이 옵션이 선택된 경우, 데이터베이스 테이블의 데이터 변경 사항은 모두 로그에 기록됩니다.

▶ Wirte access only wirh JAVA : 이 설정이 선택된 경우, 테이블의 데이터는 Java 애플리케이션에서만 업데이트 또는 수정할 수 있습니다.


10.


필요한 설정을 완료한 후에는 표준 도구(standard toolbar)에서 "저장"을 클릭하십시오. Technical setting을 저장한 후에는 "뒤로" 버튼을 클릭하여 테이블로 돌아가고 활성화하십시오. 테이블이 활성화될 때 데이터베이스의 물리적인 테이블이 생성됩니다.

반응형

'ABAP 프로그래밍 개념 > ABAP Data Dictioanry' 카테고리의 다른 글

1.4 Foreign Keys  (0) 2023.05.26
1.3 Table Maintenance Generator  (0) 2023.05.25
1. 2 Index  (0) 2023.05.25
1. Database Table  (0) 2023.05.16
ABAP Data Dictioanry Overview  (0) 2023.05.16