바로투입이력카드
SAP 게시판

정보·팁

ABAP 성능 체크리스트: DB 접근과 내부 테이블 처리 습관 정리

에이든ABAP 개발자운영자모듈 MMSD기타수정됨조회 10

3줄 요약

  • 먼저 실행 시간을 측정한 뒤, DB에서 읽는 양·접근 횟수·내부 테이블 조회 방식을 점검해요.

  • 루프 안의 SELECT나 행별 INSERT·UPDATE는 DB 접근 횟수를 늘릴 수 있어요.

  • 키·블록 처리·참조 활용은 상황에 따라 효과가 달라요. 변경 전후를 측정해 판단하세요.

어떤 상황에서 쓰나요

느린 프로그램을 고치려면 먼저 어느 구간에서 시간이 걸리는지 측정해야 해요. 이번 글은 측정한 결과를 바탕으로 코드를 점검할 때 쓰는 목록이에요. DB에서 읽는 양과 횟수, 내부 테이블의 조회 방식, 불필요한 복사를 차례로 살펴봐요.

반복문 안에서 같은 DB를 행마다 호출하면 왕복 횟수가 늘어날 수 있습니다. 아래 두 방식을 비교한 뒤, 실제 병목을 측정하고 묶음 조회가 적절한지 판단하세요.

AI 설명 그림: DB 왕복 횟수 줄이기. 개념을 돕기 위한 이미지이며 실제 SAP 화면이 아닙니다.
AI 설명 그림: DB 왕복 횟수 줄이기. 개념을 돕기 위한 이미지이며 실제 SAP 화면이 아닙니다.

핵심 내용

DB 접근 — 읽는 양 줄이기

  • WHERE를 써요. 전체가 정말 필요할 때만 생략해요. 복잡한 조건보다 =와 AND가 효율적이고, NOT, OR는 DB의 처리 비용이 커질 수 있어요.

  • SINGLE(한 건), UP TO n ROWS, DISTINCT, HAVING(그룹 후 조건)으로 결과를 줄여요.

  • SELECT * 대신 필요한 칼럼만 지정해요. UPDATE는 SET으로 바꿀 칼럼만 지정하는 것이 작업 영역 전체를 쓰는 것보다 보통 효율적이에요.

  • SUM, AVG, COUNT 같은 집계 함수는 DB에서 계산해 전송량을 줄이지만, DB 에도 실행 비용이 있어서 효과는 상황에 따라 달라요.

DB 접근 — 횟수 줄이기

  • 줄 단위가 아니라 내부 테이블을 쓰는 블록 단위 INSERT/UPDATE/DELETE를 써요.

  • 같은 데이터를 반복해서 읽지 않아요. 루프 안에서 DB를 읽지 않아요. ABAP EML 문장도 루프 안에 두지 말고, 필요한 데이터를 한 번에 읽고 한 번에 수정 요청을 보내라고 해요.

  • 중첩 SELECT 루프를 피해요. 안쪽 접근 횟수가 바깥쪽 횟수만큼 곱해져요.

  • 여러 테이블을 합칠 때는 조인과 서브쿼리를 써요. 서브쿼리는 DB에서 데이터를 가져오지 않고 조건만 평가해요.

  • 내부 테이블로 거르려면 조인이나 서브쿼리로 내부 테이블을 쓰는 현대 문법을 권하고, 옛 FOR ALL ENTRIES의 함정은 ABAP SQL 연재 1회에 있어요.

  • ABAP CDS는 SAP HANA의 능력을 이용해 복잡한 계산과 조인을 DB 계층으로 내려보낼 수 있어요(코드 푸시다운).

  • 동적 ABAP SQL은 실행 중 평가가 필요해서 정적 지정이 더 빨라요.

  • 테이블 버퍼링과 인덱스는 DB/DDIC 설정에 따라 암묵적으로 적용되거나 쿼리 시간을 줄여 줘요.

