오늘은 ABAP 개발 성능에 대한 고민에 대해서 이야기 해 보려고 한다. SAP 는 다른 일반 개발보다 조금은 다른 점이 있다. 회사의 기간계 시스템이다 보니 조금 느리게 프로그램이 돌아도 데이터가 많아서 그러려니 하면서 사용자들이 기다려준다는 것이다. 웹의 경우 3초 안에 안 나오면 다른 곳으로 옮긴다는 통계도 예전에 본적이 있다. 뭐 요즘은 인터넷 회선도 빠르고 서버도 좋고 좋고 빠른 라이브러리들도 많아서 성능이 엄청 올라가긴 했다.
그러나 최근 성능 개선 요구를 받고 있다. 처음 짜 놓은 프로그램이 10만건 정도를 루프를 돌리면서 Collect 를 하고, 필요한 데이터를 Internal Table 에 채워 넣었다. 그런데 이게 너무 느리다는 것이다. 내가 봐도 느리긴 했다. 그런데 성능 개선이라는게 단순히 루프 안에 select 문을 빼는 것 만으로 더 빨라지지 않는다는 것이다. ( 물론 루프 안에 select 문을 10만번을 안하기만 해도 엄청 빨라 질 것이다. )
내가 개선한 내용을 오늘은 간략히 기록으로 남기도록 해야겠다.
개선내용
1. Collect 로 구하던 합을 Select 문에서 부터 Sum 으로 구해 온다.
2. Internal Table 의 Header Line 대신 Field Symbol 에 Assign 해서 루프를 돌린다.
3. Loop 안에 불필요한 Select 문을 대신 Read Table + Binary Search 를 사용한다.
4. Internal Table Modify 를 사용대신에 Field Symbol 로 직접 값을 고친다. (2번의 영향)
이렇게 일단 수정하니 속도가 상당히 빨라졌다. 모든 프로그램이 그렇겠지만 성능향상은 항상 이슈인 듯 하다. 사용자는 내부의 로직을 모르니 왜 느리냐만 하지 왜 느려진지는 잘 모른다. 개발자들은 이러한 내용을 잘 이해해야겠다. ( 내가 요리 시켜놓고 왜 늦게 나오냐고 닥달하는 것과 뭐가 다른가?)
ABAP 을 개발하면서 성능향상에 가장 영향을 미치는 것은 루프다. 라고 말하고 싶다. 그리고 성능을 끌어 올리기 위해서는 루프를 도는 데이터 수를 최소화 해야 한다. 라고 말하고 싶다. 아직 경험이 미천하여 더 좋은 방법이 있을지 모르겠지만..
ABAP 프로그램의 성능향상을 위해서는 루프를 최소화 하고,
루프 내의 데이터 수를 최소화 해야 한다.
- 끗 -
'SAP' 카테고리의 다른 글
SAP HANA Cloud Platform Trial 버전 사용하기 (0) | 2015.04.06 |
---|---|
Open SAP 무료 e-learning courses (0) | 2015.04.06 |
SAP, ERP 신제품 SAP S/4 HANA 출시 (0) | 2015.04.06 |
FI 모듈의 기본 테이블 정보 (0) | 2014.07.11 |