Apex에서 비즈니스 로직 작성하기
Trail Together와 함께 알아보기
이 단계를 전문가와 함께 진행하고 싶으신가요? Trail Together 시리즈의 일부인 이 비디오를 시청하세요.
(이 영상은 34분 00초부터 시작합니다. 단계 시작 부분으로 되돌려 다시 시청하려는 경우 참고하세요.)
개요
Apex는 강타입(Strongly typed)의 개체 지향 프로그래밍 언어로, Salesforce 멀티테넌트 아키텍처에서 실행되도록 최적화되어 있습니다. Apex는 개발자가 복잡한 백엔드 비즈니스 프로세스를 자동화할 수 있도록 지원하며, Java 바이트코드로 컴파일됩니다.
Apex 언어는 Salesforce 데이터와 상호 작용하도록 최적화되어 있으며 Salesforce 영속 계층(Persistence layer)과 긴밀하게 통합되어 있습니다. Apex는 SQL과 유사한 SOQL(Salesforce Object Query Language)을 제공하여 쿼리를 실행하고 DML(Data Manipulation Language) 문을 사용해 이전에 만든 개체로 데이터베이스 작업을 수행할 수 있습니다.
Apex 클래스 생성 및 배포
- Visual Studio Code의 force-app/main/dault에서 classes(클래스)를 마우스 오른쪽 버튼으로 클릭하고 SFDX: Create Apex Class(SFDX: Apex 클래스 만들기)를 선택합니다.
- Visual Studio 코드 명령 팔레트에서
HouseService
클래스의 이름을 지정합니다. Enter | Enter를 클릭합니다.
- 파일의 내용을 다음 코드로 변경합니다.
public with sharing class HouseService { @AuraEnabled(cacheable=true) public static List<House__c> getRecords() { try { // Create a list of House records from a SOQL query List<House__c> lstHouses = [ SELECT Id, Name, Address__c, State__c, City__c, Zip__c FROM House__c WITH USER_MODE ORDER BY CreatedDate LIMIT 10 ]; return lstHouses; } // Code to handle exception catch (Exception e) { throw new AuraHandledException(e.getMessage()); } } }
코드 주요 내용이 코드에서는 getRecords라는 메서드가 있는 HouseService 클래스를 만듭니다. 이 메서드는 House__c 개체를 쿼리하여 하우스 레코드 목록을 (정렬된 컬렉션으로) 반환합니다.
HouseService Apex 클래스에서는 클래스 파일을 작성하지 않아도 이전에 (2단계에서) 만든 개체(House__c)가 자동으로 클래스로 표시된다는 것을 알 수 있습니다. 또한 House__c 개체의 필드를 선언하지 않고도 속성으로 참조할 수 있습니다.
SOQL을 사용하여 개체와 개체의 필드를 참조하는 쿼리를 작성했습니다. 쿼리는 컴파일되므로 컴파일 시점에 유형이 확인됩니다.
여러분은 데이터 모델과 Apex 클래스 간에 견고한 커플링을 설정했습니다. 이제 데이터 모델과 일치하지 않는 코드를 변경하면 컴파일되지 않으므로 코드가 손상되지 않습니다.
- 이 파일을 저장합니다.
-
HouseService.cls에서 오른쪽 버튼을 클릭하여 SFDX: Deploy Source to Org(SFDX: 조직에 원본 배포)를 선택합니다. Apex 클래스가 조직에 성공적으로 배포되었다는 확인 메시지가 표시됩니다. 코드를 배포하면 서버에서도 컴파일됩니다.
이제 익명 스크립트를 사용하여 이 클래스가 예상대로 쿼리 결과를 반환하는지 테스트합니다. 익명 스크립트는 메타데이터에는 저장되지 않으면서 컴파일하고 실행할 수 있는 Apex 코드입니다.
아래 단계에 따라 테스트할 익명 스크립트를 만들 수 있습니다.
- scripts/apex 폴더에 dreamhouseapp.apex라는 새 파일을 만듭니다.
- 파일의 내용을
System.debug(HouseService.getRecords());
라는 코드로 바꿉니다. - 아래 스크린샷에서 분홍색으로 강조 표시된 Execute Anonymous Apex(익명 Apex 실행) 코드 렌즈를 클릭합니다.
작성한 Apex 클래스가 정상적으로 작동하면 아래 표시된 출력 패널에 쿼리 결과가 표시됩니다.
Apex는 다양한 의견을 수렴하고, 긴밀하게 연결되어 있으며 Salesforce와 연동되는 비즈니스 앱과 함께 작동하도록 최적화되어 있습니다. 참조가 유효하지 않은 경우 컴파일 시 빠르게 중단됩니다.
Salesforce 영속 계층과 통합되고 추가 데이터 레이어를 연결할 필요 없이 Salesforce 데이터로 직접 작업할 수 있으므로 생산성을 높일 수 있습니다. 무엇보다 Apex는 거버너 제한 및 테스트 요구 사항을 적용하여 올바른 코딩 관행을 장려합니다.
리소스
- GitHub: Apex-레시피
- Trailhead: Apex 코딩 기술 쌓기
- Trailhead: Apex 트리거
- Salesforce 개발자 문서: Apex Replay Debugger