S/4HANA 시대 ABAP 개발자라면 **ABAP Cloud**와 **Clean Core**라는 말을 피해 갈 수 없다. ABAP Cloud는 클라우드 전용 새 언어가 아니다. 업그레이드에서 안 깨지는 코드만 쓰도록 강제하는 개발 규칙이다. 좀 더 정확히는 ABAP Cloud = 클래식 ABAP의 **제약 버전**인 'ABAP for Cloud Development' 언어 + 개발 모델이고, 트랜잭션은 [RAP](/education/abap-rap-introduction)로 짠다. 핵심 규칙은 셋이다 — ① SAP가 안정성을 보증한 **릴리스된(released) API만** 쓰고, ② 직접 테이블 접근·`WRITE`·dynpro 같은 **업그레이드에 불안정한 구문은 컴파일 단계에서 차단**하며, ③ 트랜잭션 모델로 RAP를 쓴다. ## 왜 지금 ABAP Cloud인가 ECC에서 개발자가 자유롭게 짠 코드(표준 테이블 직접 `SELECT`, BAPI 직접 콜, 암묵적 인핸스먼트)는 SAP가 내부 구조를 바꾸면 그대로 깨졌다. 업그레이드 때마다 SPDD/SPAU 지옥이 반복된 이유다. **Clean Core**는 이 악순환을 끊자는 것 — 표준은 건드리지 말고, SAP가 공개·보증한 통로로만 확장하자는 원칙이다. ABAP Cloud는 그 원칙을 **언어 차원에서 강제**하는 장치다. ## 릴리스된 API와 안정성 계약 ABAP Cloud의 핵심은 '릴리스(released)' 개념이다. SAP가 '릴리스됨'으로 지정한 객체(API)만 쓸 수 있고, 그런 객체는 **릴리스가 올라가도 인터페이스가 바뀌지 않는다고 SAP가 보증**한다. 이걸 안정성 계약(stability contract)이라 하고, 그 한 등급이 **C1**이다(공개적으로 안정성을 보증한 API). 릴리스 여부는 ADT(Eclipse)에서 확인한다. 프로젝트 탐색기(Project Explorer)의 **Released Objects** 노드에서 목록을 보거나, 객체 속성(Properties) 탭의 **API State**에서 계약 등급(C1 등)을 본다. 참고로 ABAP Cloud 개발 자체가 `SE80` 같은 SAP GUI 툴로는 안 되고 **ADT에서만** 가능하다. ## 막히는 클래식 구문 ABAP Cloud에서 컴파일 단계에 막히는 대표 구문들이다. | 막히는 것 | 대안 | |---|---| | 릴리스되지 않은 SAP 표준 테이블 직접 `SELECT` (예: `SPFLI`) | 릴리스된 **CDS 엔티티**로 우회 | | `WRITE` / 클래식 리스트 | RAP + Fiori UI | | dynpro 화면 | Fiori Elements / RAP | | 실행형 리포트(report) 자체 | 클래스 + RAP | | 동적 프로그래밍 일부 (구조·타입 동적 참조 등) | 신문법·릴리스된 API | | 일부 `sy-` 필드(`sy-uzeit` 등) | 릴리스된 시스템 API | 흔한 오해가 하나 있다. **직접 `SELECT`가 막힌다고 데이터 접근 자체가 막힌 게 아니다.** 표준 테이블을 직접 읽는 대신 릴리스된 CDS 뷰로 추상화해 읽는 게 정석이다. 왜 막느냐면, 그 테이블 구조에는 **안정성 계약이 없기 때문이다.** SAP가 언제든 바꿀 수 있는 내부 구조에 코드를 묶으면 업그레이드 때 깨진다. ## 확장 모델 — Level A~D SAP는 2025년 8월, Clean Core 확장 분류를 기존 3단계(3-tier)에서 **Level A~D**로 재정리했다. | 등급 | 의미 | |---|---| | **A** | 릴리스된 API만 (완전 준수, 최상) — ABAP Cloud on-stack 또는 BTP side-by-side | | **B** | A + 잘 문서화된 클래식 API (대체로 안정) | | **C** | SAP 내부 객체 접근 (부분 준수, 레거시용) | | **D** | 코어 수정·암묵적 인핸스·SAP 테이블 직접 쓰기 (비권장) | 배포 모델도 둘로 갈린다. **스택 내부**(on-stack) — S/4HANA Cloud 안에서 ABAP Cloud로 짜는 방식 — 과 **분리 실행**(side-by-side) — BTP에서 따로 돌리는 방식 — 이다. 스택 내부는 다시 **키 유저 확장**(key user extensibility, 노/로우코드)과 **개발자 확장**(developer extensibility, 프로코드 ABAP Cloud)으로 나뉜다. 그래서 "ABAP Cloud는 BTP에서만 된다"는 말은 오해다. S/4HANA Cloud 안에서도 개발자 확장으로 ABAP Cloud를 쓴다. 참고로 Level A~D는 **확장 분류**이지 언어 버전이 아니다. ABAP Cloud로 짜도 릴리스되지 않은 객체를 끌어쓰면 Level A가 깨진다. ## 릴리스된 API가 없을 때 — 래퍼(Tier 2) 필요한 기능의 릴리스된 API가 아직 없을 때가 많다. 이때 공식 완화책이 **래퍼(wrapper, Tier 2) 패턴**이다. 릴리스되지 않은 SAP 객체를 클래식 ABAP으로 감싼 뒤 ABAP Cloud용으로 릴리스해 쓰는 방식이다. 이건 Clean Core 위반이 아니라 SAP가 인정한 임시 우회로, **Level B**로 분류된다. 단, 나중에 정식 대체물(successor)이 릴리스되면 그쪽으로 옮겨야 한다. ## 내 코드부터 점검하자 전환기 실무의 출발점은 코드를 다시 짜는 게 아니라, **현 상태를 측정하는 것**이다. ADT에서 **ATC**(ABAP Test Cockpit)를 클라우드 준비도 변형으로 돌린다. - **`ABAP_CLOUD_READINESS`** — 클래식 시스템의 코드가 ABAP Cloud 규칙에 얼마나 맞는지 점검 - 일괄(mass) 실행으로 기준선(baseline) 결과를 한 번에 뽑는다 ATC는 SAP가 GitHub로 공개한 **Cloudification Repository**(`SAP/abap-atc-cr-cv-s4hc`)를 참조해, 릴리스되지 않은 객체마다 **어떤 릴리스된 대체물(successor)로 바꿔야 하는지** 매핑해 준다. 직접 SELECT를 어떤 CDS 엔티티로 바꿀지 도구가 매핑해 알려준다. ## 한국 실무와 함정 한국 현장은 ECC 커스텀이 누적된 경우가 많아, 전환 시 이 코드들이 대부분 **Level C/D로 떨어진다.** 그래서 첫 수는 항상 `ABAP_CLOUD_READINESS` ATC를 일괄 실행해 기준선을 뽑는 것이다. 전략은 단순하다 — **신규 개발은 무조건 Level A를 지향**하고, 기존 레거시는 Level D에서 C·B로 **단계적으로 완화**한다. 한 번에 전부 Level A로 끌어올리려 들면 끝이 안 난다. 최근 한국 SI(삼성SDS·LG CNS·현대오토에버 등) 프로젝트에서는 **'Clean Core 준수율'이 RFP 평가항목**으로 들어오기 시작해, 컨설턴트도 Level A~D 분류와 릴리스 API·래퍼 패턴을 설명할 수 있어야 한다. 2025년 8월의 A~D 모델은 비교적 최신 재정리라, 그 이전 자료의 '3-tier' 표현과 섞여 보일 수 있는데 **둘은 모순이 아니라 같은 개념의 다른 세대**다. 그리고 ABAP Cloud는 결국 [CDS](/education/abap-cds-view-intro)·[RAP](/education/abap-rap-introduction) 위에서 돌아가니, 그 둘을 먼저 익히는 게 순서다. 전환 시 코드 정리 전반은 [커스텀 코드 적응](/education/custom-code-adaptation-s4hana) 참고. ## 출처 - SAP Help — *Main Differences between Classic ABAP and ABAP Cloud* / *Developer Guide from Classic ABAP to ABAP Cloud*: [help.sap.com](https://help.sap.com/docs/abap-cloud/developer-guide-from-classic-abap-to-abap-cloud/main-differences-between-classic-abap-and-abap-cloud) - SAP News Center — *How to Extend SAP S/4HANA Cloud the Right Way (Level A–D, 2025-08)*: [news.sap.com](https://news.sap.com/2025/08/extend-sap-s4hana-cloud-right-way-clean-clear/) - SAP Community — *ABAP Extensibility Guide – Clean Core (August 2025 Update)*, *How the ABAP Test Cockpit supports you to adopt ABAP Cloud* - GitHub — *SAP/abap-atc-cr-cv-s4hc* (Cloudification Repository), *SAP-samples/abap-cheat-sheets* (19_ABAP_for_Cloud_Development) 심화 참고: *App Development with SAP BTP*, *Clean ABAP* (SAP PRESS)