이 텍스트는 Salesforce의 자동 번역 시스템을 사용하여 번역되었습니다. 이 콘텐츠에 대한 피드백을 제공하고 다음에 원하는 내용을 알려주려면 저희의 설문 조사을 참조하십시오.
업데이트 일정을 여기 읽어보세요.
시스템은 비즈니스가 주요 목표와 목표를 더 빠르고 대규모로 달성할 수 있도록 하여 자동화된 동작을 시연합니다. 정상적인 자동화를 사용하면 사용자가 중요한 작업에 집중하고 반복적인 수동 작업 또는 복잡한 데이터 입력에 소요되는 시간을 줄일 수 있습니다.
일반적으로 자동화는 서류 기반 양식에서 디지털 양식으로, 기존 시스템에서 새 시스템으로 비즈니스 프로세스를 다른 양식으로 번역함을 의미합니다. 모든 비즈니스 프로세스 번역은 변환의 기회를 제공합니다.
변환은 새로운 기술을 사용하여 사용자에게 중단적이고 혼란스러운 변경 사항을 도입하는 것이 아닙니다. 변환은 작업을 수행하는 간단한 방법을 만들고 비즈니스가 마찰 없이 성장할 수 있도록 하고 비즈니스 사용자가 이해당사자에게 중요한 사항에 집중할 수 있도록 합니다. 아키텍처 관점에서는 모두 제거하거나 자동으로 처리할 수 있는 과업을 식별해야 합니다. 기술이 사용되는 방식과 비즈니스에 미치는 측정 가능한 영향 간에 명확한 연결이 필요합니다.
Salesforce의 자동화에 대해 참고해야 할 중요한 사항은 프로그래밍 방식 및 선언적 기술 집합을 사용하여 다양한 도구를 사용하여 수행할 수 있다는 것입니다. 잘 설계된 자동화를 설계하는 것은 단일 자동화 도구로 구축하도록 선택하는 것이 아닙니다. 일관되고 예측 가능한 접근 방식을 사용하고 팀이 설계한 자동화를 개발, 테스트, 배포, 유지 관리할 수 있도록 합니다. 자동화는 가능한 한 가장 관리 가능하고 읽을 수 있는 형태를 취해야 합니다.
이 섹션에서는 비즈니스가 주요 목표를 더 빠르고 대규모로 충족할 수 있도록 자동화를 설계하고 리팩터링하는 방법을 설명합니다. 효율성 및 데이터 무결성에 집중하여 Salesforce에서 자동화 아키텍처를 개선할 수 있습니다.
자동화의 효율성을 창출하는 것은 Salesforce 기술을 사용하여 평소처럼 비즈니스를 재생성하는 것이 아닙니다. 이 작업은 팀이 회의 또는 추적을 담당하는 핵심 메트릭 및 비즈니스 결과를 깊이 이해하고 자동화하는 작업 내부와 전체의 기능 단위를 확인하는 데 필요한 것입니다. 자동화를 통해 비즈니스가 대규모로 더욱 효율적이고 빠르게 운영할 수 있는 패턴을 만들 수 있는 방법을 식별하는 작업입니다.
효율적인 자동화 논리를 통해 시스템이 다음을 수행할 수 있습니다.
- 확장성 향상 및 비즈니스에 대한 가치
- 사용자에게 더 유용
- 더욱 적절하고 변화하는 비즈니스 요구를 충족할 수 있음
프로세스 설계 및 운영 논리를 통해 자동화의 효율성을 향상할 수 있습니다.
프로세스 설계는 작업을 수행하는 방법을 정의하는 데 포함됩니다. 실제로 효율적이고 효과적인 프로세스를 구축하면 설계가 현재 작업 방식만 복제하는 것이 아닙니다. 효율적이지 않거나 명확하지 않은 단계를 식별하고 제거하는 것이 중요합니다. 최적화된 프로세스는 불필요한 단계 없이 측정 가능한 비즈니스 가치를 창출해야 합니다(KPI 참조). 명확하지 않거나 불필요한 단계를 수행하면 기술 부채가 발생하고 유지할 수 없는 자동화가 발생할 수 있습니다.
비즈니스 프로세스 발견 및 문서화에 대한 책임은 비즈니스 분석가 또는 시스템 관리자에 속하는 경우가 많습니다. 설계자는 팀의 해당 구성원과 파트너 관계를 맺어 프로세스 설계가 기술적으로 올바르고 구조화된지 확인할 책임이 있습니다. Salesforce Platform에 대한 Knowledge 가능한 한 빨리 적용하면 팀이 자동화를 통해 간소화할 프로세스 또는 비용이 많이 드는 사용자 정의를 피하기 위해 변경해야 하는 프로세스를 식별하는 데 도움이 됩니다.
Salesforce에 최적화된 프로세스를 구축하려면 다음을 고려하십시오.
-
프로세스를 철저하게 정의하십시오. 목적이 명확하지 않거나 정의가 모호한 프로세스는 설계 시점에 잘못 해석될 가능성이 높습니다. 따라서 가정을 기반으로 하는 디자인이 결함이 있으므로 자동화가 잘못되거나 비효율적일 수 있습니다. 자동화할 비즈니스 프로세스가 다음 표준을 충족하는지 확인합니다.
-
프로세스 단계를 명확하게 지정하십시오.* 때로는 "나중에 도움이 될 수 있습니다" 추가 단계를 추가하는 것이 유혹 될 수 있지만, 이것은 결코 좋은 접근 방식이 아닙니다. 자동화의 모든 단계는 전체 프로세스의 결과와 관련이 있습니다. 각 프로세스 단계에 다음과 같은 특성이 있는지 확인합니다.
아래의 패턴 및 안티패턴 목록은 Salesforce 조직에서 올바르고 나쁜 최적화를 보여줍니다. 이를 사용하여 구축하기 전에 자동화 설계를 확인하거나 추가로 최적화해야 하는 자동화를 식별할 수 있습니다.
Salesforce에서 제공하는 프로세스 자동화 도구에 대한 자세한 내용은 자동화와 관련된 도구를 참조하십시오.
운영 논리는 프로세스가 설계에서 실제 구현으로 얼마나 효과적으로 전환되는지를 다룹니다. 강력한 운영 논리를 사용하는 자동화는 트랜잭션 볼륨이 급증하거나 실행 중인 동시 인스턴스 수에 관계없이 계속해서 잘 수행됩니다. 논리적으로 정상적인 자동화를 사용하면 비즈니스가 더 쉽게 규모를 조정하여 높은 수요 수준에서 운영할 수 있습니다. 자동화에 강력한 운영 논리를 구축하는 것은 시스템의 전체적인 신뢰성과 직접적으로 관련이 있습니다.
효율적으로 작동하지 않는 자동화는 사용자 및 고객 경험이 부족하여 잠재적인 매출 손실과 고객 Trust 손실을 야기합니다. 또한 서비스 점검 비용이 높아 관련 프로세스를 지연시키고 전체 시스템 성능 문제에 영향을 미칠 수 있습니다.
자동화에서 효과적인 운영 논리를 만들려면 다음을 고려하십시오.
- 자동화를 만드는 모든 사람이 올바른 방법을 알고 있는지 확인하십시오. 모든 종류의 자동화 도구로 부정적인 설계 선택을 할 수 있습니다. 코드는 클릭 기반 도구보다 오류 또는 구현 선택 항목이 적을 가능성이 높습니다. 예를 들어 하드 코딩된 참조 ID를 사용하는 것은 플로와 코드 모두에 표시되는 안티 패턴입니다. 클릭 기반 도구는 모든 사용자가 자동화를 프로덕션으로 릴리스할 수 있도록 허용하는 라이센스로 볼 수 없습니다. 자동화를 만드는 모든 팀 구성원은 올바른 방법으로 구축하는 방법을 알아야 합니다. 시스템 전체에서 효과적인 표준을 정의하고 적용하는 방법에 대한 자세한 내용은 읽기 및 설계 표준을 참조하십시오.
- 모든 실행 경로를 명확하게 문서화합니다. 자동화 사용이 증가하면 잠재적인 데이터 용량이 증가할 뿐만 아니라 계획되지 않은 호출 컨텍스트도 증가합니다. 다양한 자동화를 호출할 수 있는 방법을 이해하고 여러 항목이 있는 모든 자동화에 적절한 트랜잭션 제어(데이터 처리를 참조)가 표시되는지 확인해야 합니다. 예를 들어, 화면 플로는 대량 데이터 로드에서 실행되지 않지만 Apex 트리거와 트리거(및 자동 실행) 플로가 실행됩니다. 자동화에 대해 계획된 실행 경로와 잠재적인 실행 경로를 명확하게 문서화하는 것은 구현 동안 적용해야 하는 논리적 조건을 이해하는 핵심적인 측면입니다.
- **"Bulkify"는 모든 데이터 작업(SOQL 포함)**입니다. 컬렉션에 대해 모든 데이터 작업(삽입, 업데이트 등)을 수행해야 합니다. 항상. 예외가 없습니다. 이는 "불량 처리" 작업을 의미합니다. 플랫폼에서 singleton 데이터 작업을 지원할 수 있지만, singleton 패턴을 구현하는 것을 허용해서는 안 됩니다.
- 검색 작업에 SOSL을 사용하십시오. SOSL을 통해 반환된 레코드에 대해 데이터 작업을 수행할 수 없다는 오해가 있습니다. DML은 SOSL 결과에 대해 직접 호출할 수 없지만 코드는 SOSL 결과를 구문 분석하고 DML 또는 데이터베이스 클래스 메서드에서 참조할 수 있는 컬렉션을 만들 수 있습니다. SOSL과 SOQL 간의 주요 차이점은 각 반환 유형과 일반화 또는 와일드카드 검색에 반응하는 방식입니다. SOSL은 여러 sObject 유형(반환 유형이 다르기 때문에)에 대해 작동하며 SOQL보다 성능이 뛰어난 와일드카드 및 일반화된 문자열 검색을 처리할 수 있습니다.
- SOQL을 데이터 작업처럼 처리합니다. SOQL을 사용하여 레코드를 찾지 말고 이를 사용하여 데이터 작업을 구체화합니다. SOQL 및 데이터 작업은 기본 관계형 데이터베이스의 성능에 매우 유사한 영향을 미칠 수 있습니다. SOQL은 데이터 작업을 예상할 때 데이터베이스 행을 잠그는 분명한 DML 지표도 전달할 수 있습니다. 확장 가능한 자동화를 만들려면 SOQL을 매우 구체적이고 잘 구성된 선택 기준 없이 사용하지 말고, 외부 필드 참조를 허용하지 말고, 필드 간 데이터 유형 일치 및
WHERE문 논리의 필터 입력에 주의를 기울여야 합니다. 또한 코드에 쿼리가 대량 처리되지 않은 컨텍스트 또는 null 또는 공백 필터 기준에 대해 실행되지 않도록 적절한 제어 기능이 있어야 합니다. - 동기 작업을 실시간으로 사용자에게 도움이 되는 작업에 집중하십시오. 프로세스 최적화 과정에서 사용자가 실시간 또는 거의 실시간으로 수행해야 하는 작업과 관련된 논리를 파악하고 비동기(비동기) 트랜잭션으로 연기할 수 있는 작업을 파악합니다. 동기화/비동기화 작업 설계에 대한 자세한 내용은 데이터 처리을 참조하십시오.
아래의 패턴 및 안티패턴 목록은 Salesforce 자동화에서 올바르고 나쁜 운영 논리를 보여줍니다. 이를 사용하여 구축하기 전에 자동화 설계를 확인하거나 추가로 최적화해야 하는 자동화를 식별할 수 있습니다.
확장 계획에 도움이 되는 Salesforce에서 사용할 수 있는 도구에 대해 자세히 알아보려면 자동화와 관련된 도구를 참조하십시오.
자동화 KPI는 시간에 따른 자동화의 영향을 측정합니다. 자동화를 사용하지 않으면 자동화가 실제로 비즈니스 가치를 더하거나 사용자를 위해 의도하지 않은 복잡성을 만드는지 알 수 없습니다. 구축하는 모든 자동화는 명확하고 측정 가능한 KPI 집합에 연결되어 있어야 합니다.
좋은 KPI는 연관된 시간 범위와 함께 측정 가능한 값으로 정의됩니다. 예:
- [X 번호] 월별 작업 시간 저장
- 매주 수동 데이터 입력의 처리 실패가 [Y%]로 감소했습니다.
명확하고 측정 가능한 KPI가 있으면 Salesforce의 자동화가 이러한 KPI에 대한 보고와 관련된 데이터를 생성하는지 여부와 방법을 이해해야 합니다.
아래의 패턴 및 안티패턴 목록은 Salesforce 자동화와 관련하여 올바르고 나쁜 KPI를 보여줍니다. 이를 사용하여 기존 KPI를 확인하거나 구축하기 전에 KPI를 더 잘 식별해야 하는 위치를 식별할 수 있습니다.
KPI에 대한 도움을 받으려면 Salesforce에서 사용할 수 있는 도구에 대해 자세히 알아보려면 자동화된 도구를 참조하십시오.
다음 표는 조직에서 조회하거나 구축할 패턴을 선택하고 방지하거나 조치를 위한 안티 패턴을 보여줍니다.
✨ Pattern & Anti-Pattern Explorer에서 효율성을 위한 더 많은 패턴을 알아보십시오.
| 패턴 | 안티 패턴 | |
|---|---|---|
| 프로세스 설계 | 조직에서:
- 각 플로는 단일 특정 목적을 제공합니다. - 각 단계는 특정한 세분화된 과업을 수행합니다. - 플로는 기본 플로 및 지원 하위 플로로 구성된 계층 구조로 구성됩니다. - 플로 내에서 모든 사용자 입력에 명확한 목적이 있습니다. - 기존 시스템 데이터를 사용할 수 없는 경우에만 사용자에게 데이터 제공을 요청합니다. |
조직에서:
- 플로는 여러 목적으로 사용되며 추가 입력이 있어야만 컨텍스트를 제공할 수 있습니다. - 플로에는 데이터가 사용되지 않는 입력이 필요합니다. - 관련 단계 그룹에 다른 플로의 단계 그룹과 겹치는 기능이 포함됩니다. - 플로에서 대신 저장된 데이터를 사용할 수 있는 경우 사용자 입력을 요청합니다. |
| Apex:
- 각 클래스는 단일 특정 목적을 제공합니다. - 각 메서드가 특정한 세분화된 과업을 수행합니다. - 모든 입력 변수는 클래스 내에서 명확한 목적이 있습니다. - 코드를 실행하려면 최소한의 자원이 필요합니다. |
Apex:
- 여러 목적으로 클래스 제공 - 메서드가 여러 과업을 수행하거나 메서드가 속한 클래스의 명시된 목적에 부합하지 않는 과업을 수행합니다. - 입력 변수가 실제로 메서드에 사용되지 않음 - 데이터베이스 또는 외부 시스템에서 데이터를 불필요하게 검색하는 메서드 |
|
| 운영 논리 | 지속:
- 변수는 하드 코딩된 값을 참조하지 않습니다(레코드 유형, 사용자 등). - 모든 자동 실행 플로 및 프로세스는 결정 및/또는 일시 중지 요소를 사용하여 항목 기준을 평가하고 대용량 데이터에 대한 무한 루프 또는 실행을 방지합니다. - 플로(프로세스 포함)는 대용량 데이터 컨텍스트에서 Apex 논리를 전달합니다. - 하위 플로는 비즈니스 전체에서 재사용해야 하는 프로세스 섹션에 사용됩니다. |
지속:
- 변수에 하드 코딩된 값이 있습니다. - 대량 데이터 로드 전에 플로(프로세스 포함)를 수동으로 비활성화해야 합니다. - 플로(프로세스 포함)는 "처리되지 않은 예외" 알림을 트리거합니다. - 간단한 플로에서도 정기적으로 총괄자 제한과 관련된 오류가 발생합니다. - 하위 플로를 사용하는 대신 플로 전체에서 플로의 일부가 반복됩니다. |
| Apex:
- 변수는 하드 코딩된 값을 참조하지 않습니다(레코드 유형, 사용자 등). - 모든 와일드카드 기준이 SOSL에 표시됩니다. - SOQL은 시험 가져오기로 래핑됩니다.
- 루프 내에 SOQL이 표시되지 않음 - SOQL 문은 다음을 포함하여 선택적입니다. -- LIKE 비교 또는 부분 텍스트 비교 사용 안 함
-- 비교 연산자는 양성 논리(즉, INCLUDES, IN)를 기본 또는 유일한 논리로 사용합니다.
-- = NULL, != NULL의 사용은 드물거나 항상 양성 비교 연산자를 따릅니다.
-- no LIMIT 1 문이 표시됩니다.
-- no use of ALL ROWS 키워드
| Apex:
- 변수에 하드 코딩된 값이 있습니다. - SOSL은 와일드카드 선택 기준에 거의 사용되거나 일관되지 않음 - SOQL은 테이프 캐치에 래핑되지 않음
- SOQL이 루프 내에 표시됩니다. - SOQL 문은 다음을 포함하여 선택적이지 않습니다. -- LIKE 및 와일드카드 필터 기준이 나타납니다.
-- NOT, NOT IN 기준을 사용하는 비교는 기본 또는 유일한 비교 연산자로 사용됩니다.
-- = NULL, != NULL 기준이 기본 또는 유일한 비교 연산자로 사용됩니다.
-- 표시되는 LIMIT 1 문
-- ALL ROWS 키워드가 사용됩니다.
| |
| 설계 표준 및 문서:
- 자동화에 대해 계획된 실행 경로 및 잠재적인 실행 경로가 명확하게 요약되어 있습니다. - 자동화 내 동기식 및 비동기식 작업에 대한 사용 사례가 설계 표준의 일부로 명확하게 요약되어 있습니다. |
설계 표준 및 문서:
- 자동화 호출이 문서화되지 않음 - 동기 및 비동기 작업에 대한 사용 사례가 해결되지 않음 |
|
| KPIs | 문서 내에서:
- 모든 자동화에 대한 출력이 측정 가능하고 시간 바인딩 - 각 KPI에 대해 책임이 있는 이해당사자가 나열됩니다. |
문서 내에서:
- 자동화에 대한 KPI가 없거나 측정 시간 범위가 명확하지 않음 - 책임 있는 이해당사자가 없는 KPI가 존재합니다. |
| 보고서 및 대시보드 내:
- KPI와 관련된 모든 메트릭이 하나 이상의 보고서 또는 대시보드에 포함되어 있습니다. |
보고서 및 대시보드 내:
- KPI 보고서가 없거나 일부 KPI와 관련된 메트릭이 누락된 보고서 |
데이터 무결성은 시스템에서 정확하고 완전한 데이터를 얼마나 잘 유지하는지에 관한 것입니다. Salesforce Platform은 개별 조직의 관계형 데이터베이스에 저장된 데이터의 무결성을 보호하도록 설계된 강력하고 내장된 처리 논리를 유지합니다. 정상적인 자동화를 구축하는 기본 사항 중 하나는 Salesforce의 내장 데이터 무결성 동작을 이해하고 모든 자동화 설계가 해당 동작에 부합하는지 확인하는 것입니다.
자동화 설계에서 가장 큰 방해는 강력한 데이터 무결성 서비스(Salesforce)를 인식하지 못하고 이러한 서비스를 활용하는 표준 기능을 사용하지 못함 때문입니다. 데이터 무결성을 보호하고 유지하는 자동화를 설계하려면 Salesforce의 기본 운영 행동 순서를 숙지해야 합니다.
데이터 무결성을 사용자 정의 자동화에 적절하게 확장하면 시스템에서 다음을 수행할 수 있습니다.
- 수동으로 개입하지 않고 대량 및 대용량 데이터에 대해 작업
- 필요한 경우 사용자 보안 정책을 적용하고 필요한 경우 시스템 컨텍스트로 전환합니다.
- 런타임 시 오류가 발생하고 예측 가능한 복구 또는 실패 경로를 따릅니다.
올바른 데이터 처리 및 오류 처리를 통해 Salesforce 자동화에 더 나은 데이터 무결성을 구축할 수 있습니다.
Salesforce에서 데이터를 올바르게 처리하도록 설계하는 첫 단계는 멀티테넌트 플랫폼이 트랜잭션을 처리하는 방식을 이해하는 것입니다. 여기에는 Salesforce Platform이 레코드 수준 데이터 작업 동안 데이터 무결성을 보장하기 위해 사용하는 내장된 실행 순서의 이해가 포함됩니다. 이 동작의 영향에 대한 자세한 내용은 Salesforce 아키텍처 기본 사항에서 데이터베이스 조작을 참조하십시오.
자동화에서 데이터를 처리하지 않으면 식별하고 완전히 해결하기가 가장 어려운 안티 패턴 중 일부가 될 수 있습니다. 플랫폼의 실행 순서가 반복되고 중복되므로 문제가 발생한 위치를 확인하기 어려울 수 있습니다. 치명적인 오류가 발생하거나 총괄자 제한을 초과하는 코드 또는 플로의 특정 섹션이 기본 데이터 처리 문제의 근본 원인일 수 없습니다.
트랜잭션 인식은 Salesforce에서 신뢰할 수 있고 대규모로 수행할 수 있는 자동화를 구축하는 데 매우 중요합니다. 즉, 자동화의 각 단계가 플랫폼에서 제어하는 실행 순서와 관련하여 어디에 있는지에 대한 Knowledge로 설계되고, 기능을 올바르게 수행하고, 정보가 다음 단계로 올바르게 전달되는지 확인합니다.
사용 중인 자동화 도구와 상관없이 올바른 트랜잭션 인식은 유사한 패턴을 따르며 일반적인 고려 사항이 필요합니다.
- 모든 자동화가 주어진 시간에 공지 없이 대용량 데이터에 대해 실행되도록 요청한다고 가정합니다. 자동화에는 배치 또는 대량 실행을 허용하는 경로가 있어야 합니다(확장성 참조).
- 동일한 트랜잭션에서 시스템 및 사용자 컨텍스트 데이터 작업을 혼합하지 마십시오.
- 동기화 데이터 작업을 이전 컨텍스트에 예약하고 모든 컨텍스트 작업 후에 비동기 작업을 사용합니다.
- 사용자가 비동기 작업의 결과를 기반으로 데이터를 대기해야 하는 앱 내 환경을 생성하지 않도록 메시징 및 알림을 사용합니다.
트랜잭션 인식 이외에 데이터 처리에는 두 번째 차원이 있습니다. 다른 실행 컨텍스트에서 논리를 수행할 시점을 아는 것입니다. 자동화를 다른 실행 컨텍스트로 구분하는 일반적인 이유는 다음과 같습니다.
- 대용량 및/또는 복잡한 데이터 작업
- 자동화가 대용량 데이터를 올바르게 처리하는 것을 보장하지는 않습니다. 대량화 작업 자동화 내의 데이터 작업량이 트랜잭션당 제한을 초과할 경우 대용량 데이터에 고유한 기능(예: 배치 Apex 또는 Bulk 2.0 API)을 사용하여 데이터 작업을 수행해야 합니다. 대용량 데이터에 적합한 고유한 트랜잭션 제한이 있습니다.
- 복잡한 관계 계층을 이동하거나 레코드 전체에서 복잡한 재계산(수식 필드 제외)을 수행해야 하는 데이터 작업은 대량으로 수행될 때 트랜잭션당 제한을 쉽게 초과할 수 있습니다. 관련 데이터 작업 또는 시스템에서 후속 작업을 완료하는 데 필요한 SOQL 측면에서 하나의 레코드에 대한 업데이트가 얼마나 "소음"적인지 고려하십시오.
- 자동화의 전체 체인에 관여하는 sObjects 유형은 "교체 DML" 오류를 방지하기 위해 데이터 작업을 별도의 트랜잭션으로 분할해야 할 수 있습니다.
- 사용자 또는 시스템 컨텍스트에서 실행해야 하는 논리
- Salesforce Platform은 사용자 컨텍스트에서 공유 및 가시성을 적용합니다. 자동화 사용자의 권한 수준 이상으로 확장되는 작업을 수행해야 하는 경우 해당 작업이 시스템 컨텍스트에서 실행되는지 확인해야 합니다.
- 다양한 도구가 다른 컨텍스트에서 실행되거나 실행되지 않습니다.
- Apex 기본적으로 시스템 컨텍스트에서 실행됩니다. Apex 클래스 정의에서 공유 키워드를 사용하여 Apex 동작이 사용자 수준 공유 규칙을 적용하는지 여부와 방법을 제어할 수 있습니다.
- 플로에는 단일 기본 동작이 없습니다. 플로가 사용자 또는 시스템 컨텍스트에서 실행됩니다. 플로가 시작되는 방법에 따라 시스템 컨텍스트에서 공유를 적용할 수 있는 옵션이 있습니다.
- 프로세스(즉, 프로세스 빌더로 구축된 자동화)는 공유 고려 사항 없이 시스템 컨텍스트에서 실행됩니다. (주: 플로를 사용하여 하위 코드 자동화를 구축하는 것이 좋습니다.
- 비동기식으로 실행해야 하는 논리
아래의 패턴 및 안티패턴 목록은 Salesforce 자동화에서 올바르고 나쁜 데이터 처리를 보여줍니다. 이를 사용하여 구축하기 전에 자동화 설계의 유효성을 검사하거나 데이터 처리를 개선하기 위해 재구성해야 하는 자동화를 식별할 수 있습니다.
자동화에서 데이터 처리를 위해 Salesforce에서 사용할 수 있는 도구에 대해 자세히 알아보려면 자동화와 관련된 도구를 참조하십시오.
오류 처리는 데이터 무결성에 중요합니다. 강력한 오류 처리 기능은 또한 시스템의 확장 및 오래된 상태를 더욱 활성화할 수 있도록 돕습니다.
자동화에서 오류를 부적절하게 처리하면 다음이 발생할 수 있습니다.
- 레코드 불일치 및 기타 데이터 무결성 문제
- 사용자 및 다른 시스템에 부정확한 알림 보내기
- 수동 또는 반복적인 처리에 시간과 자원 낭비
- 시스템에 대한 전반적인 Trust 부족
자동화에서 오류를 처리하려면 실행 중인 프로세스에 오류를 구문 분석하고, 오류 정보를 기반으로 다음 단계에 대한 논리에 액세스하는 기능을 부여한 다음, 올바른 경로를 따르십시오. 이러한 기능은 모든 자동화에서 반복적으로 구축할 필요가 없습니다(그것은 최적화 안티 패턴입니다). 대신 시스템의 모든 자동화는 관련 오류 처리 구성 요소에 연결할 수 있어야 합니다.
자동화에 적절한 오류 처리 제어를 구축하려면 다음 질문을 하십시오.
- "정상" 오류란 무엇입니까?
- "복구 가능" 오류란 무엇입니까?
- 사용자 작업으로 트리거된 자동화의 경우 자동화가 변경을 커밋하기 전에 사용자에게 오류를 포착하고 알릴 수 있는 방법은 무엇입니까?
이러한 오류를 처리하는 방법을 결정하면 자동화에 효과적인 오류 처리를 구축할 수 있습니다. 아래의 패턴 및 안티패턴 목록은 Salesforce 자동화에서 올바르고 나쁜 오류 처리를 보여줍니다. 이를 사용하여 구축하기 전에 자동화 설계의 유효성을 검사하거나 오류 처리를 개선하기 위해 재구성해야 하는 자동화를 식별할 수 있습니다.
오류 처리에 대해 Salesforce에서 사용할 수 있는 도구에 대한 자세한 내용은 자동화에 대한 도구를 참조하십시오.
다음 표는 조직에서 조회하거나 구축할 패턴을 선택하고 방지하거나 조치를 위한 안티 패턴을 보여줍니다.
✨ Pattern & Anti-Pattern Explorer에서 데이터 무결성에 대한 더 많은 패턴을 알아보십시오.
| 패턴 | 안티 패턴 | |
|---|---|---|
| 데이터 처리 | 데이터 사전:
- 모든 데이터 소스 및 데이터 레이크 개체에 대한 필드 수준 데이터 및 우선 순위 지정 논리가 있습니다. - 데이터 레이크 개체에서 데이터 모델 개체로 필드 매핑이 있는 경우 |
데이터 사전:
- 데이터 소스 및 데이터 레이크 개체에 대한 필드 수준 데이터 및 우선 순위 지정 논리가 포함되지 않습니다. - 데이터 레이크 개체에서 데이터 모델 개체로의 필드 매핑은 포함되지 않습니다. |
| Apex에서:
- 모든 동기식 DML 문 또는 데이터베이스 클래스 메서드가 트리거 실행 컨텍스트 전에 수행됩니다. - 비동기 Apex 호출은 트랜잭션 전반에 걸친 복잡한 DML에 대기 가능을 사용합니다. - 배치 Apex 대용량 데이터에만 사용됩니다. - @future Apex가 콜아웃 또는 시스템 객체 DML에 사용되거나 사용되지 않습니다. |
Apex에서:
- DML 문은 정기적으로 트리거 컨텍스트 후에서 호출되는 코드에 표시됩니다. - 비동기 Apex 거의 사용되지 않습니다. - 비동기 Apex 기능은 다음을 포함하여 임의로 사용됩니다. -- Future 메서드 및 대기 가능한 Apex 일관되지 않거나 상호 교환적으로 사용됩니다. -- 데이터베이스 작업에 필요한 경우 배치 Apex 실행을 전달하기 위한 명확하고 일관된 논리가 없습니다. |
|
| 지속:
- 사용자 컨텍스트에서 시작된 모든 플로는 모든 시스템 컨텍스트 트랜잭션을 일관되게 일시 중지 요소 뒤에 배치되는 하위 플로에 추상화하여 새 트랜잭션을 생성합니다. - 오케스트레이터를 사용하여 관련 데이터 작업의 복잡한 시퀀스를 만듭니다(모노리틱 플로 내에서 여러 하위 플로를 호출하는 대신). - 모든 레코드 트리거 플로에 트리거 순서 값이 채워집니다. - 외부 시스템 콜아웃 또는 장기 실행 프로세스와 관련된 플로는 비동기 경로를 사용합니다. |
지속:
- 대형 모노리틱 플로는 관련 데이터 작업의 복잡한 시퀀스를 조정하도록 시도합니다(하위 플로 포함 또는 제외). - 레코드 트리거 플로는 트리거 순서 특성을 전혀 사용하지 않거나 트리거 순서 값을 일관적으로 사용하지 않습니다. - 비동기 경로는 일관되게 사용되지 않거나 전혀 사용되지 않습니다. |
|
| 조직에서:
- ID 확인 조정 규칙은 데이터 사전의 우선 순위 논리를 따릅니다. |
조직에서:
- ID 확인 조정 규칙은 데이터 사전의 우선 순위 논리를 따르지 않습니다. |
|
| 오류 처리 | Apex:
- 코드는 모든 DML, SOQL, 콜아웃 및 기타 중요한 프로세스 단계를 테이프 캐치 블록으로 래핑합니다.
- 고급 오류 메시지 및 논리를 만드는 데 사용자 정의 예외가 사용됩니다. - 비동기 및 대량 컨텍스트에서는 DML 대신 데이터베이스 클래스 메서드가 사용됩니다. - 데이터베이스 클래스 메서드는 DML 대신 모든 데이터 작업에만 사용할 수 있습니다. |
Apex:
- DML, SOQL, 콜아웃 또는 기타 중요한 프로세스 단계가 일관되게 테이프 캐치 블록에 래핑되지 않음
- System.debug 문은 프로덕션 코드에 표시되며 코멘트가 표시되지 않습니다.
- 데이터베이스 클래스 메서드가 사용되지 않음 - 데이터 작업은 DML에서만 수행됩니다. |
| Lightning 웹 구성 요소(LWC):
- JavaScript는 모든 데이터 작업 및 중요한 프로세스 단계를 블록 인 경우 () / 다른 경우 () 묶습니다.
- 모든 @wire 함수는 API에서 제공하는 데이터 및 오류 속성을 사용합니다.
- All if (error) / ele if (error) 문은 오류를 처리하고 정보 메시지를 제공하는 논리를 포함합니다. |
LWC:
- JavaScript는 데이터 작업 또는 중요한 프로세스 단계를 차단하는 경우 일관되게 사용되지 않습니다 . () / 다른 경우 ()
- @wire 함수는 API에서 제공하는 데이터 및 오류 속성을 사용하지 않습니다(또는 일관되게 사용하지 않습니다).
- 전혀 사용되는 경우, (오류) / 기타(오류) 문에 실제로 오류를 처리하고 유용한 오류 메시지를 제공하는 논리가 포함되지 않습니다. |
|
| Aura:
- JavaScript는 모든 데이터 작업 및 중요한 프로세스 단계를 시도 캐치 블록으로 래핑합니다.
- Try-catch 블록 내에서 throw 문에 네이티브 JavaScript 오류가 사용됩니다($A.error()의 사용 안 함)
- 모든 복구 가능한 오류 논리가 캐치 문 안에 나타나고 명확한 사용자 메시지를 제공합니다. |
Aura:
- JavaScript는 데이터 작업 및 중요한 프로세스 단계를 일관되게 시도 캐치 블록으로 래핑하지 않습니다.
- 구성 요소는 $A.error()를 사용합니다.
- 복구 가능한 오류 논리가 캐치 명령 내에 일관되게 표시되지 않으며 사용자에게 오류 메시지가 명확하지 않습니다. |
|
| 지속:
- 화면 플로에서 오류 커넥터를 사용하여 사용자에게 오류를 표시합니다. - 화면에 표시되는 오류에 대해 사용자 정의 오류 메시지가 구성됩니다. - 데이터 작업, 콜아웃 및 기타 중요 처리 논리가 있는 플로는 모든 주요 작업에 대한 오류 경로가 있습니다. |
지속:
- 플로에서 오류 경로를 일관되게 또는 전혀 사용하지 않습니다. - 사용자 정의 오류 메시지가 사용되지 않으므로 사용자에게 기본 "이 플로에서 처리되지 않은 오류가 발생했습니다" 메시지가 표시됩니다. |
자동화 컨텍스트에서 비즈니스 가치의 개념은 프로세스가 비즈니스 이해당사자에게 측정 가능한 긍정적인 영향을 미치는 정도에 관한 것입니다. 프로세스 자동화를 사용하면 사용자가 가치가 낮은 반복적인 과업에 소요되는 시간을 줄일 수 있습니다. 오류를 유발할 수 있는 수동 처리 활동을 제거하여 데이터 무결성을 높일 수도 있습니다. 프로세스 디자인과 마찬가지로 실제 비즈니스 가치를 창출할 수 있는 자동화를 식별하고 제공하려면 기본적인 검색 및 비즈니스 분석 이상의 작업이 필요합니다.
비즈니스에 가치를 제공하는 가장 좋은 방법은 백로그(또는 티켓 대기열)에 표시되는 순서대로 또는 조직의 정치적 요소를 기반으로 비즈니스 사용자가 요청한 모든 프로세스를 자동화하기만 하면 됩니다. 이렇게 하면 두 가지 관련 문제가 발생할 수 있습니다. 자동화를 최적화되지 않은 순서로 구축하고 잘못된 자동화를 모두 구축합니다. 첫 번째 문제인 우선 순위 지정이 좋지 않으면 중요한 프로세스가 적시에 구현되지 않으므로 성장이 잠재적으로 느려집니다. 잘못된 자동화를 구축하는 두 번째 문제는 가치가 큰 자동화의 전달을 지연시킬 뿐만 아니라 시간 낭비, 불필요한 비용, 배달 팀의 불만족을 증가시킵니다.
KPI 및 우선 순위 지정에 집중하여 비즈니스 가치를 높일 수 있습니다.
| 도구 | 설명 | 효율성 | 데이터 무결성 | 비즈니스 가치 |
|---|---|---|---|---|
| Apex 배치 | 레코드를 함께 배치하고 관리 가능한 청크로 처리 | X | X | |
| Apex Future Methods | 백그라운드에서 비동기식으로 Apex 메서드 실행 | X | X | |
| Apex 대기열 | Apex 작업을 대기열에 추가하고 모니터링 | X | X | |
| Apex Scheduler | 지정된 시간에 비동기식으로 Apex 클래스 실행 | X | X | |
| 승인 | 레코드를 승인하는 데 필요한 단계 지정 | X | X | |
| 비동기 Apex | Apex 코드를 비동기식으로 실행 | X | X | |
| 자동화된 작업 | 백그라운드에서 필드 업데이트, 이메일 보내기 및 기타 작업 수행 | X | X | |
| Einstein Next Best Action | 적시에 적절한 사람에게 적절한 권장 사항 표시 | X | X | |
| 이메일 경고 | 자동화된 이메일 만들기 및 보내기 | X | X | |
| 에스컬레이션 작업 | 사례 에스컬레이션에 수행할 자동화된 작업 지정 | X | X | |
| 필드 업데이트 | 자동화를 기반으로 필드 값 업데이트 | X | X | |
| 플로우 빌더 | 포인트 앤 클릭 인터페이스로 자동화 구축 | X | X | |
| 플로 확장 | 플로에서 구성 요소 입력으로 저장된 변수에 액세스 | X | ||
| 플로 템플릿 라이브러리 | 템플릿을 사용하여 산업별 플로 설계 | X | X | |
| 플로 트리거 | 복잡한 비즈니스 프로세스 자동화 | X | ||
| 청구 가능한 조치 | 플로에 Apex 기능 추가 | X | X | |
| 오케스트레이터 | 다단계 자동화 만들기 및 관리 | X | X | |
| 아웃바운드 메시지 | 영수증 및 재시도가 포함된 자동 프로세스에서 정보 보내기 | X | ||
| 플로를 사용하여 플랫폼 이벤트 게시 | 사용자 상호 작용 및 자동화를 통한 이벤트 게시 | X | ||
| 쿼리 최적화 프로그램 | 선택성 및 색인을 사용하여 쿼리, 보고서, 목록 보기 성능 향상 | X | X | |
| Salesforce 플로 | Flow Builder로 선언적 프로세스 자동화 만들기 | X | X | |
| 플로를 사용하여 알림 보내기 | SMS, WhatsApp 또는 Facebook Messenger를 통해 메시지 보내기 | X | X | |
| 프로세스와 함께 알림 보내기 | SMS, WhatsApp 또는 Facebook Messenger를 통해 메시지 보내기 | X | X | |
| 업데이트 수정자용 SOQL | 레코드를 잠가 레이스 조건 및 스레드 안전 문제 방지 | X | ||
| Strategy Builder | 레코드 페이지에 표시할 권장 사항 식별 | X | X | |
| 하위 흐름 | 재사용을 통한 플로 복잡성 줄이기 | X | ||
| 플랫폼 이벤트를 플로로 구독하기 | 자동화를 통해 게시된 메시지 수신 | X | ||
| 작업 작업 | 자동화에서 사용자에게 제공되는 할당 세부 사항 결정 | X |
| 자원 | 설명 | 효율성 | 데이터 무결성 | 비즈니스 가치 |
|---|---|---|---|---|
| Apex 실행 총괄자 및 제한 | Apex 런타임 엔진이 제한을 적용하는 방법 알아보기 | X | X | |
| 배치 관리 자원 | 배치 작업 만들기, 관리, 예약 및 모니터링 | X | X | |
| SOQL 및 SOSL의 모범 사례 | 대용량 데이터를 사용하여 응용 프로그램의 쿼리 성능 향상 | X | ||
| 설계 표준 템플릿 | 조직에 대한 설계 표준 만들기 | X | X | X |
| 트랜잭션의 플로 대량 처리 | 컬렉션에 대해 작동하도록 플로 설계 | X | X | |
| 플로 데이터 고려 사항 | 배치 데이터에 대한 일정 트리거 플로에 대해 알아보기 | X | X | |
| 플로 디버깅 | 플로 테스트 및 문제 해결 | X | ||
| 요청 처리 방법 | Salesforce가 작업을 빠르게 처리하고 실패를 최소화하는 방법 알아보기 | X | X | |
| KPI 스프레드시트 템플릿 | 특정 메트릭의 비즈니스 가치 결정 | X | X | |
| 호출 가능한 작업에서 외부 시스템에 콜아웃 만들기 | Apex 사용하여 플로에서 외부 시스템 호출 | X | ||
| 혼합 DML 작업 | 동일한 트랜잭션에서 DML에 함께 사용할 수 있는 sObject 파악 | X | X | |
| 실행 명령 | 삽입, 업데이트, 업서트에 대한 이벤트 순서 이해 | X | X | |
| 쿼리 계획 FAQ | 대용량 데이터와 관련된 쿼리 최적화 | X | X | |
| 예약 트리거형 플로 고려 사항 | 일정 트리거 플로의 특수 동작 이해 | X | ||
| 트랜잭션 관리 | 현재 데이터베이스 상태를 지정하는 세이브포인트 생성 | X | X | |
| 플로가 실패하면 어떤 일이 발생합니까? | 플로의 오류 처리 이해 | X | X | |
| 워크플로 자동화 모범 사례 가이드 | Salesforce 자동화 시작하기 | X | X | X |
| 대규모 SOQL 쿼리 작업 | 더욱 효율적인 SOQL 쿼리 작성 | X |
Salesforce Well-Architected의 관련성을 유지할 수 있도록 도와주십시오. 이 콘텐츠에 대한 사용자 의견을 제공하려면 설문 조사을 작성하고 다음에 표시할 내용을 알려주십시오.