ABAP

Code Inspector vs ATC — 아직도 SCI 쓴다? #shorts #SAP #ABAP

이 글이 답하는 질문

  • Code Inspector(SCI)와 ATC는 뭐가 다른가?
  • 체크 변형(Check Variant)을 어떻게 만들고 ATC에 연결하나?
  • ADT에서 ATC를 실행하고 Priority 1로 트랜스포트를 막는 방법은?
  • BTP ABAP Cloud에서 SCI가 없는 이유와 ATC 단독 사용법은?

이 글을 보기 전에

ABAP 개발 경험 6개월 이상, SE80/SE38 기본 사용 경험을 가정합니다. 트랜스포트 요청(TR) 릴리즈 과정과 패키지 개념을 알면 3단계 실전 예제까지 무리 없이 따라올 수 있습니다.

사용한 버전

  • SAP NetWeaver AS ABAP 7.52 이상 (S/4HANA 2022 기준)
  • SAP BTP ABAP Environment — ABAP Cloud 비교용
  • ADT 3.30 이상, Eclipse 2024-03
  • 권한: S_DEVELOP, S_CODE_INS(SCI), S_SATC_ADM(ATC 관리)
  • 트랜잭션: SCI, SATC, ATC

SCI와 ATC의 관계 — 엔진은 같다

가장 큰 오해는 "ATC가 SCI를 대체했다"는 표현입니다. 정확히는 ATC는 SCI 위에 얹힌 거버넌스 레이어입니다. 체크 로직(엔진)은 동일하고, ATC는 결과 관리, 예외 처리, 트랜스포트 통합, 중앙 집중 운영을 추가로 제공합니다.

[ABAP 소스]
    |
    v
[Check 클래스: CL_CI_TEST_*]  <-- SCI/ATC 공통 엔진
    |
    +--> [SCI] 단발성 실행, 사용자 변형 (트랜잭션 SCI)
    +--> [ATC] Run Series, Exemption, Transport 블로킹 (트랜잭션 SATC)

핵심 용어 정리입니다.

  • Check Variant(체크 변형): 체크 항목의 묶음. SCI 트랜잭션에서 생성하며 ATC가 재사용합니다.
  • Object Set: 검사 대상 범위 — 패키지/프로그램/클래스 단위로 지정합니다.
  • ATC Run Series: 정기 실행 인스펙션. 결과를 SATC_* 테이블에 영구 저장해 이력 관리합니다.
  • Priority: 1(릴리즈 차단 후보), 2(Warning), 3(Info).
  • Exemption: 승인 절차로 특정 발견 항목을 면제합니다. SCI에는 없는 ATC 전용 기능입니다.

직접 해보기

1. SCI 체크 변형 생성과 실행

SCI 트랜잭션 → Check Variant 이름 입력 → Create → 사용할 체크에 체크박스 → Global 저장. Global 저장을 해야 ATC 설정에서 이 변형을 불러올 수 있습니다.

REPORT z_atc_scan_demo.

DATA: lt_vbak TYPE TABLE OF vbak.

" [체크 대상 1] SELECT * — Performance 경고
SELECT * FROM vbak INTO TABLE lt_vbak
  WHERE erdat = sy-datum.

" [체크 대상 2] Loop 안 DB 액세스 — Priority 1 가능
LOOP AT lt_vbak ASSIGNING FIELD-SYMBOL(<va>).
  DATA(lv_name) = VALUE kna1-name1( OPTIONAL ).
  SELECT SINGLE name1 FROM kna1
    INTO lv_name
    WHERE kunnr = <va>-kunnr.
ENDLOOP.

" [체크 대상 3] Hardcoded client
SELECT SINGLE * FROM t001
  INTO @DATA(ls_t001)
  WHERE mandt = '100'.

SCI 실행: SCI 트랜잭션 → Inspection 이름 입력 → Object Set에 위 리포트 지정 → 방금 만든 체크 변형 선택 → F8. SE38에서 Program → Check → Code Inspector로도 빠르게 호출할 수 있습니다.

2. ADT에서 ATC 실행과 Quick Fix

ADT에서 패키지 우클릭 → Run As → ABAP Test Cockpit (단축키: Ctrl+Shift+F2). 결과 뷰에서 Priority별 필터, Pseudo Comment 삽입, 소스 네비게이션이 한 화면에서 처리됩니다.

