본문으로 건너뛰기
cd /languages
  • 엔터프라이즈의 핵심
  • 프로그래밍
  • AST 및 심볼 지원

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

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

바꾸기 전에 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 시스템에는 연결하지 않습니다.

다음 단계

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

가장 적합한 경우

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

에이전트 워크플로

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

엔진 세부 정보

  • > 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 문에 쓰세요.