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

정보·팁

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

에이든ABAP 개발자운영자모듈 MMSD기타조회 1

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

아직 댓글이 없어요.

정보·팁 목록전체 목록