개발자라면 TDD라고 하는 것을 한번쯤 들어봤을 것이다. 이번 포스팅은 TDD에 대한 간단한 설명과 Salesforce Apex 개발 시 이를 어떻게 적용할지에 대해서 다뤄본다.TDD는 테스트 주도 개발(Test-Driven Development)라는 말의 축약어이다.소프트웨어 개발 프로세스 중 하나로써 매우 짧은 개발 사이클을 반복한다.TDD는 간단히 말하면, 내가 개발하고자 하는 것(요구사항)을 검증하는 unit test를 먼저 작성하고, 그 테스트 케이스를 통과하기 위해 최소한으로 코드를 작성하며, 이를 계속 반복하여 코드를 리팩토링하는 개발 방법론을 의미한다. Salesforce는 Apex code를 프로덕션 환경에 배포하기 위해서 반드시 코드 커버리지를 요구한다. 이를 단순히 귀찮게만 여기지 ..
분류 전체보기
Apex 개발 시, SOQL을 사용하다가 heap size 에러를 마주한적이 있는가?오늘 포스팅은 많은 양의 데이터를 조회할 때 Apex 내에서 어떻게 효율적으로 사용할 수 있는지에 대한 내용을 다룬다.사실 SOQL을 다루다가 heap size 에러를 마주할 일은 드물다.어떤 경우에 일어날 수 있냐면, 예를 들어 Account Object에 custom 필드로 Long Text 타입의 필드를 하나 정의했다고 하자. 그리고 거의 모든 레코드들이 이 필드에 아주 긴 텍스트값을 가지고 있다. 이런 상황에서 Account 레코드의 개수도 적지 않다면 다음과 같은 코드는 런타임 중, "Heap size is exceeded" 예외를 일으킬 수 있다. List accounts = [ SELECT Id, Name, ..
개요 Salesforce 문서를 읽다보면, Selective SOQL 이라는 단어를 접해보았을 것이다.주로 큰 용량의 데이터를 다뤄야 할 때, 성능 이슈가 있어 이를 튜닝하고자 할 때 레퍼런스들을 찾다보면 발견할 수 있다.실제로 내가 운영 프로젝트를 진행했던 한 고객사의 모든 Batch Job들을 전수 조사하고 성능을 개선시키는 작업을 한 적이 있다. 이때 여러 측면들을 고려하여 작업을 진행했는데, 그 중 가장 큰 비중을 차지했던 것이 SOQL 튜닝이였다.개발자가 작성한 SOQL을 실행하면, Force.com의 query optimizer가 이를 최적화시킨 SQL로 변환하여 실제 데이터베이스에서 데이터를 조회한다. 개발자 입장에서는 Force.com의 query optimizer 영역부터는 손을 댈 수 ..
개요Apex Code도 효율적으로 잘 짰고, Custom Index 필드도 지정하여 사용하는데 여전히 데이터 조회 시 성능 이슈를 겪는다면 어떻게 해결해야 할까?SOQL이나 Report/Dashboard, List View의 성능 이슈가 여전히 나타난다면, 더 강력한 처방인 Skinny Table을 고려해볼 수 있다. 실제로 내가 프로젝트에서 Batch 및 SOQL 튜닝 작업을 진행할 때, Selective Query 작업 이후로 사용했던 기능이다. 한번 돌리면 2~3일동안 Batch Slot을 차지하고 있는 녀석들이 있었고, indexing을 했음에도 성능이 크게 개선되지 않았었는데 이 skinny table을 통해 많은 성능적 이점을 챙길 수 있었다.이번 포스팅에서는 Skinny Table이 무엇인지..
Lightning Message Service 란?LMS (Lightning Message Service)는 하나의 Lightning page에 있는 DOM들이 서로 소통하기 위한 방법이다.즉, 하나의 Lightning page에 삽입된 Visualforce page, Aura component, LWC들끼리 커뮤니케이션하기 위한 방법이다.전체 Application에서의 메세지를 구독하거나 특정 active area의 메세지만을 구독할 수 있다.Lightning Experience나 Expereince Builder 사이트에서 사용이 가능하다.LWC는 Hierarchy 구조에 있는 컴포넌트들 끼리는 Event up Property Down이라는 원칙에 따라 부모-자식 요소간 소통이 가능하지만 동떨어져 있..
드물게 Sandbox에서 Production으로 Apex 코드를 배포하려고 할 때 마주치는 에러이다. 이것은 Salesforce의 릴리즈가 Sandbox에 선 적용 후 Production에 적용되기 때문인데 그 과도기에 만약 새로운 릴리즈가 적용된 Sandbox에서 Apex를 생성하고, 아직 릴리즈가 적용 전인 Production에 배포하려고 하면 이 에러를 마주칠 수 있다. 보통 Apex로 개발하면 VSCode를 사용할 것이다. Apex class 이름과 동일한 이름의 xml파일에서 해당 apex class의 api version을 확인할 수 있다. 만약 배포 중, Invalid api version:xx.0 에러를 마주친다면, 우선 배포하려는 target org의 현재 API Version을 확인해..
Apex Class를 하나 생성하고 클래스 레벨에 IsTest 어노테이션을 부여하면, 해당 클래스는 테스트용으로만 사용되는 클래스로써 Org의 Apex 사용량에 합산되지 않는다.테스트 클래스에는 단위 테스트(Unit Test)에 사용되는 테스트 메서드들을 작성하게 된다.일반적으로, 단위 테스트라 하면 코드의 가장 작고 독립된 기능적 단위를 테스트하는 것을 의미한다. 하나의 소프트웨어를 작은 기능적인 단위로 작성한 다음 각 단위 당 테스트를 작성하는 기법을 많이 사용한다. Salesforce Apex Testing 문서에서는 Test class 안에 작성된 test용 메서드들을 Unit Test라고 부르고 있다. 여기서 말하는 단위는 정확히 콕 찝어 어느정도를 의미하지는 않는다. 사람마다 그 단위가 다를 ..