sonar-sync-departments
입력 레코드를 기준으로 로그프레소 소나의 부서 객체를 동기화합니다. 입력 레코드 집합에 존재하는 부서는 생성 또는 수정하고, 존재하지 않는 기존 부서는 삭제합니다.
부서·임직원·부서장 정보를 외부 인사 시스템과 동기화할 때는 부서 → 임직원 → 부서장 순서로 세 명령어를 차례로 실행해야 합니다. 이 명령어는 그 첫 단계이며, 부서장 필드는 동기화하지 않으므로 sonar-sync-employees 명령어로 임직원을 동기화한 다음 sonar-sync-bosses 명령어로 부서장을 지정해야 합니다.
명령어 속성
| 항목 | 설명 |
|---|---|
| 명령어 유형 | 가공 쿼리 |
| 필요 권한 | 관리자 |
| 라이선스 사용량 | 해당 없음 |
| 병렬 실행 | 미지원 |
| 분산 실행 | 분석 노드에서 실행 (reducer) |
문법
옵션
run=BOOLt로 지정한 경우에만 동기화를 실제로 반영합니다. 지정하지 않으면 실제로 반영하지 않고 수행될 작업(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는 입력 레코드를 기준으로 부서 트리 전체를 동기화합니다. 실행 시작 시점에 기존 부서 목록을 모두 읽어들인 뒤, 입력 레코드가 모두 도착한 시점에 다음 순서로 처리합니다.
- 각 입력 레코드의
dept_code가 기존 부서에 있으면 이름·설명 변경 여부를 비교하여update작업을, 없으면create작업을 등록합니다. parent_dept_code를 기준으로 상위 부서 연결을 비교하여 상위 부서가 새로 지정되거나 변경된 경우set_parent를, 기존에 있던 상위 부서 연결이 사라진 경우unset_parent를 등록합니다.- 기존 부서 중 입력 레코드 집합에 없는
dept_code는delete작업으로 등록합니다.
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 레코드가 함께 출력됩니다.
사용 예
-
부서 목록을 동기화 결과 미리 보기(드라이런)
json "[ {'dept_code': '001000', 'dept_name': '사업본부', 'description': '전사 사업 총괄'}, {'dept_code': '001100', 'dept_name': '영업팀', 'parent_dept_code': '001000', 'description': '국내 영업 담당'} ]" | sonar-sync-departmentsrun옵션을 지정하지 않았으므로 실제로 반영하지 않고create,set_parent등 예정된 작업만 출력합니다. -
부서 목록을 실제로 동기화
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). 내장되지 않은 버전에서는 실험실 앱을 설치해 사용할 수 있습니다.