[IT-방법] mkdir 쉘 스크립트 활용 자동화 기술 – 디렉터리 생성부터 예외 처리까지

mkdir 명령어로 디렉터리 생성를 수행하는 모습을 표현한 대표 이미지

수작업의 늪에서 벗어나 자동화의 길로

새로운 프로젝트가 시작되거나 매일 아침 서버 로그를 정리해야 할 때, 수백 개의 폴더를 일일이 손으로 만들고 계신가요? 터미널을 열고 mkdir 명령어를 한 줄씩 입력하다 보면 어느새 손가락이 아파오고, 결정적으로 오타 하나 때문에 경로가 꼬이는 아찔한 경험을 하게 돼요.

특히 수십 대의 서버를 관리하는 데브옵스 엔지니어에게 이런 단순 반복 작업은 시간 낭비일 뿐만 아니라 치명적인 인적 오류(Human Error)를 유발하는 주범이에요. 경로를 잘못 설정해서 중요한 데이터를 엉뚱한 곳에 저장하거나, 권한 설정이 누락된 디렉터리를 만들어 서비스 장애로 이어지는 상황은 상상만 해도 끔찍하죠.

이제는 단순한 명령어를 넘어, mkdir 쉘 스크립트 활용을 통해 이 과정을 완전히 자동화해야 할 때예요. 똑똑한 스크립트 하나만 잘 짜두면, 시스템은 여러분이 잠든 사이에도 완벽하게 구조화된 디렉터리 환경을 스스로 구축할 수 있어요.

이 글에서는 단순한 명령어 사용법을 넘어, 실제 운영 환경에서 바로 적용할 수 있는 안전하고 견고한 디렉터리 생성 자동화 레시피를 공유할게요. 다음과 같은 내용을 핵심적으로 다뤄요.

  • 기본적인 mkdir 옵션과 스크립트 적용 기초
  • 디렉터리 생성 시 발생할 수 있는 예외 상황 처리법
  • 실무에서 바로 쓰는 자동화 스크립트 단계별 구축
  • 크론(Cron)을 이용한 주기적 관리와 로그 기록법

본격적인 자동화 전 꼭 알아야 할 기초 지식

스크립트를 작성하기 전에 mkdir 명령어가 내부적으로 어떻게 동작하는지, 그리고 어떤 옵션들이 자동화의 핵심이 되는지 명확히 이해해야 해요. 단순히 폴더를 만드는 것을 넘어, 파일 시스템의 구조와 권한(Permission)에 대한 이해가 선행되어야 안전한 자동화가 가능해요.

가장 먼저 확인해야 할 것은 디렉터리 생성 시 사용할 옵션의 차이예요. 상황에 따라 어떤 옵션을 선택하느냐에 따라 스크립트의 안정성이 완전히 달라지거든요. 아래 표를 통해 자주 쓰이는 옵션들을 비교해 보세요.

옵션 기능 설명 자동화 활용 팁
-p 상위 디렉터리까지 한 번에 생성 자동화의 필수 옵션. 경로가 없어도 에러 없이 생성해요.
-m 생성과 동시에 권한(Mode) 설정 생성 직후 chmod를 따로 실행할 필요가 없어 효율적이에요.
-v 생성된 내역을 메시지로 출력 로그 파일에 생성 기록을 남길 때 매우 유용해요.

또한, 스크립트 작성 시 반드시 고려해야 할 판단 기준이 있어요. 단순히 폴더를 만드는 것이 목적이 아니라, 어떤 환경에서도 오류 없이 실행되는가를 자문해 보아야 해요. 예를 들어, 이미 존재하는 디렉터리를 다시 만들려고 할 때 스크립트가 멈추는지, 아니면 부드럽게 넘어가는지를 결정해야 하죠.

💡 알아두기
리눅스 파일 시스템에서 디렉터리 생성은 메타데이터(inode)를 수정하는 작업이에요. 따라서 디렉터리 생성 권한이 없는 사용자 계정으로 스크립트를 실행하면 즉시 Permission denied 에러가 발생하니 실행 계정을 꼭 확인하세요.

마지막으로, 디렉터리 경로를 지정할 때 절대 경로(Absolute Path)를 사용할지 상대 경로(Relative Path)를 사용할지 결정해야 해요. 자동화 스크립트, 특히 크론(Cron)처럼 백그라운드에서 돌아가는 작업에는 실행 위치가 불분명하므로 반드시 절대 경로를 사용하는 것이 원칙이에요.

실전! mkdir 쉘 스크립트 활용 레시피

이제 이론을 넘어 실제로 작동하는 견고한 스크립트를 만들어 볼 시간이에요. 단순히 명령어를 나열하는 것이 아니라, 실제 서버 운영 환경에서 마주치는 시나리오를 바탕으로 단계별로 구성해 볼게요. 우리는 오늘 매일 날짜별로 로그 저장 폴더를 만들고, 권한을 설정하며, 성공 여부를 기록하는 자동화 스크립트를 완성할 거예요.

