𝗬𝗼𝘂𝗿 𝗔𝗽𝗲𝘅 𝗠𝗶𝗴𝗵𝘁 𝗥𝗲𝘁𝘂𝗿𝗻 𝗙𝗲𝘄𝗲𝗿 𝗥𝗲𝗰𝗼𝗿𝗱𝘀 𝗶𝗻 𝗦𝘂𝗺𝗺𝗲𝗿 '𝟮𝟲
Salesforce Summer '26 (API v67.0)은 Apex에 중대한 변화를 가져옵니다. 이 변화는 에러를 발생시키지 않으면서도 코드 실행 결과를 변경할 수 있습니다.
수년 동안 Apex는 기본적으로 시스템 모드(system mode)에서 실행되었습니다. 이는 SOQL, SOSL 및 DML이 사용자 권한과 공유 규칙(sharing rules)을 무시했음을 의미합니다. 즉, 코드가 권한이 없는 사용자에게 데이터를 보여줄 수도 있었습니다.
API v67.0에서는 이 기본 설정이 뒤바뀝니다. 이제 데이터베이스 작업은 사용자 모드(user mode)에서 실행됩니다.
v67.0에서 변경되는 사항:
• SOQL, SOSL 및 DML이 기본적으로 사용자 권한과 공유 규칙을 적용합니다. • 공유 선언(sharing declaration)이 없는 클래스는 이제 기본적으로 "with sharing"으로 동작합니다. • "WITH SECURITY_ENFORCED"가 제거되었습니다. 대신 "WITH USER_MODE"를 사용해야 합니다. • 트리거(Triggers)는 항상 시스템 모드에서 실행됩니다.
이 변화는 클래스의 API 버전과 연동됩니다. 기존 클래스는 67.0으로 업그레이드하기 전까지는 이전과 동일하게 유지됩니다. 이를 통해 마이그레이션을 제어할 수 있습니다.
다음과 같은 드러나지 않는 문제들을 주의하십시오:
- 쿼리 결과 레코드 감소: 사용자의 권한 부족으로 인해 쿼리가 500개 대신 40개의 행만 반환할 수 있습니다. 이는 잘못된 합계와 부정확한 보고서로 이어집니다.
- 컴파일 에러: 새 버전에서는 "WITH SECURITY_ENFORCED"를 사용할 경우 컴파일에 실패합니다.
- 통합(Integration) 실패: 통합 사용자가 자동화 작업에 필요한 데이터에 대한 액세스 권한을 잃을 수 있습니다.
- 공유 규칙 변경: 공유 선언을 하지 않았던 클래스들에 이제 공유 규칙이 적용됩니다.
안전하게 마이그레이션하는 방법:
- 코드 인벤토리 작성: "WITH SECURITY_ENFORCED" 및 공유 선언이 없는 클래스를 검색합니다.
- 샌드박스(sandbox)에서 테스트: 컨트롤러 및 REST 엔드포인트와 같이 위험도가 높은 클래스를 먼저 업데이트합니다.
System.runAs()사용: 테스트 통과 여부만 믿지 마세요. 제한된 권한을 가진 사용자로 테스트하여 데이터 가시성을 확인해야 합니다.- 의도적으로 사용: 명확한 이유가 있는 경우에만 "SYSTEM_MODE" 또는 "without sharing"을 사용하세요.
지금 이러한 변경 사항을 적용하면 나중에 발생할 수 있는 조용한 운영 환경(production) 버그를 방지할 수 있습니다.
Optional learning community: https://t.me/GyaanSetuAi