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는 그 원칙을 **언어 차원에서 강제**하는 장치다. ## released API와 릴리스 컨트랙트 ABAP Cloud의 핵심은 "released" 개념이다. SAP가 `released`로 지정한 객체(API)만 소비할 수 있고, 그런 객체는 **릴리스 간 인터페이스가 안 바뀐다고 SAP가 보증**한다(stability contract). 이 안정 계약의 한 등급이 **C1**이다 — 공개적으로 안정 보증된 API라는 뜻이다. released 여부는 ADT(Eclipse)에서 바로 확인한다. Project Explorer의 **Released Objects** 노드로 목록을 보거나, 객체 Properties 탭의 **API State**에서 릴리스 컨트랙트(C1 등)를 확인한다. 참고로 ABAP Cloud 개발 자체가 `SE80` 같은 SAP GUI 툴로는 안 되고 **ADT에서만** 가능하다. ## 막히는 클래식 구문 ABAP Cloud에서 컴파일 단계에 막히는 대표 구문들이다. | 막히는 것 | 대안 | |---|---| | 비released SAP 표준 테이블 직접 `SELECT` (예: `SPFLI`) | released **CDS 엔티티**로 우회 | | `WRITE` / 클래식 리스트 | RAP + Fiori UI | | dynpro 화면 | Fiori Elements / RAP | | 실행형 리포트(report) 자체 | 클래스 + RAP | | 동적 프로그래밍 일부 (구조·타입 동적 참조 등) | 신문법·released API | | 일부 `sy-` 필드(`sy-uzeit` 등) | released 시스템 API | 여기서 가장 흔한 오해 하나. **직접 `SELECT`가 막힌다고 데이터 접근 자체가 막힌 게 아니다.** 표준 테이블을 직접 읽는 대신 released CDS 뷰로 추상화해 읽는 게 정석이다. 왜 막냐고? 그 테이블 구조에는 **안정 계약이 없어서** — SAP가 언제든 바꿀 수 있는 내부 구조에 코드를 묶으면 업그레이드 때 깨지기 때문이다. ## 확장 모델 — Level A~D SAP는 2025년 8월, 클린 코어 확장 분류를 기존 3-tier에서 **Level A~D**로 재정리했다. | 등급 | 의미 | |---|---| | **A** | 공개 released 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에서 분리 실행). on-stack은 다시 **key user extensibility**(노/로우코드)와 **developer extensibility**(프로코드 ABAP Cloud)로 나뉜다. 그래서 "ABAP Cloud = BTP에서만"이라는 말은 오해다 — S/4HANA Cloud 내부에서도 developer extensibility로 ABAP Cloud를 쓴다. 참고로 Level A~D는 **확장 분류**이지 언어 버전이 아니다. ABAP Cloud로 짜도 비released 객체를 끌어쓰면 Level A가 깨진다. ## released API가 없을 때 — Tier 2 wrapper 현실에선 필요한 기능의 released API가 아직 없을 때가 많다. 이때의 공식 완화책이 **wrapper(Tier 2) 패턴**이다. 비released SAP 객체를 클래식 ABAP으로 감싸(wrap) ABAP Cloud용으로 release해 쓰는 것. 이건 클린 코어 위반이 아니라 SAP가 인정한 갭 메우기로, **Level B**로 분류된다. 단, 나중에 정식 released 후속(successor)이 나오면 그쪽으로 옮겨야 한다. ## 내 코드부터 점검하자 전환기 실무의 출발점은 코드를 다시 짜는 게 아니라, **현 상태를 측정하는 것**이다. ADT에서 **ATC(ABAP Test Cockpit)**를 클라우드 준비도 변형으로 돌린다. - **`ABAP_CLOUD_READINESS`** — 클래식 시스템의 코드가 ABAP Cloud 규칙에 얼마나 맞는지 점검 - mass(대량) 실행으로 baseline finding을 한 번에 뽑는다 ATC는 SAP가 GitHub로 공개한 **Cloudification Repository**(`SAP/abap-atc-cr-cv-s4hc`)를 참조해, 비released 객체마다 **released 후속(successor)이 무엇인지** 매핑해 준다. "이 직접 SELECT는 어떤 released CDS로 바꿔라"를 도구가 알려주는 셈이다. ## 한국 실무와 함정 한국 현장은 ECC 커스텀이 누적된 경우가 많아, 전환 시 이 코드들이 대부분 **Level C/D로 떨어진다.** 그래서 첫 수는 항상 `ABAP_CLOUD_READINESS` ATC를 mass run으로 돌려 baseline을 뽑는 것이다. 전략은 단순하다 — **신규 개발은 무조건 Level A를 지향**하고, 기존 레거시는 Level D에서 C·B로 **단계적으로 완화**한다. 한 번에 전부 Level A로 끌어올리려 들면 끝이 안 난다. 최근 한국 SI(삼성SDS·LG CNS·현대오토에버 등) 프로젝트에서는 **'Clean Core 준수율'이 RFP 평가항목**으로 들어오기 시작해, 컨설턴트도 Level A~D 분류와 released API/wrapper 패턴을 설명할 수 있어야 한다. 마지막 정리. 2025-08의 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)