STEP 1. 기본 골격과 변수 설정하기

스크립트의 시작은 관리하기 쉬운 변수 설정부터 시작해야 해요. 경로를 코드 중간중간에 직접 적으면 나중에 수정하기가 너무 힘들거든요. 먼저 베이스가 되는 경로를 변수에 담아주세요.

스크립트 상단에 BASE_DIR="/var/log/myapp"과 같이 기준 디렉터리를 정의하고, DATE=$(date +%Y%m%d)를 사용해 오늘 날짜를 자동으로 가져오도록 설정해요. 이렇게 하면 스크립트를 실행할 때마다 매번 새로운 날짜의 폴더를 타겟팅할 수 있어요.

STEP 2. -p 옵션으로 계층적 구조 한 번에 만들기

서버 운영을 하다 보면 /data/backup/2023/10/27처럼 여러 단계의 하위 폴더가 필요한 경우가 많아요. 이때 각 단계마다 mkdir를 호출하는 것은 매우 비효율적이죠.

우리는 -p (parents) 옵션을 활용할 거예요. 이 옵션은 중간 단계의 디렉터리가 없으면 알아서 만들어주고, 이미 디렉터리가 존재하더라도 에러를 내뿜지 않고 그냥 넘어가 주는 아주 똑똑한 기능이에요. 자동화 스크립트에서 가장 많이 쓰이는 핵심 기능 중 하나랍니다.

STEP 3. 조건문을 활용한 예외 처리와 안전 장치

스크립트가 무작정 실행되게 두는 것은 위험해요. 만약 디렉터리를 만들려는 부모 디렉터리에 쓰기 권한이 없거나, 디스크 용량이 가득 찼다면 어떻게 될까요? 스크립트가 아무런 말 없이 실패하면 나중에 원인을 찾기가 정말 어려워요.

따라서 if 문을 이용한 사전 체크가 반드시 필요해요. if [ -d "$TARGET_DIR" ]; then 구문을 사용하여, 디렉터리가 이미 존재하는지 먼저 확인하고, 존재하지 않을 때만 생성을 시도하는 로직을 넣어주세요. 또한, 명령어 실행 직후 $?(종료 코드)를 확인하여 성공 여부를 판단하는 습관을 들여야 해요.

STEP 4. 권한 설정과 자동화 완성 시나리오

폴더를 만들었다면 이제 적절한 권한을 부여해야 해요. 보안을 위해 로그 폴더는 특정 그룹만 읽을 수 있게 설정하거나, 실행 권한을 제한해야 할 때가 많죠. 이때 mkdir -m 750과 같이 옵션을 결합하면 생성과 동시에 권한을 부여할 수 있어 더욱 깔끔한 스크립트가 됩니다.

💡 알아두기
실제 업무에서 사용하는 통합 스크립트 예시 구조를 살펴볼까요?


#!/bin/bash
# 1. 변수 정의
TARGET_PATH="/data/logs/$(date +%Y%m%d)"
LOG_FILE="/var/log/dir_create.log"

# 2. 디렉터리 생성 시도
if [ ! -d "$TARGET_PATH" ]; then
mkdir -p -m 755 "$TARGET_PATH"
if [ $? -eq 0 ]; then
echo "[$(date)] SUCCESS: $TARGET_PATH created" >> "$LOG_FILE"
else
echo "[$(date)] ERROR: Failed to create $TARGET_PATH" >> "$LOG_FILE"
fi
else
echo "[$(date)] SKIP: $TARGET_PATH already exists" >> "$LOG_FILE"
fi

위 스크립트는 디렉터리가 없으면 생성하고, 성공/실패/이미 존재함을 구분하여 별도의 로그 파일에 기록까지 남깁니다. 이 정도면 아주 훌륭한 실무용 자동화 도구라고 할 수 있어요.

STEP 5. 크론(Cron) 연동으로 주기적 실행하기

마지막 단계는 이 스크립트를 사람이 직접 실행하지 않아도 되게끔 만드는 거예요. 리눅스의 스케줄러인 Cron에 등록하면 매일 새벽 특정 시간에 스크립트가 자동으로 돌아가게 할 수 있어요.

예를 들어, 매일 자정(00:00)에 스크립트가 실행되길 원한다면 크론탭(crontab)에 0 0 * * * /home/user/scripts/make_dir.sh라고 등록해 두면 됩니다. 이때 주의할 점은 스크립트 내에서 사용하는 모든 경로는 반드시 절대 경로여야 한다는 점을 다시 한번 강조드려요.

자주 하는 실수와 해결법

