Salesforce SOSL 완벽 가이드: 다중 객체 검색 및 Apex 활용법

Salesforce에서 데이터를 검색하는 방법 중 하나가 SOSL(Salesforce Object Search Language) 입니다.
SOSL은 여러 객체의 여러 필드에서 텍스트 검색을 수행할 수 있으며, 특정 단어가 포함된 레코드를 빠르게 찾는 데 유용 합니다.

이번 글에서는 SOSL의 개념, SOQL과의 차이점, 기본 문법, 활용 예제, Apex에서 SOSL 실행하는 방법 등을 알아보겠습니다.


📌 SOSL이란?

SOSL(Salesforce Object Search Language)Salesforce 데이터베이스 내 여러 객체에서 특정 텍스트를 검색하는 데 사용하는 언어 입니다.

SOQL이 특정 객체에서 데이터를 조회하는 것과 달리, SOSL은 여러 객체의 여러 필드에서 특정 텍스트를 검색 할 수 있습니다.

✅ 주요 특징
다중 객체에서 검색 가능
텍스트 기반 검색 (단어 또는 문구 검색)
대소문자 구분 없음
결과는 여러 객체의 리스트(List of Lists) 형태로 반환


🔎 SOQL vs SOSL 차이점

비교 항목SOQLSOSL
검색 범위단일 객체 검색여러 객체에서 검색 가능
검색 방식필드 값이 정확히 일치해야 검색됨특정 단어가 포함된 모든 필드 검색 가능
WHERE 조건 사용 여부✅ 지원 (WHERE Name=’Test’)❌ 미지원
데이터 반환 형식개체 리스트(List of SObject)여러 개체 리스트(List of Lists of SObject)
예제SELECT Name FROM Account WHERE Name='SFDC Computing'FIND {SFDC} IN ALL FIELDS RETURNING Account(Name), Contact(FirstName, LastName)

📌 즉, SOQL은 정확한 데이터 검색에 유용하고, SOSL은 텍스트 기반 검색에 강점이 있음!


📝 SOSL 기본 문법

FIND '검색어' IN 검색범위 RETURNING 객체(필드명)

예제:

FIND {SFDC} IN ALL FIELDS RETURNING Account(Name), Contact(FirstName, LastName)

📌 SOSL 검색 범위 지정 (SearchGroup)

SOSL에서 특정 필드 범위 내에서 검색할 수도 있습니다.

검색 범위설명
ALL FIELDS모든 필드에서 검색
NAME FIELDS이름 필드에서 검색
EMAIL FIELDS이메일 필드에서 검색
PHONE FIELDS전화번호 필드에서 검색
SIDEBAR FIELDSSalesforce 사이드바 검색 범위
FIND {Customer} IN NAME FIELDS RETURNING Account(Name), Contact(FirstName, LastName)

📌 SearchGroup을 지정하지 않으면 기본적으로 ALL FIELDS가 사용됨


📝 SOSL 활용 예제

1️⃣ 특정 단어 포함된 데이터 검색

FIND {Wingo} IN ALL FIELDS RETURNING Account(Name), Contact(FirstName, LastName, Department)

📌 SOSL에서 검색어는 반드시 중괄호 {} 로 감싸야 함
📌 Apex 코드 내에서는 작은 따옴표 'Wingo' 로 감싸야 함


2️⃣ SOSL Apex 실행 예제

SOSL 쿼리를 Apex에서 실행하면 여러 개의 객체 리스트를 반환합니다.

String soslFindClause = 'Wingo OR SFDC';

// SOSL 실행: 모든 필드에서 'Wingo' 또는 'SFDC'를 검색
List<List<sObject>> searchList = [FIND :soslFindClause IN ALL FIELDS
RETURNING Account(Name), Contact(FirstName, LastName, Department)];

// 검색 결과를 각 객체 타입으로 변환
Account[] searchAccounts = (Account[])searchList[0]; // Account 리스트
Contact[] searchContacts = (Contact[])searchList[1]; // Contact 리스트

// 계정 정보 출력
System.debug('🔎 Found the following accounts:');
for (Account a : searchAccounts) {
System.debug(a.Name);
}

// 연락처 정보 출력
System.debug('🔎 Found the following contacts:');
for (Contact c : searchContacts) {
System.debug(c.LastName + ', ' + c.FirstName);
}

📌 SOSL 결과는 List<List<SObject>> 형태로 반환됨
📌 각 객체별로 리스트를 분리하여 사용할 수 있음


📌 SOSL에서 구문 바인딩 사용하기

SOSL에서도 Apex 변수 값을 사용할 수 있으며, 콜론(:)을 사용하여 바인딩 합니다.

String searchTerm = 'SFDC';
List<List<SObject>> searchResults = [FIND :searchTerm IN ALL FIELDS RETURNING Account(Name), Contact(FirstName, LastName)];

Account[] accounts = (Account[])searchResults[0];
Contact[] contacts = (Contact[])searchResults[1];

System.debug('🔎 검색된 계정 수: ' + accounts.size());
System.debug('🔎 검색된 연락처 수: ' + contacts.size());

📌 바인딩된 변수는 :searchTerm 처럼 : 기호를 붙여 사용해야 함


🔁 여러 개체에서 데이터 검색

SOSL의 가장 큰 장점은 여러 객체에서 동시에 데이터를 검색 할 수 있다는 점입니다.

FIND {Wingo} IN ALL FIELDS 
RETURNING Account(Name, Industry), Contact(FirstName, LastName, Phone), Lead(Company, Email)

📌 여러 객체에서 동시에 검색하고, 각 객체별로 특정 필드를 반환할 수 있음


📌 SOSL을 활용한 대량 데이터 검색

대량 데이터를 검색할 때는 SOQL For Loops 와 마찬가지로 Batch Apex 를 활용해야 합니다.

public with sharing class SOSLBatchSearch {
public static void performSearch(String searchKeyword) {
List<List<SObject>> results = [FIND :searchKeyword IN ALL FIELDS
RETURNING Account(Name), Contact(FirstName, LastName)];

for (List<SObject> sObjects : results) {
for (SObject obj : sObjects) {
if (obj instanceof Account) {
System.debug('🔎 Account Found: ' + ((Account)obj).Name);
} else if (obj instanceof Contact) {
System.debug('🔎 Contact Found: ' + ((Contact)obj).FirstName + ' ' + ((Contact)obj).LastName);
}
}
}
}
}

📌 SOSL 결과를 instanceof 연산자를 사용하여 객체별로 처리 가능
📌 Batch Apex를 사용하면 대량 데이터 검색도 가능


🎯 마무리

SOSL은 다중 객체의 여러 필드에서 텍스트 검색이 가능
SOQL과 달리 WHERE 절을 사용할 수 없으며, 단어 기반 검색만 지원
SOSL 쿼리는 List<List<SObject>> 형태로 반환됨
Apex에서 변수 바인딩을 사용하여 동적 검색 가능
대량 데이터를 검색할 때는 Batch Apex와 함께 사용해야 함

📌 SOSL을 잘 활용하면 Salesforce 데이터 검색을 더욱 효율적으로 수행할 수 있습니다! 🚀

👉 더 많은 정보를 원한다면 Salesforce 공식 Trailhead 강의를 참고하세요!
🔗 Salesforce SOSL 학습하기