DBA 실무/Oracle(오라클)

[Claude Code 활용 2편] 셸 스크립트와 운영 자동화에 Claude Code 활용하기 (실전 사례 5가지)

isony 2026. 6. 3. 07:12
반응형

[Claude Code 활용 2편] 셸 스크립트와 운영 자동화에 Claude Code 활용하기 (실전 사례 5가지)

테스트 환경: Oracle Linux 8 / RHEL 8 / Ubuntu 22.04, Claude Code v2.x

이전 1편에서 Claude Code 설치와 기본 활용을 다뤘다면, 이번 2편은 서버 관리자가 매일 마주치는 작업을 Claude Code로 자동화하는 실전 사례를 정리했습니다.

운영 환경에서 가장 시간을 많이 잡아먹는 일이 셸 스크립트 작성, 로그 분석, 장애 진단입니다. 이 작업들이 Claude Code의 가장 큰 강점이 발휘되는 영역입니다.

이번 글에서는 다음 5가지 사례를 다룹니다.

  1. 정기 백업 스크립트 자동 생성
  2. 디스크 용량 모니터링 + 알림 스크립트
  3. 로그 파일 분석과 패턴 추출
  4. cron 작업 일괄 점검
  5. 장애 진단 스크립트 (서버가 느려졌을 때)

모든 예제는 그대로 복사해서 활용 가능한 프롬프트로 제공합니다.

 

시작 전 - CLAUDE.md 만들기 (★ 효율 2배)

본격 활용 전에 한 가지 세팅을 하면 작업 효율이 크게 올라갑니다. CLAUDE.md 파일을 프로젝트 폴더에 두면 Claude가 자동으로 읽어서 매번 환경 설명을 안 해도 됩니다.

cd ~/work/ops
vi CLAUDE.md

다음과 같이 작성합니다.

# 환경 정보
- OS: Oracle Linux 8.8
- 셸: bash
- DB: Oracle 19c
- 백업 위치: /backup
- 로그 위치: /var/log, /u01/app/oracle/diag

# 작업 규칙
- 모든 스크립트는 #!/bin/bash로 시작
- 변수는 대문자, 함수는 소문자
- 실패 시 exit 1
- 모든 작업은 /var/log/ops.log에 timestamp와 함께 기록
- 백업 파일명은 yyyymmdd_HHMMSS 형식

# 보안
- 비밀번호는 파일에 직접 쓰지 말고 Oracle Wallet 사용
- 운영 DB(prod_db1)에는 직접 접속 금지, 점프 서버 경유

이 파일이 있으면 "스크립트 짜 줘"라고만 해도 위 규칙에 맞춰 결과가 나옵니다. 운영 표준화에도 큰 도움이 됩니다.

 

사례 1: 정기 백업 스크립트 자동 생성

가장 일상적인 작업입니다. 백업 스크립트는 매번 비슷한 구조인데도 매번 새로 짜기는 귀찮습니다.

프롬프트

> 오라클 DB의 datapump 백업 스크립트를 만들어 줘.
  - 매일 새벽 2시 실행
  - 백업 대상: PROD_DB 스키마
  - 저장 경로: /backup/dpdump
  - 파일명: prod_db_YYYYMMDD_HHMMSS.dmp
  - 7일 이전 파일은 자동 삭제
  - 압축 옵션 사용
  - 실행 로그는 /var/log/dpbackup.log에 기록
  - 실패 시 exit code와 함께 종료

Claude가 만들어 주는 결과 (예시)

#!/bin/bash
#
# datapump 백업 스크립트
# 대상: PROD_DB 스키마 / 보관 7일
#

# 환경 변수
export ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1
export ORACLE_SID=PRODDB
export PATH=$ORACLE_HOME/bin:$PATH

# 백업 설정
BACKUP_DIR="/backup/dpdump"
LOG_FILE="/var/log/dpbackup.log"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
DUMP_FILE="prod_db_${TIMESTAMP}.dmp"
SCHEMA="PROD_DB"

log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
}

log "백업 시작: ${DUMP_FILE}"

# datapump 실행
expdp \"/ as sysdba\" \
    schemas=${SCHEMA} \
    directory=DATA_PUMP_DIR \
    dumpfile=${DUMP_FILE} \
    logfile=expdp_${TIMESTAMP}.log \
    compression=ALL >> "$LOG_FILE" 2>&1

if [ $? -ne 0 ]; then
    log "백업 실패 - exit code 1"
    exit 1
