R/3에서 “R”과 “3”의 의미

  • “R” = Real-time (실시간 처리 시스템)
  • “3” = 3-Tier 구조 (Presentation, Application, Database)

🧱 R/3 아키텍처의 3계층 구성

 

계층 설명 예시
1️⃣ Presentation Layer 사용자 인터페이스 (UI) SAP GUI, Fiori 앱
2️⃣ Application Layer 비즈니스 논리 처리 ABAP 프로그램, 함수 모듈 실행
3️⃣ Database Layer 데이터 저장소 Oracle, HANA, MS SQL 등 DBMS

 

1. Presentation Layer (표현 계층)

  • 사용자가 직접 마주하는 부분
  • SAP GUI, 웹 브라우저, 모바일 앱 등
  • 입력한 데이터를 전송하고 결과를 보여줌
  • 💬 사용자 → SAP 서버와의 인터페이스

2. Application Layer (애플리케이션 계층)

  • 핵심 ABAP 프로그램, 트랜잭션, 비즈니스 로직이 실행되는 곳
  • 사용자 요청을 해석하고 처리
  • 워크 프로세스 (Dialog, Update, Batch, Spool 등) 수행
  • 두뇌 역할을 하는 중간 계층

 

3. Database Layer (데이터베이스 계층)

  • 실제 데이터가 저장되는 DBMS
  • 테이블, 인덱스, 트랜잭션 로그 관리
  • SAP는 Oracle, HANA, MSSQL 등 다양한 DBMS와 호환됨
  • 📦 모든 마스터 데이터, 트랜잭션 데이터 저장

💡 작동 흐름 예시

사용자(SAP GUI)
	→ 버튼 클릭 
		→ Application Layer가 로직 실행 
			→ DB에서 데이터 조회 
				→ Application Layer가 처리 후 결과 반환 
					→ 사용자 화면에 결과 표시

 

한눈에 보는 R/3 구조

┌───────────────────────┐
│    Presentation       │  ← SAP GUI / 웹 / 앱
└───────────────────────┘
            ↓
┌───────────────────────┐
│   Application Server  │  ← ABAP 실행, 기능 처리
└───────────────────────┘
            ↓
┌───────────────────────┐
│    Database Server     │  ← 테이블, 인덱스, 로그 저장
└───────────────────────┘

 

- sap는 일반 개발자에게 db에 직접 접속해서 데이터를 수정하는 행위를 금지한다.

- db에 접속하여 데이터를 조회하는 권한도 부여하지 않는다 => 무결성, 일관성, 안정성, 투명성 보장

ABAP개발자는 ABAP Dictionary를 통해 데이터베이스 구조(스키마)를 관리한다.

* abap dictionary : Table, View, Structure, Types등

이러한 오브젝트 정보를 Metadata, Data definition or schema로 정의하며 데이터 구조를 정의하고 관리하는 역할을 ABAP Dictionary가 하게 된다.

 

Open SQL vs Native SQL

 

1. Open SQL

ABAP에서 SAP 시스템에 독립적인 방식으로 데이터베이스를 접근하는 SAP 전용 SQL 언어

특징


항목 설명
SAP DB 독립적 어떤 DB를 쓰든지 동일한 문법으로 사용 가능
보안 및 무결성 보장 SAP에서 필터링 및 권한 검사 수행
ABAP 통합 SELECT, INSERT, UPDATE, DELETE 등 ABAP 문법과 자연스럽게 통합
Buffer 사용 SAP 테이블 버퍼 활용 가능 (성능 향상)
 

예시

SELECT * FROM zemployee INTO TABLE @DATA(lt_emp) WHERE age > 25.

- ddl, dcl 사용 X

- select와 같은 DML만 사용 가능함 

- local buffer사용가능!

 


2. Native SQL

DBMS에 종속적인 SQL 문장을 직접 사용해서 데이터에 접근하는 방식

특징


항목 설명
DBMS 종속 사용하는 DB가 Oracle인지 HANA인지에 따라 문법 다름
SAP 무관 SAP가 SQL 구문을 해석하지 않음 → 그대로 DB로 전송
SAP 버퍼 무시 테이블 버퍼를 사용하지 않음
강력한 제어 가능 복잡한 SQL (JOIN, 서브쿼리 등) 가능, 그러나 위험도 있음
 

예시

 
EXEC SQL. SELECT * FROM zemployee WHERE age > 25 ENDEXEC.

- db에 접속해서 dml, ddl언어도 사용 가능.

- open SQL이 해결이 되지 않는 복잡한 SQL은 NATIVE SQL 이용 가능함.

 

SQL 실행 순서

 

SELECT * FROM marc WHERE werks = '1101'.
	IF sy-subrc EQ 0.
    	WRITE marc.
        EXIT.
    ENDIF.
ENDSELECT.

 

1. Marc테이블에서 werks='1101'인 데이터를 조회하는 SQL을 실행한다.

2. DB interface에서 Native SQL로 해석하여 테이블 MARC에서 WERKS필드가 1101인 값을 가져온다.

3. marc 테이블에는 werks='1101'인 row는 3건이며 해당 데이터는 Local Buffer에 저장된다.

4. SQL의 sy-subrc EQ0. 에서 Db에서 값을 가져오는 구문이 성공하면 exit해서 1101의 첫번째 값이 display된다.

5. 해당 SQL을 실행하면, local buffer에서 werks = '1101'인 데이터가 존재하기 때문에 db에 접근하지 않고 바로 local buffer의 데이터를 반환함.

 

 

+ Recent posts