ABAP 성능 체크리스트: DB 접근과 내부 테이블 처리 습관 정리
3줄 요약
성능은 DB 접근(읽는 행과 열 줄이기, 접근 횟수 줄이기)과 내부 테이블 처리(키로 읽기, 블록 단위 처리)에서 가장 크게 갈려요.
루프 안의
SELECT, 중첩SELECT루프, 한 줄씩INSERT/UPDATE는 접근 횟수를 곱해서 늘려요.이 글의 목록은 "비효율적일 수 있는 기법"의 예시이고, 실제 병목은 프로파일링 도구로 먼저 찾아야 해요.
어떤 상황에서 쓰나요
느린 프로그램을 만났을 때 코드를 훑으며 확인할 항목이 필요해요. SAP 공식 ABAP 치트시트의 *Performance Notes* 편은 DB 접근, 내부 테이블, 기타로 나눈 체크리스트를 제공해요. 치트시트는 성능 분석 도구(ABAP 프로파일링) 자체는 다루지 않으며, 도구로 측정하라고 안내해요.
핵심 내용
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
아직 댓글이 없어요.
로그인하고 댓글 쓰기