# Maguyva의 ABAP 지원: SAP 커스텀 코드를 위한 클래스 그래프

Canonical source: https://maguyva.ai/ko/languages/abap

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

Maguyva는 AST, 심볼, 그래프로 ABAP를 지원하여, AI 에이전트가 SAP 커스텀 코드의 클래스, 인터페이스, 재정의, 예외를 매핑할 수 있게 합니다.

## 지원 현황 요약

- 등급: AST 및 심볼 지원
- 프로그래밍
- 확장자: .abap
- 구문 인식 검색과 구조적 컨텍스트를 위한 실제 AST 파싱을 제공합니다.
- 이름이 지정된 심볼은 시맨틱 조회와 상호 참조에 활용됩니다. 관계 추출이 활성화된 경우 그래프 내비게이션을 사용할 수 있습니다.
- 이 언어는 그래프 인식 검색에 심볼과 관계를 제공합니다. 지원되는 에지 유형은 언어 고유의 구문 구조에 따라 다릅니다.
- AST 파싱과 심볼 추출을 모두 지원합니다.

## 가장 적합한 경우

- 커스텀 ABAP를 Git에 `.abap` 소스 파일로 보관하며, 마이그레이션이나 클린 코어 검토 전에 이를 이해해야 하는 SAP 팀.
- 클래스 계층, 인터페이스, 재정의 때문에 실제로 어떤 구현이 실행되는지 보이지 않는 객체 지향 ABAP 자산.
- "이 클래스를 바꾸면 무엇이 깨질까?"가 질문인 에이전트 지원 영향 분석.

## 에이전트 워크플로

- 베이스 클래스를 상속하는 클래스와 그 클래스들이 재정의하는 메서드를 매핑합니다.
- 메서드 시그니처를 바꾸기 전에 인터페이스를 구현하는 모든 클래스를 찾습니다.
- 예외 클래스가 어디서 발생하고 어디서 잡히는지 추적합니다.

## 바꾸기 전에 ABAP를 매핑할 가치가 있는 이유

커스텀 ABAP에는 수십 년 치 비즈니스 규칙이 담겨 있는 경우가 많습니다. 코드는 어떤 곳에서는 객체 지향이고 다른 곳에서는 절차적이며, 어떤 메서드가 실행될지는 상속과 인터페이스 구조가 결정합니다. 클래스를 하나씩 읽어서는 이것이 보이지 않습니다.

Maguyva는 먼저 에이전트에게 클래스 그래프를 건넵니다. 그래서 변경 계획은 추측이 아니라 그 클래스에 무엇이 의존하는지에서 시작합니다.

## Maguyva가 ABAP에서 추출하는 것

Maguyva는 `.abap` 소스를 전용 ABAP 문법으로 파싱합니다. 심볼에는 클래스 정의와 구현, 인터페이스, 메서드 선언과 구현, 그리고 `FORM` 루틴이 포함됩니다.

그래프는 ABAP 개발자가 신경 쓰는 관계를 기록합니다.

- `CLASS ... INHERITING FROM`에서 오는 상속.
- `INTERFACES`에서 오는 인터페이스 구현.
- `METHODS ... REDEFINITION`에서 오는 오버라이드.
- `RAISE EXCEPTION`과 `CATCH`에서 오는 예외.
- 메서드 호출(`obj->m( )`, `cls=>m( )`, `CALL METHOD`), `TYPE`과 `TYPE REF TO`에서 오는 타입 참조, 그리고 해당 클래스에 귀속되는 공개 섹션 메서드 익스포트.
- 메서드 본문 안의 읽기, 쓰기, 제어 흐름(`IF`, `CASE`, `LOOP`, `TRY`).

## 에이전트 프롬프트 예시

- "`zcl_order_base`를 상속하는 클래스는 무엇이고, 그 클래스의 어떤 메서드를 재정의하나요?" (`find_symbol`, 그다음 `dependency_search` incoming)
- "`zcx_pricing_error`는 어디서 발생하고, 누가 잡나요?" (`dependency_search`)
- "출하 생성 흐름이 리포트에서 영속성 클래스까지 어떻게 이어지는지 요약해 줘." (`get_task_context`)

## 알려진 한계

- Open SQL(`SELECT ... FROM ... INTO`), `EXEC SQL`, `AUTHORITY-CHECK`는 현재 ABAP 문법에서 파싱되지 않으므로, SQL을 통한 테이블 읽기는 아직 그래프 엣지가 아닙니다. 테이블 이름에는 `text_pattern_search`를 사용하세요.
- `INTERFACES` 절은 구현 관계이지 임포트가 아닙니다. 구조적 검색에서 임포트로 선택되는 것은 `INCLUDE` 문뿐입니다.
- Maguyva는 Git 저장소에 `.abap` 파일로 들어 있는 ABAP를 인덱싱합니다. SAP 시스템에는 연결하지 않습니다.

## 다음 단계

[빠른 시작](/ko/docs/quickstart)으로 저장소를 연결한 다음, [호환성 페이지](/ko/docs/compatibility)에서 지원 매트릭스를 확인하세요. 다른 레거시 자산은 [COBOL 가이드](/ko/languages/cobol)를 참고하세요.

## 엔진 세부 정보

- ABAP는 전용 문법으로 파싱됩니다. 클래스, 인터페이스, 메서드 선언과 구현, `FORM` 루틴이 심볼이 됩니다.
- 그래프는 `INHERITING FROM` 상속, `INTERFACES` 구현, `REDEFINITION` 오버라이드, `RAISE EXCEPTION`과 `CATCH`, 그리고 `obj->m( )`, `cls=>m( )` 같은 호출을 기록합니다.
- Open SQL, `EXEC SQL`, `AUTHORITY-CHECK`는 현재 문법에서 파싱되지 않으므로, SQL을 통한 테이블 읽기는 아직 그래프 엣지가 아닙니다.

## 유용한 MCP 진입점

- `find_symbol`: 정의와 참조가 필요할 때 클래스, 인터페이스, 메서드 이름으로 쓰세요.
- `dependency_search`: 변경 전에 베이스 클래스나 인터페이스에 incoming 탐색을 써서 서브클래스, 구현 클래스, 호출자를 찾으세요.
- `text_pattern_search`: 그래프가 아직 다루지 않는 데이터베이스 테이블 이름과 SQL 문에 쓰세요.