자동화 스크립트를 처음 만들다 보면 예상치 못한 곳에서 에러가 터지곤 해요. 특히 권한이나 경로 문제로 인해 스크립트가 조용히 실패하는 경우가 가장 위험하죠. 실무에서 자주 발생하는 실수 5가지를 정리해 보았어요.

  • 실수: mkdir 시 상위 디렉터리가 없는 상태에서 실행함
    왜 발생하는가: `-p` 옵션을 누락했기 때문이에요.
    → ✅ 해결법: 경로를 생성할 때는 무조건 -p 옵션을 습관적으로 붙여주세요.
  • 실수: 디렉터리 이름에 공백이 포함됨
    왜 발생하는가: 변수를 사용할 때 따옴표로 감싸지 않아 명령어가 인자를 분리해서 인식하기 때문이에요.
    → ✅ 해결법: 항상 "$VARIABLE"처럼 변수를 큰따옴표로 감싸주세요.
  • 실수: 크론(Cron) 작업이 실행되지 않음
    왜 발생하는가: 크론 환경에서는 사용자의 PATH 환경 변수가 매우 제한적이기 때문이에요.
    → ✅ 해결법: 스크립트 내부의 모든 명령어와 경로를 절대 경로로 작성하세요.
  • 실수: 생성된 디렉터리에 접근이 안 됨
    왜 발생하는가: 생성 시 권한(mode)을 설정하지 않아 기본값(umask 영향)으로 생성되었기 때문이에요.
    → ✅ 해결법: -m 옵션을 활용해 생성 즉시 권한을 명시하세요.
  • 실수: 스크립트가 이미 존재하는 디렉터리 때문에 에러를 뱉으며 중단됨
    왜 발생하는가: 이미 존재하는 디렉터리를 만들라고 명령했기 때문이에요.
    → ✅ 해결법: -p를 쓰거나, if [ -d ... ]로 사전 체크를 하세요.
⚠️ 주의
실수로 루트(/) 디렉터리 근처에서 잘못된 자동화 스크립트를 실행하지 않도록 항상 경로 변수를 출력(echo)해 보는 디버깅 과정을 거치세요.

자주 묻는 질문

Q. 여러 개의 디렉터리를 한 번에 만들 수도 있나요?

네, 가능해요! mkdir dir1 dir2 dir3처럼 띄어쓰기로 구분하여 나열하면 한 번의 명령으로 여러 폴더를 동시에 만들 수 있어요. 스크립트에서 반복문(for loop)과 결합하면 더욱 강력해지죠.

Q. 디렉터리 생성과 동시에 권한을 주는 가장 안전한 방법은 무엇인가요?

mkdir -m 755 [경로]를 사용하는 것이 가장 좋아요. 생성 후에 chmod를 따로 실행하는 것보다 원자적(Atomic)으로 동작하여 중간에 권한이 꼬이는 일을 방지할 수 있어요.

Q. 스크립트 실행 결과가 로그에 안 남아요. 무엇이 문제일까요?

스크립트가 실행되는 계정이 로그 파일에 쓸 수 있는 권한이 있는지 확인해 보세요. 또한, 로그 파일의 경로 역시 절대 경로로 지정되어 있는지 체크하는 것이 필수예요.

완벽한 디렉터리 관리를 위한 마무리

지금까지 단순한 명령어를 넘어, 서버 운영의 안정성을 높여주는 mkdir 쉘 스크립트 활용법에 대해 깊이 있게 살펴보았어요. 자동화는 단순히 편해지기 위한 도구가 아니라, 실수를 줄이고 시스템의 예측 가능성을 높이는 프로페셔널한 작업 방식이에요.

✅ 핵심 요약

  • 계층 구조 생성 시 반드시 -p 옵션을 사용하세요.
  • 모든 경로 지정은 절대 경로로 작성하는 것이 원칙이에요.
  • 스크립트 내 변수는 항상 "$VAR"처럼 따옴표로 감싸세요.
  • 생성 직후 $?를 통해 성공 여부를 반드시 검증하세요.
  • 자동화 스크립트의 실행 결과는 반드시 별도의 로그 파일로 남겨 관리하세요.

이제 여러분은 단순한 명령어를 넘어, 스스로 생각하고 동작하는 스크립트를 짤 준비가 되었어요. 오늘 배운 내용을 바탕으로 지금 바로 아주 작은 스크립트 하나부터 만들어 보세요. 반복되는 작업을 하나씩 줄여나가다 보면, 어느새 훨씬 더 여유로운 운영 환경을 마주하게 될 거예요.

오늘 할 일: 현재 가장 자주 만드는 폴더 구조를 변수로 정의해 보기
이번 주 할 일: 생성 성공/실패 로그를 남기는 스크립트 완성하기
실행 직전 할 일: 테스트 서버에서 스크립트의 경로와 권한 확인하기

작은 스크립트 하나부터 만들어 반복 작업을 줄여 보세요. 여러분의 업무 효율이 눈에 띄게 달라질 거예요!

함께 읽으면 좋은 글: 리눅스 파일관리 명령어 모음 글로 연결

댓글 남기기