Salesforce Bulk API용 Openflow Connector 문제 해결

Salesforce Bulk API용 Openflow Connector 문제 해결

이 페이지에서는 Salesforce Bulk API용 Openflow Connector의 흔한 문제들을 해결하는 방법을 설명해요. 주로 인증·OAuth 오류와 커넥터 상태 점검에 초점을 맞춥니다.

출처: Snowflake 문서

본문

Note

이 커넥터는 Snowflake Connector Terms에 의해 규율됩니다.

이 토픽은 Salesforce Bulk API용 Openflow Connector를 문제 해결하는 방법을 설명합니다.

다음 정보를 사용해 커넥터의 문제를 해결하세요.

인증 및 OAuth 오류

커넥터는 OAuth 2.0 JWT Bearer Flow로 Salesforce에 인증합니다. 인증 오류는 주로 초기 설정 중에 발생하며, 커넥터를 시작하기 전에 컨트롤러 서비스의 Verification 기능으로 진단할 수 있습니다.

invalid_grant 오류

invalid_grant 오류는 Salesforce가 OAuth 토큰 요청을 거부했음을 나타냅니다. 흔한 원인은 다음과 같습니다:

  • 잘못된 OAuth 흐름 유형. Salesforce의 외부 클라이언트 앱에서 Enable JWT Bearer Flow 체크박스가 선택되어 있지 않습니다. 커넥터는 이 특정 흐름을 필요로 합니다. 다른 OAuth 흐름(예: Authorization Code Flow)은 지원되지 않습니다. 를 참고하세요.

  • 개인 키와 인증서 불일치. 커넥터에 구성된 개인 키(Connected App Key 파라미터)가 Salesforce의 외부 클라이언트 앱에 업로드된 공개 인증서와 일치하지 않습니다.

  • 잘못된 Consumer Key. OAuth2 Client ID 파라미터가 인증서가 업로드된 외부 클라이언트 앱의 Consumer Key와 일치하지 않습니다.

  • 여러 앱의 자격 증명 혼합. 여러 외부 클라이언트 앱을 만들었거나 여러 구성을 시도했다면, Client ID·인증서·개인 키가 서로 다른 앱에 속할 수 있습니다. 세 가지 모두 같은 외부 클라이언트 앱에서 나와야 합니다.

  • 폐기된 Connected App. Salesforce는 Connected Apps를 폐기하고 External Client Apps를 도입했습니다. Connected App을 사용 중이라면 Snowflake는 새 외부 클라이언트 앱을 만드는 것을 권장합니다.

  • 잘못된 토큰 엔드포인트 URL. OAuth2 Token Endpoint URL 파라미터가 올바른 Salesforce 인스턴스를 가리켜야 합니다. 예: https://myCompany.my.salesforce.com/services/oauth2/token.

  • 잘못된 audience. OAuth2 Audience 파라미터는 프로덕션 환경에서 https://login.salesforce.com, 샌드박스·테스트 환경에서 https://test.salesforce.com으로 설정되어야 합니다.

권한 오류

JWT 토큰이 성공적으로 생성되었지만 사용자에게 권한이 없다면 권한 또는 인가 오류가 표시됩니다. 이는 JWT Bearer Flow는 동작하지만, Salesforce 사용자(OAuth2 Subject)가 외부 클라이언트 앱을 사용하도록 인가되지 않았음을 의미합니다.

이 문제를 해결하려면:

  1. Salesforce에서 외부 클라이언트 앱의 Policies 탭으로 이동합니다.

  2. Permitted Users가 Admin approved users are pre-authorized로 설정되어 있는지 확인합니다.

  3. App Policies 섹션에 할당된 프로필 또는 권한 집합에 커넥터의 OAuth2 Subject 파라미터에 지정된 사용자가 포함되어 있는지 확인합니다.

자세한 내용은 을 참고하세요.

커넥터 상태 확인

데이터가 예상대로 복제되는지 확인하려면 커넥터 상태를 검사할 수 있습니다. 커넥터는 Salesforce 변경 사항을 놓치지 않고, 실패 시 벌크 작업 쿼리를 재시도하기 위해 현재 및 과거 작업의 상태를 유지합니다.

상태를 보려면:

  1. 캔버스를 우클릭하고 Controller services를 선택합니다.

  2. Salesforce Bulk Jobs State라는 컨트롤러 서비스를 찾습니다.

  3. Salesforce Bulk Jobs State 메뉴에서 View state를 클릭합니다.

상태는 키가 Salesforce 객체 유형인 키/값 쌍의 집합입니다. 예를 들어 Account 객체의 상태는 다음과 같을 수 있습니다:

{"previousLast":"2025-09-30T09:41:23.484406926Z","currentLast":"2025-09-30T09:41:23.484406926Z","status":"COMPLETED"}

status는 다음 중 하나일 수 있습니다:

  • IN_PROGRESS

  • COMPLETED

  • FAILED

  • ABORTED

상태가 IN_PROGRESS이면 해당 객체 유형에 대한 FlowFile이 아직 처리 중이라는 의미입니다.

Caution

FlowFiles를 수동으로 삭제하지 마세요. 상태를 수동으로 업데이트할 수 없기 때문에 작업이 IN_PROGRESS 상태로 무기한 남을 수 있습니다.

이런 경우 해당 객체 유형에 대해 전체 재로드를 수행해야 합니다.

특정 객체 유형에 대해 전체 로드 강제

하나 이상의 객체 유형에 대해 커넥터가 전체 새로고침을 수행하도록 강제하려면:

  1. 흐름의 모든 프로세서를 중지합니다.

  2. 처리 중인 in-flight FlowFiles가 없는지 확인합니다.

  3. 캔버스를 우클릭하고 Disable all controller services를 선택합니다.

  4. Controller services로 이동해 Salesforce Bulk Jobs State라는 컨트롤러 서비스의 상태를 엽니다.

  5. 다음 중 하나를 수행합니다:

  • Clear state를 선택해 전체 상태를 지웁니다. 이렇게 하면 커넥터가 가져오는 모든 구성된 객체 유형에 대해 전체 로드가 강제됩니다.

  • 특정 객체 유형 옆의 휴지통 아이콘을 선택해 해당 객체 유형의 상태만 지웁니다. 이렇게 하면 커넥터의 다음 실행 중 그 특정 객체 유형만 전체 로드됩니다.

  1. 캔버스에서 우클릭해 Enable all controller services를 선택한 뒤 모든 프로세서를 시작합니다.

객체 유형이 IN_PROGRESS 상태로 남아 있는 경우

특정 객체 유형의 상태가 IN_PROGRESS에 멈춰 있고 해당 객체 유형에 대한 in-flight FlowFiles가 없다면, 상태를 업데이트하기 전에 FlowFile이 수동으로 삭제되었을 수 있습니다.

이 경우 커넥터가 모든 이벤트를 캡처하도록 해당 객체 유형에 대해 전체 로드를 수행해야 합니다.

상태가 IN_PROGRESS에 멈춰 있는데 FlowFiles가 수동으로 삭제되지 않았다면 Snowflake Support에 문의하세요.

더 알아보기 (Learn more)