내부 테이블

  • 종류 선택: 작은 데이터와 순차 처리는 표준 테이블, 항상 정렬된 채 키로 읽을 때는 정렬 테이블, 변경이 적은 아주 큰 데이터는 해시 테이블.

  • 한 줄 읽기: 표준 테이블은 키 검색이 선형이라 큰 테이블에는 비효율적이고, 정렬 테이블은 기본 키의 앞 필드부터 빠짐없이 지정하면 최적화돼요. 해시 테이블은 키 전체를 지정해야 빠르고 접근 시간이 크기와 관계없이 일정해요. 자유 키(WITH KEY)는 선형 탐색이에요. 옛 코드의 READ TABLE ... BINARY SEARCH는 사전 SORT 비용이 들어서 보조 키를 쓰라고 권해요.

  • 여러 줄 접근: 전체 반복은 정말 필요할 때만 하고, WHERE, FROM/TO로 줄여요. 조건은 키 칼럼의 동등 비교와 AND 일 때 최적화되고, 피연산자 타입이 맞아야 형 변환 비용이 없어요. READ TABLE ... WHERE보다 WITH KEY가 낫다고 해요.

  • 복사 줄이기: 줄이 크거나 중첩 구조이면 작업 영역보다 필드 심볼이나 참조가 낫고, 단순한 테이블은 작업 영역도 큰 차이가 없어요.

  • 블록 단위: INSERT ... LINES OF, FIND ... IN TABLE, REPLACE ... IN TABLE이 한 줄씩보다 효율적이에요.

  • 보조 키: 큰 테이블이고 한 번 채워 자주 읽을 때 유리하고, 갱신 비용과 메모리 비용이 있어서 아껴 써요.

  • SORT는 정렬 키를 정확히 지정해요. 키를 안 주면 표준 키 전체로 정렬해 비효율적이고 의도치 않은 결과가 나올 수 있어요.

  • CLEAR는 내용만 지우고 메모리를 남겨 다시 채울 때 유리하고, FREE는 메모리도 반납해요.

  • 테이블 식을 같은 줄에 여러 번 쓰지 말고 필드 심볼이나 참조에 한 번 받아 사용하도록 권해요.

기타

  • WHILE이 DO + EXIT보다 빠를 수 있어요.

  • 문자열 템플릿에 글자만 있으면 백틱 리터럴이 낫고, 단순한 패턴 검색은 정규식보다 비교 연산자와 IF가 효율적일 수 있어요.

  • 암묵적 형 변환은 가능하면 피해요(비용과 뜻밖의 결과).

  • 큰 데이터를 넘기거나 값을 바꾸지 않을 때는 값 전달보다 참조 전달이 유리해요.

  • 데이터 집약적 작업은 CL_ABAP_PARALLEL 등으로 병렬 처리할 수 있어요.

주의할 점

  • 이 목록은 성능에 영향을 줄 수 있는 일반적인 패턴을 정리한 것이에요. 치트시트는 성능과 런타임 분석에는 SAP가 제공하는 도구(ABAP 프로파일링 등)를 쓰라고 권하고, 이 편은 그 도구를 다루지 않아요. 측정 없이 일괄 적용하지 마세요.

  • Clean ABAP 연재 2회에서 본 것처럼, 가독성을 해치는 조기 최적화는 피하라는 반대 의견도 있어요. 가독성과 성능 중 어디를 개선할지는 실제 측정 결과를 바탕으로 판단하세요.

  • 치트시트는 계속 갱신되는 문서예요. 이 편의 첫 공개는 2025년 8월이고, 제가 읽은 판은 2026년 10월 기준이에요. 이 글은 읽고 정리한 것이고 예제를 직접 실행해 보지는 않았어요.

원문 주소: https://github.com/SAP-samples/abap-cheat-sheets/blob/main/32_Performance_Notes.md

출처와 이용 안내
  • 원문: ABAP Cheat Sheets - ABAP Performance Notes · 작성자 SAP SE and contributors SAP-samples · 작성일 2025-08-01 · 기준 릴리스에 따라 다름 원문은 최신 ABAP 기준 · 확인일 2026-10-25

  • 이 글은 위 원문을 읽고 한국어로 요약·재구성한 글이며 번역본이 아니에요. 원문의 저작권은 작성자와 SAP에 있어요.

  • 원문은 Apache-2.0 라이선스(https://www.apache.org/licenses/LICENSE-2.0)로 공개된 자료예요. 이 글은 내용을 한국어로 줄이고 순서를 바꾼 변경본이며, 원저작자가 이 글을 보증하지 않아요.

  • 설정과 화면은 릴리스마다 달라요. 적용하기 전에 원문과 SAP Help Portal, 관련 SAP Note에서 최신 내용을 확인해 주세요.

  • SAP와 SAP 제품명은 SAP SE의 상표예요. 바로투입은 SAP와 관련이 없어요.

댓글 0

아직 댓글이 없어요.

정보·팁 목록전체 목록