들어가며
ServiceNow 운영·유지를 하다 보면 Database View 작성 방식이 RDB 기초 지식에 의존해 개인 역량에 묶이기 쉽다. 또한 GUI로 데이터를 활용하려고 해도 데이터량이 크면 내보내기 한도를 넘어 아예 추출이 불가능해지거나, 리스트 표시 상태에 따라 추출 컬럼이 바뀌고, 첨부파일도 각 레코드에 흩어져 수집이 번거롭다. 그래서 GUI로 원시 데이터 내보내기와 Database View 정의를 지원하는 PowerShell Utility를 만들었다.
이 글은 공개 저장소 구현을 바탕으로 배경, 구현 방침, 설계, 운영 효과를 정리한다.
- 도구명: PS1 SNOW Utilities
- 리포지토리: https://github.com/arimagml-collab/PS1SOWUtilities
- 구현 형태: PowerShell 5.1 + WinForms(Windows 로컬 실행)
- 참고: README, 본체 스크립트, 설계 메모(
docs/)
배경 1: 데이터 내보내기는 가능하지만 운영 부담이 크다
ServiceNow 표준 UI에서도 데이터 내보내기는 가능하다. 그러나 실운영에서는 다음 문제가 누적된다.
- 매번 같은 컬럼 구성으로 추출하고 싶어도 리스트 뷰 변경의 영향을 받기 쉽다.
- “전체 컬럼 + 내부명 포함” 정형 추출을 요구하면 절차 설명 비용이 급격히 커진다.
- 대량 데이터에서는 GUI 내보내기 자체가 무거워져 실행·재실행 관리가 어렵다.
결과적으로 운영팀은 “데이터 활용"보다 “데이터 추출 방법 지원"에 시간을 쓰게 된다. 그래서 발상을 바꿔 API 기반 정형 컬럼을 각 부서가 자율적으로 추출할 수 있는 구조를 준비했다.
배경 2: Database View 작성은 RDB 지식 격차가 드러나기 쉽다
Database View는 유용하지만 비엔지니어 또는 RDB 경험이 적은 사용자에게 진입장벽이 높다.
sys_db_view와sys_db_view_table작업 맥락이 분리되어 화면 이동이 많다.- 내부 컬럼명을 한 화면에서 일괄 확인하기 어렵다.
- Admin 권한이 없는 환경에서는 다른 환경에서 내부명을 조사해 가져와야 한다.
- WHERE/JOIN 정의를 수기로 입력하면 오탈자와 참조 실수가 발생하기 쉽다.
따라서 후보를 보면서 GUI로 조립하는 지원이 필요하다고 판단했다.
만든 것: PS1 SNOW Utilities
PS1 SNOW Utilities는 ServiceNow 운영에서 자주 발생하는 작업을 하나의 GUI로 묶은 PowerShell 도구다. 주요 탭 구성은 다음과 같다.
1. Export 탭
- 대상 테이블 선택(또는 수동 입력)
- 필터 지정(전체 /
sys_updated_on기간) - 출력 형식 선택(CSV / JSON / Excel)
- 대량 건수용 CSV 분할 내보내기
- 출력 폴더 지정 및 실행 로그 확인
운영 관점의 목표는 추출 절차를 정형화해 담당자별 편차를 줄이는 것이다.
2. Database View Editor 탭
- View 내부명·라벨 입력
- 베이스 테이블·Prefix 설정
- JOIN 추가(좌우 컬럼, Variable Prefix, LEFT JOIN 지정)
- 컬럼 후보 재조회 및 표시 컬럼 선택
- View 생성 및 결과 링크 표시
후보를 보면서 정의를 조립할 수 있어 ServiceNow 화면을 왕복하며 WHERE/JOIN을 수기로 입력하는 부담을 줄일 수 있다.
3. Attachment Harvester 탭
- 갱신 기간 조건으로 관련 첨부파일 일괄 수집
- 파일명 충돌 시 번호를 붙여 회피
- 수집 처리 로그 기록
감사·조사 대응에서 자주 발생하는 첨부 수집을 재현 가능한 절차로 수행하기 쉽게 하는 기능이다.
4. Truncate 탭
- 개발 용도의 테이블 전체 삭제
- 확인 코드 입력, 대상 정보 표시, 재시도 설정
위험 작업이므로 운영 환경 사용은 비권장이며, 검증 환경의 데이터 재투입 테스트를 전제로 한다.
5. 설정 탭
- 인스턴스명
- 인증 방식(사용자 ID+비밀번호 / API 키)
- 언어 설정(일본어/영어)
- 테마 설정(Dark / Light)
- 사용자 도메인 연결 설정(
instanceDomain)
입력값은 settings.json에 저장하고, 민감값은 Windows DPAPI(CurrentUser)로 암호화해 보관한다.
설계의 핵심
이 구현에서 가장 중시한 것은 운영 시 유지보수 부담을 낮추는 설계다.
-
통신 처리를 공통 함수로 집약
Invoke-SnowRequest를 축으로 GET/POST/PATCH/DELETE/첨부 수집을 래핑해 인증·예외 처리·로그 출력을 분산시키지 않았다. -
UI 구성과 표시 제어 분리
Build-*계열로 UI를 만들고,Apply-*Language와Set-Theme으로 표시를 전환한다. -
설정 저장 안정화
Load-Settings/Save-Settings및Request-SaveSettings로 저장 누락과 과잉 저장을 억제한다. -
위험 작업 다중 확인
Truncate 처리에 확인 코드와 대상 표시를 넣어 오조작 위험을 낮췄다. -
로그 추적 전제 구현
Logs 탭과ConvertTo-LogCompactJson을 통해 실행 결과를 사후 추적하기 쉽게 했다.
구현 시의 현실적 절충
회사 환경에서는 설치 프로그램 배포나 상주 앱 도입의 장벽이 높다. 그래서 이번에는 텍스트 배포만으로도 실행 가능한 PowerShell 스크립트 형태를 우선했다.
이 절충으로 도입 장벽을 낮추면서 현장 사용 시작까지 걸리는 시간을 단축할 수 있었다.
도입 효과
도입 후 확인된 효과는 다음 네 가지다.
- Export 절차가 화면에서 고정되어 추출 요청별 설명 부담이 줄었다.
- Database View 작성 시 ServiceNow UI에서 WHERE 절을 수기 입력하는 장면이 줄었다.
- 첨부파일 수집을 기간 조건으로 일괄 실행할 수 있어 조사 시 반복 작업이 단축됐다.
- 설정 저장으로 인스턴스명·인증정보 재입력 횟수가 줄었다.
화려한 변화는 아니지만 운영 담당자가 반복하는 작업 시간을 확실히 줄여 준다는 점에서 실무 가치가 크다.
제약과 주의점
- 테이블 목록은
sys_db_object조회에 의존하므로 ACL에 따라 취득이 실패할 수 있다(수동 입력으로 우회 가능). - 환경에 따라 WHERE/JOIN 정의 자동 저장에 제약이 있어 ServiceNow 측 수동 보완이 필요할 수 있다.
- 본 도구는 ServiceNow사와 무관하며, 해당 회사의 승인·보증·지원 대상이 아니다.
정리
PS1 SNOW Utilities는 데이터 추출과 Database View 정의에서 발생하는 실무 병목을 줄이기 위해 만들었다.
개인적으로 PowerShell로 GUI를 만들 수 있다는 사실은 이전부터 알고 있었지만, 실제로 스스로 착수할 발상은 갖지 못했다. 생성형 AI의 지원을 받아 거의 노코드에 가까운 지시 기반 개발로 여기까지 형태를 만든 경험은 AI 진화 속도를 강하게 체감하게 했다. 동시에 기존 로우코드/노코드 도구는 강점의 재정의를 요구받고, 진부화 압력을 피하기 어려운 국면에 들어섰다고 본다.