Computer >> 컴퓨터 >  >> 프로그래밍 >> Bash 프로그래밍

마스터 스크립팅:반복 작업을 자동화하여 생산성 향상

마스터 스크립팅:반복 작업을 자동화하여 생산성 향상

견고하고 고품질의 소프트웨어를 구축한 경험이 많은 개발자는 스크립트를 작성하여 대부분의 작업을 자동화하는 경향이 있습니다. 이러한 스크립트는 간단한 별칭 bash 명령부터 서버에서 실행되는 반복적인 크론 트리거까지 다양합니다.

이 튜토리얼에서는 스크립팅이 무엇인지, 다양한 사용 사례, 스크립트 사용의 장점과 단점에 대해 알아봅니다. 또한 실제로 작동하는 모습을 볼 수 있도록 몇 가지 예제 스크립트도 살펴보겠습니다.

스크립트란 무엇인가요?

스크립트는 작업을 자동화하거나 프로세스를 제어하는 데 도움이 되는 모든 스크립팅 언어(예:Bash, Python, JavaScript 등)로 작성된 지침 세트입니다. 컴파일된 프로그램과 달리 스크립트는 일반적으로 해석됩니다. 즉, 사전 컴파일 없이 런타임 환경에서 직접 실행됩니다.

스크립트는 반복 작업을 자동화하고, 워크플로를 관리하고, 작은(때로는 큰) 문제를 효율적으로 해결하기 위한 강력한 도구입니다. 초보자이든 숙련된 개발자이든 스크립트 작성 방법을 이해하면 생산성을 높이고 기술 역량을 넓힐 수 있습니다.

스크립트를 작성하는 이유

스크립트로 수행할 수 있는 작업에 대해서는 이미 다루었습니다. 이제 몇 가지 장점(및 과제)을 살펴보고 왜 그렇게 강력한지, 언제 사용해야 하는지 이해해 보겠습니다.

스크립트의 장점

  1. 자동화:스크립트는 데이터 처리나 파일 관리 등 반복적인 작업을 단순화하는 데 도움이 됩니다.

  2. 효율성:수동으로 수행해야 하는 작업을 자동화하여 시간을 절약할 수도 있습니다.

  3. 오류 감소:스크립트는 일관된 명령 실행을 통해 인적 오류를 줄이는 데 도움이 될 수 있습니다.

  4. 유연성:스크립트는 최소한의 수정만으로 다양한 작업에 적응할 수 있습니다.

  5. 통합:또한 다른 시스템, 도구 또는 작업 흐름과 원활하게 통합할 수도 있습니다.

스크립트 관련 문제

  1. 성능:스크립트는 해석 오버헤드로 인해 컴파일된 프로그램보다 느릴 수 있습니다.

  2. 확장성:대규모이거나 매우 복잡한 작업에 항상 적합한 것은 아닙니다.

  3. 디버깅:스크립트 디버깅은 동적 특성으로 인해 때로는 어려울 수 있습니다.

  4. 보안 위험:잘못 작성된 스크립트는 특히 시스템 수준 명령을 실행하는 경우 취약점을 노출할 수 있습니다.

스크립트를 사용해야 하는 경우와 사용하지 않는 경우

스크립트는 다음과 같은 경우에 이상적입니다:

  1. 작업이 단순하거나, 잘 정의되어 있거나, 일회성입니다

  2. 프로세스 프로토타이핑 또는 신속한 자동화

  3. 복잡성을 피할 수 있을 만큼 범위가 작습니다

스크립트는 다음과 같은 경우에는 적합하지 않습니다:

  1. 높은 효율성이 요구되는 성능이 중요한 작업입니다. 스크립트 대신 전용 ETL(추출, 변환, 로드) 도구나 메시지 브로커 또는 사용 사례에 맞는 유사한 대체 도구를 사용해 보세요.

  2. 광범위한 사용자 인터페이스를 갖춘 애플리케이션. 대신 적절한 로깅, 테스트 및 문서화를 통해 소규모 애플리케이션이나 모듈식 시스템을 구축할 수 있습니다.

  3. 컴파일된 프로그램이 더 안정적일 수 있는 장기 유지 관리가 필요한 시나리오. 대신 CRON, Airflow, AWS Lambda/GCP 함수와 같은 작업 스케줄러나 워크플로 관리자를 사용하세요.

효과적인 스크립트 작성 방법

