ABAP 성능 체크리스트: DB 접근과 내부 테이블 처리 습관 정리
3줄 요약
먼저 실행 시간을 측정한 뒤, DB에서 읽는 양·접근 횟수·내부 테이블 조회 방식을 점검해요.
루프 안의 SELECT나 행별 INSERT·UPDATE는 DB 접근 횟수를 늘릴 수 있어요.
키·블록 처리·참조 활용은 상황에 따라 효과가 달라요. 변경 전후를 측정해 판단하세요.
어떤 상황에서 쓰나요
느린 프로그램을 고치려면 먼저 어느 구간에서 시간이 걸리는지 측정해야 해요. 이번 글은 측정한 결과를 바탕으로 코드를 점검할 때 쓰는 목록이에요. DB에서 읽는 양과 횟수, 내부 테이블의 조회 방식, 불필요한 복사를 차례로 살펴봐요.
반복문 안에서 같은 DB를 행마다 호출하면 왕복 횟수가 늘어날 수 있습니다. 아래 두 방식을 비교한 뒤, 실제 병목을 측정하고 묶음 조회가 적절한지 판단하세요.
핵심 내용
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
아직 댓글이 없어요.
로그인하고 댓글 쓰기