sonar-sync-departments

입력 레코드를 기준으로 로그프레소 소나의 부서 객체를 동기화합니다. 입력 레코드 집합에 존재하는 부서는 생성 또는 수정하고, 존재하지 않는 기존 부서는 삭제합니다.

부서·임직원·부서장 정보를 외부 인사 시스템과 동기화할 때는 부서 → 임직원 → 부서장 순서로 세 명령어를 차례로 실행해야 합니다. 이 명령어는 그 첫 단계이며, 부서장 필드는 동기화하지 않으므로 sonar-sync-employees 명령어로 임직원을 동기화한 다음 sonar-sync-bosses 명령어로 부서장을 지정해야 합니다.

명령어 속성

항목설명
명령어 유형가공 쿼리
필요 권한관리자
라이선스 사용량해당 없음
병렬 실행미지원
분산 실행분석 노드에서 실행 (reducer)

문법

... | sonar-sync-departments [run=BOOL]

옵션

run=BOOL
t로 지정한 경우에만 동기화를 실제로 반영합니다. 지정하지 않으면 실제로 반영하지 않고 수행될 작업(action)과 예상 결과만 미리 보여줍니다(드라이런).

입력 필드

필드타입필수 여부설명
dept_code문자열필수부서 코드. 이 값을 기준으로 기존 부서와 매칭하여 생성 또는 수정 대상을 판단합니다. 값이 없으면 별도의 검증 없이 예외가 발생하여 쿼리가 중단됩니다
dept_name문자열필수부서 이름. 파서 설명문이 필수로 안내하나 소스에 별도 검증 로직은 없습니다. 값이 없으면 파싱·명령어 단계에서는 걸러지지 않고 그대로 진행되지만, 저장소의 이름 컬럼이 NOT NULL 제약이라 run=t로 실제 반영할 때 저장 단계에서 실패하여 status=failure로 출력됩니다
parent_dept_code문자열선택상위 부서 코드. 입력 레코드 집합 또는 기존 부서 목록에서 일치하는 부서를 찾을 수 없으면 별도의 알림(notify) 레코드가 출력됩니다
description문자열선택부서 설명

출력 필드

필드타입설명
session문자열무작위로 생성된 세션 고유 GUID 식별자. 같은 쿼리 실행에서 출력된 레코드는 모두 같은 값을 가짐
action문자열수행된(또는 예정된) 작업. notify, create, update, delete, set_parent, unset_parent 중 하나
status문자열run=t로 실제 반영을 시도한 경우에만 출력됨. success 또는 failure
dept_code문자열부서 코드. action=notify인 경우 출력되지 않음
dept_name문자열부서 이름. action=notify인 경우 출력되지 않음
dept_guid문자열부서 GUID(36자). action=notify인 경우 출력되지 않음
params변경 내역 상세. description 키를 항상 포함하며, action=set_parent이면 parent_guid·parent_name을, 이전 상태 비교가 가능하면 old_name·old_parent_name·old_parent_guid를 추가로 포함. action=notify인 경우 출력되지 않음
error문자열오류 메시지. 정상 처리된 레코드에는 출력되지 않음

오류 코드

파싱 오류
오류 코드메시지설명
300160부서 동기화는 관리자 권한이 필요합니다.관리자 권한이 없는 세션에서 실행한 경우
런타임 오류

해당 사항 없음

설명

sonar-sync-departments는 입력 레코드를 기준으로 부서 트리 전체를 동기화합니다. 실행 시작 시점에 기존 부서 목록을 모두 읽어들인 뒤, 입력 레코드가 모두 도착한 시점에 다음 순서로 처리합니다.

  1. 각 입력 레코드의 dept_code가 기존 부서에 있으면 이름·설명 변경 여부를 비교하여 update 작업을, 없으면 create 작업을 등록합니다.
  2. parent_dept_code를 기준으로 상위 부서 연결을 비교하여 상위 부서가 새로 지정되거나 변경된 경우 set_parent를, 기존에 있던 상위 부서 연결이 사라진 경우 unset_parent를 등록합니다.
  3. 기존 부서 중 입력 레코드 집합에 없는 dept_codedelete 작업으로 등록합니다.

run=t를 지정하지 않으면 위 작업 목록만 레코드로 출력하고 실제로는 아무것도 변경하지 않습니다(드라이런). run=t를 지정해야 실제로 부서를 생성·수정·삭제하며, 이 경우 각 레코드의 status 필드에 처리 결과(success 또는 failure)가 함께 출력됩니다. 이 명령어는 부서장(boss) 필드를 동기화하지 않으므로, 부서장을 지정하려면 반드시 sonar-sync-bosses 명령어를 별도로 실행해야 합니다.

부서를 생성할 때는 상위 부서·부서장 지정에 따른 의존성 문제를 피하기 위해 이름·코드·설명만으로 먼저 생성한 뒤, 상위 부서 연결은 set_parent 작업으로 뒤이어 처리합니다. parent_dept_code에 해당하는 부서를 입력 레코드 집합과 기존 부서 목록 어디에서도 찾을 수 없으면, 이미 등록된 해당 부서의 create/update 작업은 취소되지 않고 상위 부서 연결만 빠진 채 그대로 진행되며, 그와 별도로 parent department code not found: <코드> 오류 메시지가 담긴 action=notify 레코드가 함께 출력됩니다.

사용 예

  1. 부서 목록을 동기화 결과 미리 보기(드라이런)

    json "[
      {'dept_code': '001000', 'dept_name': '사업본부', 'description': '전사 사업 총괄'},
      {'dept_code': '001100', 'dept_name': '영업팀', 'parent_dept_code': '001000', 'description': '국내 영업 담당'}
    ]"
    | sonar-sync-departments
    

    run 옵션을 지정하지 않았으므로 실제로 반영하지 않고 create, set_parent 등 예정된 작업만 출력합니다.

  2. 부서 목록을 실제로 동기화

    json "[
      {'dept_code': '001000', 'dept_name': '사업본부', 'description': '전사 사업 총괄'},
      {'dept_code': '001100', 'dept_name': '영업팀', 'parent_dept_code': '001000', 'description': '국내 영업 담당'}
    ]"
    | sonar-sync-departments run=t
    | search status == "failure"
    

    run=t를 지정하여 실제로 부서를 생성·수정·삭제하고, 실패한 레코드만 필터링하여 확인합니다.

변경 이력

sonar-sync-departments 명령어는 소나 4.0.2609.0 버전부터 사용 가능합니다.

이 명령어는 실험실(Lab) 앱이 제공하던 것을 소나 코어에 내장한 것입니다(SNR#3463). 내장되지 않은 버전에서는 실험실 앱을 설치해 사용할 수 있습니다.