개발일지
Salesforce APEX Excetion Limit 모음 본문
1. Apex 실행 제한 (Execution Limits)
1.1 CPU 시간 제한
- 동기식 Apex에서 사용할 수 있는 CPU 시간은 최대 10초입니다.
- 비동기식 Apex(@future, Queueable Apex, Batch Apex)의 경우 60초까지 사용할 수 있습니다.
- CPU 시간 제한을 초과하면 System.LimitException이 발생합니다.
1.2 힙 메모리 제한 (Heap Size Limit)
- 동기식 Apex는 6MB까지 힙 메모리를 사용할 수 있습니다.
- 비동기식 Apex는 12MB까지 사용할 수 있습니다.
- 이 제한을 초과하면 System.LimitException이 발생합니다.
1.3 SOQL 쿼리 제한 (SOQL Query Limit)
- 한 트랜잭션 내에서 실행할 수 있는 SOQL 쿼리의 최대 수는 100번입니다.
- 쿼리 수가 초과되면 System.LimitException이 발생합니다.
1.4 DML 작업 제한 (DML Operation Limit)
- 150번의 DML 작업까지 허용됩니다. (insert, update, delete, undelete)
- DML 작업을 150번 이상 실행하려 하면 System.LimitException이 발생합니다.
1.5 연속 호출 제한 (Recursive Trigger Limit)
- 트리거가 연속적으로 호출될 수 있는 최대 횟수는 16번입니다.
- 트리거가 연속적으로 호출되면 재귀 호출을 방지하는 재귀 제한을 초과할 수 있습니다.
2. 비동기 처리 (Asynchronous Limits)
Salesforce는 비동기 작업을 @future, Queueable Apex, Batch Apex 등 여러 방식으로 처리할 수 있습니다. 비동기 처리 작업에 대해서도 별도의 제한이 존재합니다.
2.1 비동기 작업 한도 (Asynchronous Apex Limits)
- 비동기 Apex 실행 횟수: 하루에 250,000번의 비동기 Apex 작업을 실행할 수 있습니다.
- 배치 작업 한도 (Batch Apex): 한 배치에서 처리할 수 있는 최대 레코드 수는 50,000개입니다.
- Queueable Apex는 한 트랜잭션에서 최대 50번까지 실행할 수 있습니다.
비동기 작업을 남용하면 시스템이 과부하에 걸릴 수 있기 때문에 이를 적절히 분배하여 사용해야 합니다.
2.2 비동기 호출 및 콜아웃 제한 (Asynchronous Callouts)
- 비동기 작업에서는 외부 시스템과 HTTP 호출(콜아웃)을 할 수 있습니다.
- 한 트랜잭션 내에서 HTTP 콜아웃을 최대 100번까지 실행할 수 있습니다.
3. Apex 트리거 및 리스너 제한 (Trigger Limits)
Apex 트리거는 데이터 변경에 따른 로직을 실행하기 위해 사용됩니다. 트리거의 실행 횟수 및 호출 방식에도 제한이 있습니다.
3.1 트리거 실행 횟수
- 한 트랜잭션에서 최대 1,000번의 트리거를 실행할 수 있습니다.
- 너무 많은 트리거를 한 트랜잭션에서 실행하지 않도록 설계해야 합니다.
3.2 트리거 실행 순서
- 트리거가 실행되는 순서는 Insert → Update → Delete → Undelete의 순서로 처리됩니다.
- 여러 트리거가 동일한 객체에 대해 실행될 수 있으며, 그 순서에 따른 최적화를 고려해야 합니다.
4. Apex 코드에서의 제한
4.1 Apex 비동기 트랜잭션에서의 제한 (Asynchronous Limits)
- @future 메서드는 동기적으로 실행되지만, 비동기적으로 실행되어야 할 때 사용됩니다. 한 트랜잭션에서 호출할 수 있는 @future 메서드의 최대 수는 50번입니다.
4.2 쿼리 및 트랜잭션 제한
- DML 작업 및 SOQL 쿼리가 초과되면 System.LimitException이 발생하며, 이로 인해 트랜잭션이 중단됩니다.
- SELECT 문에서 다중 필드를 사용하는 경우, 처리할 수 있는 결과의 수와 행(row)의 개수가 제한됩니다.
5. 기타 제한
5.1 스케줄된 Apex (Scheduled Apex)
- 스케줄된 Apex 작업을 예약할 수 있는 최대 개수는 100개입니다.
- 예약된 작업은 특정 시간에 자동 실행되도록 예약됩니다.
5.2 동기 및 비동기 요청
- 동기식 Apex 요청은 CPU 시간과 메모리 사용에 대한 제한이 있으며, 비동기식 Apex 요청은 좀 더 넉넉한 시간과 리소스를 할당받습니다
apex에서의 실행제한들을 미리 숙지하고 있으면 코드를 작성하는데 있어 올바른 코드를 사용할 수 있다.
'Apex' 카테고리의 다른 글
Apex에서 종속 선택 목록 값 가져오기 (0) | 2025.01.20 |
---|---|
List 형식의 query문을 담고 리턴으로 List반환(데이터테이블에 목록출력) (0) | 2021.07.09 |
Apex Collection List, Set, Map (0) | 2021.07.09 |