fi

# 7일 이전 파일 정리
find "$BACKUP_DIR" -name "prod_db_*.dmp" -type f -mtime +7 -delete

log "백업 완료: ${DUMP_FILE}"
exit 0

여기에 "cron에 등록까지 해 줘"를 이어서 요청하면 crontab -e 라인까지 만들어 줍니다.

0 2 * * * /home/oracle/scripts/dpbackup.sh >/dev/null 2>&1

효과

기존: 30분~1시간 (검색 + 변형 + 테스트) → Claude 활용: 5분.

 

사례 2: 디스크 용량 모니터링 + 알림

운영 환경에서 가장 자주 발생하는 장애 중 하나가 디스크 풀입니다. 미리 막는 스크립트가 있으면 좋은데, 처음부터 짜기는 귀찮습니다.

프롬프트

> 다음 조건으로 디스크 모니터링 셸 스크립트를 작성해 줘.
  - df로 모든 마운트 포인트 사용률 확인
  - 80% 이상이면 경고, 90% 이상이면 위험으로 분류
  - 위험 등급 발생 시 sendmail로 alert@company.com에 메일 발송
  - 메일 본문에 어떤 마운트가 몇 % 차 있는지, 큰 폴더 TOP 5도 포함
  - 5분마다 실행 가능한 구조로 (cron 등록 가정)
  - 직전 알림 후 1시간 내에는 같은 마운트에 대한 중복 알림 방지

핵심은 마지막 줄, "중복 알림 방지" 입니다. 단순 모니터링 스크립트는 디스크가 풀이면 5분마다 메일이 와서 운영자가 더 짜증이 납니다. 이런 디테일을 한 번에 요구할 수 있는 게 Claude Code의 강점입니다.

Claude가 만들어 주는 스크립트에는 상태 파일(/var/run/disk_monitor.state) 을 활용해서 마지막 알림 시각을 저장하고 비교하는 로직까지 들어갑니다.

추가 활용

이 스크립트를 만들고 나서 다음 명령을 이어서 줘 보세요.

> 이 스크립트를 운영팀에 인수인계할 수 있도록 README.md를 만들어 줘.
  설치, 실행, 알림 메일 예시, 트러블슈팅 항목까지 포함해서.

문서화까지 한 번에 끝납니다.

 

사례 3: 로그 파일 분석과 패턴 추출

운영 중에 가장 답답한 순간이 "수백 MB짜리 로그에서 특정 패턴 찾기" 입니다.

프롬프트 (장애 직후)

> /var/log/messages 최근 24시간 분량에서 다음을 분석해 줘.
  1. OOM Killer 발생 여부와 발생 시각 / 죽은 프로세스
  2. systemd 서비스 실패 (Failed to start) 목록
  3. 디스크 I/O 에러 (sd*, error 패턴)
  4. 시간대별 에러 발생 빈도 그래프 (텍스트로)

Claude가 직접 로그 파일을 읽고 grep / awk / 정렬을 조합해서 결과를 보여줍니다. 평소라면 30분 걸리는 분석이 1분 안에 끝납니다.

더 강력한 활용 - 알 수 없는 에러 분석

> /u01/app/oracle/diag/rdbms/proddb/PRODDB/trace/alert_PRODDB.log 
  파일 마지막 100줄을 보고, 이상 징후가 있는지 분석해 줘.
  ORA- 에러가 있다면 각각의 원인과 해결 방향을 정리해 줘.

오라클 alert 로그에서 ORA-XXXXX 에러를 찾아 각각의 의미와 대응 방안까지 요약해 줍니다. 트러블슈팅 시간이 크게 줄어듭니다.

 

사례 4: cron 작업 일괄 점검

서버를 인수인계 받았거나 오래된 서버를 점검할 때 가장 먼저 해야 할 일 중 하나입니다.

프롬프트

> 이 서버의 모든 사용자의 crontab을 수집해서 다음을 분석해 줘.
  1. 어떤 스크립트들이 등록되어 있는가
  2. 실행 주기 (매시간/매일/매주)
  3. 스크립트 파일이 실제로 존재하는가
  4. 최근 7일 내에 정상 실행되었는가 (로그 기준)
  5. 중복되거나 충돌 가능성이 있는 작업이 있는가
  결과를 마크다운 표로 정리해 줘.

Claude가 for user in $(cut -d: -f1 /etc/passwd); do crontab -u $user -l; done 같은 명령을 제안하고 실행한 뒤, 결과를 분석해서 표로 정리해 줍니다.

