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의 데이터를 반환함.
'SAP' 카테고리의 다른 글
easy abap 10. select - join & 그 외 문법 (0) | 2025.05.09 |
---|---|
easy abap 09. SELECT (0) | 2025.05.08 |
easy abap 07. constants, statics, tables (0) | 2025.05.07 |
easy abap 06. abap dictionary table, view, structure, move, move-corresponding, 구조체의 산술연산 (0) | 2025.05.07 |
easy abap 05.구조체 structure타입 선언 (0) | 2025.05.07 |