본문 바로가기
  • No matter what, Just Keep going!
Flow 개념

3분 만에 이해하는 SOQL과 DML!

by James Can 2025. 3. 15.

솔직히 말씀드리자면, 저도 Flow를 처음 배우기 시작한 후 6개월 동안 DML이 무엇인지 제대로 몰랐습니다. 또한, SOQL 쿼리 한도(Query Limit)나 DML 한도(DML Limit)에 대해 신경 쓰지 않았고, 이것이 Flow 성능에 어떤 영향을 미치는지도 몰랐습니다.

그 결과, 비효율적인 Flow를 몇 개 만들었을 수도 있습니다. 저와 같은 실수를 반복하지 않도록, 지금 SOQL과 DML에 대해 빠르게 배워봅시다!

 

SOQL (Salesforce Object Query Language) 이란?

SOQL은 Salesforce에서 🍎 데이터를 조회할 때 사용하는 쿼리 언어입니다. 쉽게 말해, Salesforce 데이터베이스에서 특정 정보를 검색하는 역할을 합니다.

 

예제: 이 쿼리는 모든 연락처(Contact)에서 성(last name)이 'Kim'인 이름(Name)과 이메일(Email)을 가져옵니다.

SELECT Name, Email FROM Contact WHERE LastName = 'Kim'

 

SOQL을 사용할 때 주의할 점

  • Salesforce에서는 한 번의 SOQL 실행 시 최대 50,000개의 레코드만 가져올 수 있음
    즉, SELECT 문을 실행할 때 조회된 레코드 개수가 50,000개를 초과하면 오류가 발생
  • WHERE 조건을 잘 활용해 필요한 데이터만 가져오기.
  • 대량 데이터 처리 시 쿼리 최적화(Query Optimization) 고려하기.
  1.  

2025.03.15 - [Flow 개념] - SOQL을 사용할 때 주의할 점

 

 


DML (Data Manipulation Language) 이란?

DML은 Salesforce 데이터베이스에서 데이터를 조작하는 작업을 의미합니다. 🍎 레코드를 생성, 수정, 삭제할 때 DML 문을 사용합니다.

 

예제:   이 코드는 Salesforce에서 새로운 "Account(계정)" 레코드를 생성하고 저장하는 코드입니다.

 

 

Account acc = new Account(Name = 'bYA Inc.');
insert acc;
  • Account → Salesforce의 계정(고객사) 정보를 저장하는 Object(객체)입니다.
  • acc → 새로 만든 계정을 임시로 저장할 변수입니다.
  • new Account(Name = 'bYA Inc.') → 새로운 계정을 생성하면서, Name 필드에 'bYA Inc.' 값을 입력합니다.
  • insert → Salesforce 데이터베이스에 새로운 레코드를 저장하는 명령어(DML 문법).
  • acc → 위에서 만든 계정(bYA Inc.)을 데이터베이스에 진짜로 등록합니다.

📝 쉽게 말하면?
👉 "'bYA Inc.'라는 이름의 새 계정을 만들고, 그걸 acc라는 변수에 담아둔다."

👉 acc에 담긴 "'bYA Inc.' 레코드를 Salesforce에 넣어라!"

 

DML 문법 종류

  • INSERT : 새 레코드를 생성
  • UPDATE : 기존 레코드를 수정
  • DELETE : 기존 레코드를 삭제
  • UPSERT : 기존 레코드가 있으면 업데이트, 없으면 새로 생성
  • UNDELETE : 삭제된 레코드 복구

DML을 사용할 때 주의할 점

  • 한 번의 실행에서 최대 150개의 DML 문법만 실행 가능
  • 대량 데이터 처리를 위해 DML을 Bulk 방식으로 실행하는 것이 좋음 (예: insert recordsList;)
  • 트리거(Trigger)나 배치 프로세스(Batch Process)에서 DML 한도를 초과하지 않도록 주의해야 함

 

😭 잘못된 예제 (DML 한도 초과)

아래처럼 insert를 반복문 안에서 실행하면 150개 이상 실행될 수 있기 때문에 한도를 초과합니다.

for (Account acc : accList) {  // accList에 200개 계정이 들어있다고 가정
    insert acc;  // 💥 여기가 문제! 200번 실행됨 → 한도 초과(150개 제한)
}
  • insert가 200번 실행되므로, DML 문장 한도(150개)를 초과하여 오류 발생 ⚠️
  • "Too many DML statements: 151" 오류가 발생함

😊  올바른 예제 (Bulk DML 사용)

한 번에 여러 개의 레코드를 insert하면, 한 줄만 실행되므로 DML 문장이 1개로 계산됩니다.

insert accList; // ✅ accList에 있는 200개 계정을 한 번에 삽입 → DML 문장 1개로 처리됨
  • 200개 계정을 생성하지만, insert가 1번만 실행되므로 DML 문장 1개로 계산됨.
  • 따라서 DML 한도를 초과하지 않음.

한 번에 여러 레코드를 처리하는 DML(Bulk DML)을 사용하면 한도를 초과하지 않음.
반복문 안에서 DML을 실행하지 말고, 리스트(List)에 데이터를 모아서 한 번에 실행하는 것이 좋음!

 

 

 


 

SOQL과 DML을 효율적으로 사용하려면? Governor Limits을 항상 고려하세요.

  • SOQL 쿼리 한도를 초과하면 Too many SOQL queries: 50001 오류 발생
  • DML 한도를 초과하면 Too many DML statements: 151 오류 발생
  • 해결 방법: 쿼리 최적화 & Bulk DML 처리

 


💡 Flow에서도 SOQL과 DML 개념이 중요합니다! Flow 내에서 Record Lookup, Record Update 등의 요소를 사용할 때도 위 개념을 이해하면 더욱 효율적인 Flow를 만들 수 있습니다.

 

이제 SOQL과 DML을 이해하고 더 효율적인 Salesforce 개발을 시작하세요! 🚀