CLASS zcl_invoice_processor IMPLEMENTATION.
  METHOD calculate_totals.
    DATA: lt_items TYPE TABLE OF vbap,
          lv_total TYPE p DECIMALS 2.

    " Priority 2: SELECT * 대신 필요한 필드만 지정 권장
    SELECT * FROM vbap
      INTO TABLE lt_items
      WHERE vbeln = iv_vbeln.

    " Priority 1: Loop 안 SELECT — 성능 위협
    LOOP AT lt_items ASSIGNING FIELD-SYMBOL(<item>).
      SELECT SINGLE netpr FROM konp
        INTO @DATA(lv_price)
        WHERE knumh = @<item>-kpein.
      lv_total = lv_total + lv_price.
    ENDLOOP.

    " 의도적 면제 시 Pseudo Comment 사용
    SELECT netwr FROM vbak
      INTO TABLE @DATA(lt_orders). "#EC CI_NOORDER
  ENDMETHOD.
ENDCLASS.

Pseudo Comment가 안 통하는 체크라면 ADT 결과 뷰에서 우클릭 → Request Exemption으로 승인 요청을 올립니다. 관리자가 SATC에서 승인하면 해당 항목은 차회 Run Series에서 제외됩니다.

3. 트랜스포트 릴리즈 블록 설정

SATC → Configuration → Setup → Transport Tool Connection에서 "Block Transport Release" 활성화. 이 설정 이후 Priority 1이 남은 TR은 릴리즈 자체가 불가능해집니다.

" 중앙 ATC에서 Priority 1 발견 항목 조회 예시
DATA: lt_findings TYPE STANDARD TABLE OF satc_ci_finding.

CALL FUNCTION 'SATC_CI_RESULT_READ'
  EXPORTING
    iv_run_id      = lv_run_id
    iv_priority_to = '1'
  TABLES
    et_findings    = lt_findings
  EXCEPTIONS
    not_found      = 1
    not_authorized = 2
    OTHERS         = 3.

IF sy-subrc = 0.
  LOOP AT lt_findings INTO DATA(ls_f).
    WRITE: / ls_f-object_name, '|', ls_f-check_message_text.
  ENDLOOP.
ENDIF.

중앙 ATC(Central Check System) 구성도 일반적으로 권장됩니다. 여러 개발 시스템을 하나의 ATC 마스터에 RFC로 연결하면 체크 변형을 한 곳에서 관리할 수 있습니다.

ABAP Cloud에서 ATC가 유일한 이유

BTP ABAP Environment(Steampunk)와 S/4HANA Cloud Public Edition에서는 SAP GUI 트랜잭션 대부분이 비활성화됩니다. SCI 트랜잭션뿐만 아니라 SE38 Extended Check도 접근 불가입니다. ABAP Cloud에서 코드 품질을 관리하는 유일한 경로는 ADT를 통한 ATC입니다.

Clean Core 적합성 점검에는 SAP 제공 변형 ABAP_CLOUD_DEVELOPMENT_DEFAULT를 씁니다. 이 변형은 클라우드 API 사용 여부와 Released Object 참조 여부를 자동으로 체크합니다.

상황별 선택 기준

  • BTP ABAP Cloud / S/4HANA Cloud Public → ATC만 가능, 선택 여지 없음
  • On-Prem + ADT 사용 → ATC 권장, CI/CD 파이프라인(gCTS, piper) 연동 가능
  • On-Prem + SAPGui Only 레거시 팀 → SCI도 유효, 점진적 ATC 전환 권장
  • 일회성 코드 점검 → SCI가 빠름
  • 전사 품질 게이트 / 트랜스포트 블로킹 → ATC 필수

삽질 노트

  • SCI 변형을 ATC가 못 읽는다: User 변형이 아닌 Global 변형으로 저장해야 ATC 기본 변형 지정란에 표시됩니다.
  • Pseudo Comment가 안 먹힌다: 체크별 Pseudo Comment 코드가 다르고, 일부 새 체크는 Exemption(승인 절차)만 허용합니다.
  • ATC가 너무 오래 걸린다: Parallel Processing을 켜고, 변경된 오브젝트만 검사하는 Delta Check 모드를 활용하면 수십 배 빨라집니다.
  • Priority 1이 실제로 TR을 막지 않는다: SATC에서 "Block Transport Release" 설정을 명시적으로 켜야만 강제됩니다.

더 파볼 주제

  • Clean Core Check Variant: SAP 제공 S4HANA_READINESS_REMOTE, ABAP_CLOUD_DEVELOPMENT_DEFAULT
  • Custom Check 개발: CL_CI_TEST_ROOT 상속으로 사내 코딩 표준 코드화
  • abaplint: 오픈소스 정적 분석, PR 단계 게이트 활용
  • gCTS + piper: Git 기반 ABAP 변경 관리와 ATC CI 통합

핵심 한 줄

SCI는 단발성 점검 도구, ATC는 거버넌스 플랫폼. 신규 프로젝트와 ABAP Cloud는 ATC가 정답입니다.

댓글 0

아직 댓글이 없습니다.