이것이 유용한 스크립트를 작성하는 데 사용하는 프로세스입니다. 이 과정을 마친 후에는 직접 연습할 수 있도록 다양한 언어로 작성된 스크립트의 몇 가지 예를 살펴보겠습니다.

  1. 문제 정의:스크립트를 작성하기 전에 스크립트로 해결할 문제를 식별하세요. 자동화할 작업과 예상되는 결과를 명확하게 설명하세요.

  2. 올바른 언어를 선택하세요:

    • 배시: 파일 작업이나 서버 관리와 같은 시스템 수준 작업에 적합합니다.

    • 파이썬: 데이터 처리, 웹 스크래핑 및 보다 복잡한 자동화에 적합합니다.

    • 자바스크립트: 웹 개발 및 브라우저 기반 자동화에 적합합니다.

  3. 스크립트 작성:텍스트 편집기나 IDE(통합 개발 환경)를 사용하고 주석, 의미 있는 변수 이름, 모듈식 코드 사용과 같은 모범 사례를 따르십시오. 이에 대해서는 아래에서 다루겠습니다.

  4. 스크립트 테스트:통제된 환경에서 스크립트를 테스트하여 오류 없이 예상대로 작동하는지 확인하세요.

  5. 실행 및 배포:원하는 환경에서 스크립트를 실행합니다. 필요한 경우 Cron(Bash용) 또는 작업 스케줄러와 같은 도구를 사용하여 실행을 예약하세요.

예제 스크립트

이제 기본 사항을 알았으니 연습해 보겠습니다. "book-part-1.pdf", "book-part-2.pdf", …, "book-part-100.pdf"라는 이름의 파일이 약 100개 있다고 가정합니다. 파일 이름의 모든 하이픈(-)을 밑줄(_)로 바꾸려고 합니다. 왜냐하면 이러한 문서를 업로드하려는 웹사이트에서는 이름에 하이픈이 포함된 파일 업로드를 허용하지 않기 때문입니다.

다음은 모두 동일한 작업을 수행하는 세 가지 다른 언어로 작성된 스크립트입니다. 프로세스는 다음과 같습니다:

  1. 디렉토리에 있는 모든 파일을 찾습니다.

  2. 이름에 하이픈(-)이 포함되어 있는지 확인하고

  3. 하이픈을 밑줄(_)로 바꾸세요.

시작할 파일 이름은 다음과 같습니다(하이픈 포함):

마스터 스크립팅:반복 작업을 자동화하여 생산성 향상

Bash 스크립트

bash 스크립트부터 시작하겠습니다. 여기 있습니다:

#!/bin/bash
# Replace "-" with "_" in file names
DIRECTORY="/path/to/your/folder"
for FILE in "$DIRECTORY"/*; do
 if [[ "$FILE" == *-* ]]; then
 NEW_NAME=$(echo "$FILE" | sed 's/-/_/g')
 mv "$FILE" "$NEW_NAME"
 echo "Renamed: $FILE -> $NEW_NAME"
 fi
done

파일이 있는 맨 위에 디렉터리(폴더)를 정의합니다. 디렉토리의 각 파일에 대해 이름에 -가 포함되어 있는지 확인합니다. . 이 경우 새 파일 이름을 만들어 NEW_NAME 변수에 저장합니다. echo을 사용하여 이전 파일 이름을 복사하여 명령을 내리고 -를 바꾸세요. _으로 sed 사용 명령. 마지막으로 이동 명령 mv을 사용합니다. 이전 파일 이름과 새 파일 이름을 인수로 사용합니다.

파이썬 스크립트

다음으로 Python에서 어떻게 보이는지 살펴보겠습니다.

import os
# Replace "-" with "_" in file names
directory = "/path/to/your/folder"
for filename in os.listdir(directory):
 if "-" in filename:
 old_path = os.path.join(directory, filename)
 new_filename = filename.replace("-", "_")
 new_path = os.path.join(directory, new_filename)
 os.rename(old_path, new_path)
 print(f"Renamed: {filename} -> {new_filename}")

단계는 Python에서 매우 유사합니다. 먼저 디렉터리를 정의한 다음 디렉터리의 각 파일을 반복합니다. 디렉토리에 있는 모든 파일을 찾으려면 listdir을 사용해야 합니다. os의 메소드 패키지.

그런 다음 파일 이름에 -가 포함되어 있는지 확인합니다. 다음 줄에. 이러한 경우 현재 경로(old_path)를 찾습니다. ) 디렉터리와 해당 파일 이름을 병합하여 파일을 삭제합니다. -를 교체하여 새 파일 이름을 만들 수 있습니다. _ 사용 replace 사용 방법입니다.

그런 다음 새 파일 경로(new_path)를 생성합니다. ) 비슷한 방식으로 old_path을 생성합니다. . 마지막으로 rename을 호출합니다. os의 메소드 이전 파일 경로와 새 파일 경로를 인수로 사용하는 패키지입니다.

자바스크립트 스크립트

이제 JavaScript에서 어떻게 보이는지 살펴보겠습니다.

const fs = require('fs');
const path = require('path');
const directory = '/path/to/your/folder';
fs.readdir(directory, (err, files) => {
 if (err) {
 console.error('Error reading directory:', err);
 return;
 }
 files.forEach(file => {
 if (file.includes('-')) {
 const oldPath = path.join(directory, file);
 const newFilename = file.replace(/-/g, '_');
 const newPath = path.join(directory, newFilename);
 fs.rename(oldPath, newPath, err => {
 if (err) {
 console.error(`Error renaming ${file}:`, err);
 } else {
 console.log(`Renamed: ${file} -> ${newFilename}`);
 }
 });
 }
 });
});

JavaScript 구현은 Python 구현과 다소 유사하지만 더 많은 코드를 작성해야 합니다. 일반적으로 개발자는 이러한 종류의 스크립트에 JavaScript를 선호하지 않습니다. 대부분은 Bash/Python에 의존합니다. JavaScript는 브라우저 기반 자동화 스크립트에 더 적합합니다.

그래도 여기에 무엇이 있는지 살펴보겠습니다. 이 JavaScript 코드에서는 두 개의 서로 다른 패키지인 fs를 사용해야 합니다. 및 path . 상단에 디렉터리를 정의하고 readdir를 사용하여 디렉터리의 파일을 읽습니다. fs의 메소드 패키지를 만들고 디렉터리를 인수로 전달합니다. 디렉토리와 함께 파일을 읽은 후 실행될 콜백 함수도 전달합니다.

콜백 함수 내에서 각 파일을 반복하여 파일 이름에 하이픈(-)이 포함되어 있는지 확인합니다. ). 그렇다면 path을 사용하여 이전 경로를 찾습니다. 디렉터리와 파일 이름을 인수로 사용하여 패키지를 만듭니다. 그런 다음 replace을 사용하여 모든 하이픈을 밑줄로 바꿔 새 파일 이름을 구성합니다. 방법입니다.

이전 경로와 마찬가지로 새 파일 이름을 인수로 사용하여 새 경로를 찾습니다. 그런 다음 rename을 사용합니다. fs의 메소드 패키지를 사용하여 이전 파일 이름과 새 파일 이름을 모두 전달하여 파일 이름을 바꿉니다. 디렉터리의 파일 이름을 바꾸거나 읽는 동안 오류가 발생하면 오류 메시지가 기록됩니다. 그렇지 않으면 성공 메시지를 기록합니다.

이 스크립트를 실행하는 방법

좋습니다. 실제로 이러한 스크립트를 사용하는 방법은 다음과 같습니다.

  1. /path/to/your/folder 바꾸기 파일이 포함된 실제 디렉토리를 사용하세요.

  2. 해당 환경에서 스크립트를 실행하세요:

    • 배시: .sh로 저장 파일을 선택한 다음 bash script.sh으로 실행하세요.

    • 파이썬: .py로 저장 파일을 선택한 다음 python script.py로 실행합니다.

    • 자바스크립트: .js으로 저장 파일을 선택한 다음 node script.js로 실행하세요.

아래 스크린샷은 bash 스크립트를 실행하여 파일 이름을 변경하는 모습을 보여줍니다.

마스터 스크립팅:반복 작업을 자동화하여 생산성 향상

마스터 스크립팅:반복 작업을 자동화하여 생산성 향상

반복 스크립트

반복 스크립트는 매주 시스템 상태 확인, 로그 정리, 데이터 업데이트 가져오기 등 정기적인 간격으로 실행되도록 설계되었습니다. 이러한 스크립트는 일반적으로 특정 형태의 작업 스케줄러를 사용합니다.

일반적인 접근 방식

  1. CRON 작업:대부분의 운영 체제는 정의된 일정에 따라 스크립트를 실행할 수 있는 CRON을 지원합니다.

  2. 작업 대기열:Celery(Python), Bull(Node.js) 또는 Sidekiq(Ruby)과 같은 도구는 예약된 작업을 더 유연하게 처리할 수 있습니다.

  3. 클라우드 스케줄러:EventBridge가 포함된 AWS Lambda, Google Cloud Scheduler 또는 Azure Logic Apps와 같은 서비스를 사용하면 서버리스 아키텍처에서 반복 스크립트를 설정할 수 있습니다.

반복 스크립트의 좋은 사용 사례 중 하나는 시스템 사용량/성능에 대한 일일/주간 보고서를 보내는 것입니다. 귀하의 제품에 가입하고 구독한 사용자 수를 찾는 스크립트를 작성하고 해당 보고서를 매일/매주 이메일로 보낼 수 있습니다.

스크립트 작성 모범 사례

스크립트를 작성할 때 명심해야 할 사항은 다음과 같습니다.

1. 댓글 사용 :스크립트의 복잡한 부분을 주석으로 설명합니다.

아래 예에서는 설명이 없으면 세율이 백분율이 아닌 소수인 이유를 파악하는 데 추가 시간을 소비해야 할 수도 있습니다.

# Calculate the total price with tax
def calculate_price_with_tax(price, tax_rate):
 # Tax rate is expressed as a decimal (e.g., 0.07 for 7%)
 return price + (price * tax_rate)

2. 오류 처리 :발생할 수 있는 오류를 고려하고 적절하게 처리하세요.

아래 예에서는 파일이 누락되어도 스크립트가 충돌하지 않고 대신 유용한 오류 메시지가 표시됩니다.

try:
 with open('data.csv', 'r') as file:
 data = file.readlines()
except FileNotFoundError:
 print("Error: 'data.csv' file not found. Make sure the file exists before running the script.")
except Exception as e:
 print(f"An unexpected error occurred: {e}")

3. 모듈형 디자인 :스크립트를 재사용 가능한 함수나 모듈로 나눕니다.

아래 예에서는 기능을 더 작고 재사용 가능한 함수로 분리하여 스크립트의 일부를 독립적으로 디버그하거나 재사용할 수 있습니다.

def fetch_data_from_api(api_url):
 # Fetch data from the given API
 pass
def process_data(data):
 # Process the data into the desired format
 pass
def save_to_file(data, filename):
 # Save processed data to a file
 pass
# Main script
if __name__ == "__main__":
 data = fetch_data_from_api("https://example.com/api")
 processed_data = process_data(data)
 save_to_file(processed_data, "output.json")

4. 입력 유효성 검사 :예상치 못한 오류나 보안 위험을 방지하기 위해 사용자 입력을 검증합니다.

유효성을 검사하지 않으면 누군가 유효하지 않거나 악의적인 데이터(예:특정 시나리오의 SQL 삽입 문자열)를 입력할 수 있습니다.

import re
# Validate that the input is a valid email address
def validate_email(email):
 pattern = r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'
 if not re.match(pattern, email):
 raise ValueError("Invalid email address format")
 return email
# Example usage
try:
 user_email = validate_email(input("Enter your email: "))
 print(f"Valid email: {user_email}")
except ValueError as e:
 print(e)

5. 버전 관리 :Git 또는 기타 버전 제어 도구를 사용하여 변경 사항을 추적하세요.

변경으로 인해 스크립트가 중단되면 git checkout을 사용하여 이전 커밋으로 쉽게 되돌릴 수 있습니다. . 또한 팀원들과 원활하게 공동작업할 수 있습니다.

git init
git add script.py
git commit -m "Initial commit"

결론

스크립트 작성은 생산성과 문제 해결 능력을 크게 향상시킬 수 있는 기술입니다. Bash, Python, JavaScript와 같은 스크립팅 언어의 기본 사항을 이해하면 작업을 자동화하고 워크플로를 간소화하며 귀중한 시간을 절약할 수 있습니다. 이 귀중한 기술을 익히려면 작게 시작하여 점진적으로 구축하고 다양한 사용 사례에 대한 스크립트 작성을 연습하세요.

당신을 위한 운동이 있어요. 이 예제 스크립트를 실행하고 확인하려면 100개의 파일을 수동으로 생성해야 한다고 생각할 수도 있습니다. 시간이 많이 소모됩니다.

나는 그 100개의 파일을 생성하는 스크립트를 작성했습니다. 또한 파일 이름에 하이픈이 포함된 100개의 파일을 생성하는 스크립트를 작성해 보는 것이 좋습니다. 그런 다음 예제 스크립트를 실행하여 하이픈을 밑줄로 변환해 보세요.

처음에는 어렵게 들릴 수도 있지만, 100개의 파일을 생성하려면 5줄의 bash 코드만 작성하면 됩니다. 단지 100개가 아니라 단 5줄의 코드로 백만/십억/조 개의 파일을 생성할 수도 있습니다.

스크립트에 대해 더 자세히 알고 싶으시면 제 이메일 뉴스레터(https://5minslearn.gogosoon.com/)를 구독하시고 소셜 미디어에서 저를 팔로우하세요.

즐거운 스크립팅 되세요!

무료로 코딩을 배우세요. freeCodeCamp의 오픈 소스 커리큘럼은 40,000명 이상의 사람들이 개발자로 취업하는 데 도움을 주었습니다. 시작하세요