운영 환경 인수인계, 서버 정리, 컴플라이언스 점검 등 다양한 상황에서 활용 가능합니다.

 

사례 5: 장애 진단 스크립트 (서버가 느려졌을 때) ★ 가장 강력한 활용

장애 대응 중에 가장 중요한 건 속도입니다. "서버 느려요"라는 연락을 받았을 때, 일반적인 점검 순서를 모두 도는 데 10분 이상 걸립니다. 이걸 한 번에 자동화할 수 있습니다.

프롬프트

> 서버가 느려졌을 때 5분 안에 원인을 찾기 위한 진단 스크립트를 만들어 줘.
  다음 항목을 자동으로 수집해서 보고서 형태로 출력:
  
  [시스템]
  - load average (uptime)
  - CPU 사용률 (top 1회 / mpstat)
  - 메모리 사용률, swap 사용량
  - 디스크 IO 부하 (iostat 1회 5초 평균)
  - 네트워크 연결 상태 (ss -s)
  
  [프로세스]
  - CPU 점유 TOP 10
  - 메모리 점유 TOP 10
  - 좀비 프로세스 존재 여부
  
  [DB (Oracle)]
  - 활성 세션 수 (v$session 카운트, sysdba 권한 필요)
  - 대기 이벤트 TOP 5 (v$session_wait)
  - 락 발생 여부
  
  [로그]
  - /var/log/messages 마지막 50줄에서 에러 패턴
  - alert 로그 최근 5분 이내 ORA- 발생 여부
  
  결과는 /tmp/diag_YYYYMMDD_HHMMSS.txt에 저장하고
  요약은 화면에 출력.

이 한 번의 프롬프트로 평소 10분 걸리던 1차 진단을 30초로 단축할 수 있는 진단 스크립트가 만들어집니다. 한 번 만들어 두고 운영 표준 도구로 등록해 두면 매번 활용 가능합니다.

 

운영 환경 도입 시 추가 팁

1. 위험한 명령 자동 차단

CLAUDE.md에 다음 규칙을 명시하면 안전성이 더 올라갑니다.

# 절대 금지 명령
- rm -rf /*
- DROP TABLE / DROP USER (단순 SQL 안내는 가능)
- shutdown / reboot
- 운영 DB의 ALTER SYSTEM
- iptables -F (방화벽 전체 삭제)

이 패턴을 포함한 명령은 절대 실행 제안하지 말 것.

2. 실행 권한 분리

Claude Code를 실행하는 OS 계정과 운영 작업을 실행하는 계정을 분리하세요. Claude Code는 일반 사용자 계정으로 띄우고, 실제 운영 작업은 sudo를 통해 명시적으로 승인하는 패턴을 권장합니다.

3. 결과물은 git으로 관리

Claude가 만들어 준 스크립트를 그냥 쓰지 말고 git 저장소에 commit하세요. 운영 표준화에도 도움이 되고, 나중에 같은 패턴을 다시 활용할 때도 편리합니다.

git init
git add scripts/
git commit -m "백업 스크립트 v1 - Claude Code 작성"

4. 점진적 자동화

처음부터 모든 작업을 자동화하지 마세요. 다음 순서를 권장합니다.

  1. 검색·문서화 작업부터 (가장 안전, 가장 큰 효과)
  2. 개발/테스트 환경 스크립트 작성
  3. 운영 환경의 읽기 전용 모니터링 스크립트
  4. 운영 환경의 백업/정리 작업 (단방향 작업)
  5. 운영 환경의 변경 작업 (마지막 단계, 반드시 리뷰)

 

마무리

Claude Code는 단순히 "코드를 빠르게 짜주는 도구"가 아니라 운영자의 인지 부하를 크게 낮춰주는 도구입니다. 검색-분석-스크립트 작성-문서화의 사이클이 한 곳에서 끝나면서 실제 업무에 들이는 시간이 1/3 이하로 줄어듭니다.

다음 3편에서는 SQL 작성·튜닝과 오라클 DBA 업무에 Claude Code를 활용하는 방법을 다룹니다. DBMS_SCHEDULER 작업 등록, SQL 튜닝, ORA 에러 분석 등 DBA 업무에 특화된 사례를 정리할 예정입니다.

본인이 자동화한 운영 작업이나 더 좋은 패턴이 있다면 댓글로 공유해 주세요.

 

시리즈 안내

 

반응형