Design Salesforce, CRM 화면이 아니라 수많은 기업의 데이터를 한 플랫폼에서 격리하고 계산하는 인프라다
데이터 한 건을 조회하는 순간에도 회사 공간 분리, 권한 계산, 설정 해석, 자동화 실행, 이벤트 동기화가 동시에 움직인다
Introduction & Requirements
Salesforce를 처음 보면 고객 정보를 저장하고 조회하는 업무 앱처럼 보입니다. 그런데 시스템 디자인 문제로 들어가면 바로 복잡해집니다.
같은 플랫폼 위에 수많은 기업 고객이 올라가고, 각 회사는 서로 다른 데이터 구조, 화면 구성, 업무 자동화, 사용자 권한, 조직 역할 구조, 데이터 공유 규칙을 가집니다.
기술적으로는 이 회사 단위 공간을 tenant라고 부르고, 고객이나 영업 기회 같은 데이터 단위를 object와 record라고 부릅니다.
어떤 회사는 고객, 연락처, 영업 기회만 씁니다. 어떤 회사는 수백 개의 맞춤형 데이터 구조와 수천 개의 맞춤형 필드를 씁니다. 어떤 회사는 리포트와 대시보드를 짧은 주기로 반복 조회하고, 어떤 회사는 대량 데이터 이전이나 외부 시스템 동기화로 매우 큰 규모의 데이터를 한 번에 밀어 넣습니다.
그래서 이번 설계에서는 화면보다 먼저 "회사별 데이터가 섞이지 않게 하는 문제"를 봐야 합니다. 그다음에는 회사마다 다른 데이터 구조를 어떻게 해석할지, 사용자가 볼 수 있는 데이터만 어떻게 빠르게 걸러낼지, 대량 저장과 리포트 조회가 일반 화면 요청을 압박하지 않게 어떻게 분리할지를 봐야 합니다.
Functional Requirements
사용자는 회사 공간 안에서 고객사, 연락처, 영업 기회, 지원 요청, 맞춤형 데이터 한 건을 생성하고 조회하고 수정하고 삭제할 수 있어야 합니다.
시스템은 데이터를 조회할 때 회사 공간 분리, 객체 접근 권한, 필드 표시 권한, 데이터 한 건 단위의 공유 규칙을 적용해야 합니다.
회사마다 다른 데이터 구조, 필드 정의, 입력 검증 규칙, 업무 자동화 규칙을 실행 시점에 반영할 수 있어야 합니다.
대량 데이터 입력과 대량 수정은 일반 사용자의 화면 저장 경로와 분리해서 처리해야 합니다.
데이터가 바뀐 뒤에는 변경 이벤트 발행, 업무 자동화 실행, 대시보드 캐시 무효화, 외부 시스템 동기화를 비동기로 처리해야 합니다.


