생산성 자동화

지루한 반복 작업 끝! 셸 스크립트와 터미널 도구로 개발자 생산성 자동화 후기

강코의 코딩 일기 2026. 7. 1. 10:26
반응형

개발자의 반복적인 업무를 셸 스크립트와 다양한 터미널 도구로 자동화하는 실제 경험과 노하우를 공유합니다. 생산성을 극대화하고 워크플로우를 효율적으로 개선하는 방법을 알아보세요.

안녕하세요, 개발 현장에서 밥벌이하고 있는 한 개발자입니다. 매일같이 수많은 코드를 짜고, 테스트하고, 배포하는 과정에서 ‘이 작업, 왜 맨날 수동으로 하고 있지?’라는 생각 해보신 적 없나요? 반복되는 단순 작업에 귀한 개발 시간을 낭비하고 있다면, 이 글이 당신의 구세주가 될지도 모릅니다.

저 역시 그랬습니다. 매일 아침 프로젝트를 시작하며 특정 서버에 SSH 접속하고, 로그 파일을 확인하고, 개발 서버를 올리는 일련의 과정들이 너무나 지루하고 비효율적이라고 느꼈죠. 이 루틴에만 하루 30분 이상을 썼던 것 같습니다. 하지만 이제는 단 한 줄의 명령어로 이 모든 과정을 마칩니다. 비결은 바로 셸 스크립트와 터미널 도구를 활용한 자동화입니다. 직접 써보니, 실제로 적용해 본 결과, 개발 생산성에 엄청난 변화를 가져왔습니다. 오늘은 제가 경험한 개발자 반복 업무 자동화의 세계를 여러분과 공유하려 합니다.

📑 목차

셸 스크립트 및 터미널 도구를 활용한 개발자 반복 업무 자동화 - code, html, digital, coding, web, programming, computer, technology, internet, design, development, website, web developer, web development, programming code, data, page, computer programming, software, site, css, script, web page, website development, www, information, java, screen, code, code, code, html, coding, coding, coding, coding, coding, web, programming, programming, computer, technology, website, website, web development, software

Image by jamesmarkosborne on Pixabay

왜 셸 스크립트인가? 개발 생산성의 숨은 보석

많은 개발자가 복잡한 자동화에는 Python이나 Node.js 같은 스크립팅 언어를 떠올립니다. 물론 그것들도 훌륭한 도구입니다. 하지만 단순하고 반복적인 업무 자동화에는 셸 스크립트만큼 강력하고 즉각적인 효과를 내는 도구도 드뭅니다. 제가 셸 스크립트를 사랑하는 몇 가지 이유가 있습니다.

  • 즉각적인 실행과 낮은 진입 장벽: 별도의 런타임 설치 없이, 터미널만 있으면 바로 작성하고 실행할 수 있습니다. 문법도 간단해서 빠르게 익힐 수 있죠.
  • 강력한 시스템 제어: 파일 시스템 접근, 프로세스 관리, 네트워크 통신 등 운영체제가 제공하는 거의 모든 기능을 터미널 명령어를 통해 제어할 수 있습니다.
  • 다양한 CLI 도구와의 연동: grep, awk, sed, jq 등 수많은 유닉스/리눅스 기반 CLI 도구들과 조합하여 무궁무진한 자동화 시나리오를 만들 수 있습니다.
  • 개발 워크플로우에 최적화: Git 명령어를 묶거나, 빌드/배포 스크립트를 만들거나, 개발 서버를 관리하는 등 개발자가 매일 마주하는 작업들을 효율적으로 묶어낼 수 있습니다.

이러한 장점 덕분에 저는 셸 스크립트를 개발 생산성을 극대화하는 숨은 보석이라고 생각합니다. 아주 작은 스크립트 하나가 모여 하루 전체 워크플로우를 바꿀 수 있죠.

스크립트 작성 전 고려할 점: 목표 설정과 모듈화

무작정 스크립트를 작성하기보다는, 먼저 어떤 작업을 자동화하고 싶은지 명확한 목표를 세우는 것이 중요합니다. 예를 들어, "프로젝트 빌드 후 배포 서버에 파일 전송"이라는 목표가 있다면, 이를 세분화하여 "빌드", "파일 압축", "SSH 접속", "파일 전송", "압축 해제", "서비스 재시작" 등으로 나눌 수 있습니다.

그리고 가능하면 각 기능을 모듈화하여 별도의 함수나 작은 스크립트로 분리하는 것이 좋습니다. 이렇게 하면 스크립트의 재사용성이 높아지고, 유지보수가 용이해집니다. 예를 들어, 특정 서버에 SSH로 접속하는 기능은 여러 배포 스크립트에서 공통으로 사용될 수 있으니 함수로 만들어 두는 식이죠.

자주 쓰는 터미널 도구, 똑똑하게 활용하기

셸 스크립트의 진정한 힘은 단일 명령어보다는 여러 터미널 도구들을 파이프(|)로 연결하여 사용하는 데서 나옵니다. 제가 실무에서 유용하게 사용하고 있는 몇 가지 도구들을 소개합니다.

텍스트 처리의 3대장: `grep`, `awk`, `sed`

로그 파일 분석이나 설정 파일 변경 같은 작업에서 이 세 가지 도구는 필수입니다.

  • grep: 특정 패턴을 포함하는 줄을 찾을 때 사용합니다.
  • awk: 텍스트를 열 단위로 처리하거나 복잡한 조건에 따라 데이터를 필터링하고 변형할 때 강력합니다.
  • sed: 파일 내 텍스트를 찾아 바꾸거나, 특정 줄을 삭제/삽입하는 데 사용합니다.

# 예시: 특정 에러 메시지를 포함하는 로그 파일을 찾고, 시간과 메시지만 추출
grep "ERROR" app.log | awk '{print $1, $2, $5}' | sed 's/ERROR//g'

위 스크립트는 app.log 파일에서 "ERROR"를 포함하는 줄을 찾고(grep), 해당 줄에서 첫 번째, 두 번째, 다섯 번째 필드(시간, 날짜, 에러 메시지 등)만 출력한 뒤(awk), 마지막으로 "ERROR" 문자열을 제거합니다(sed). 이처럼 파이프라인으로 연결하여 복잡한 데이터 처리도 몇 줄로 가능합니다.

파일 관리의 달인: `find`, `xargs`

특정 조건에 맞는 파일을 찾아서 일괄적으로 처리해야 할 때 이 조합은 빛을 발합니다.

  • find: 파일 이름, 크기, 수정 시간 등 다양한 조건으로 파일을 검색합니다.
  • xargs: find나 다른 명령어의 출력을 인자로 받아 다른 명령어를 실행합니다.

# 예시: 7일 이상 된 '.log' 파일을 찾아 삭제
find /var/log/myapp -name "*.log" -mtime +7 -print0 | xargs -0 rm

이 명령어는 /var/log/myapp 디렉토리에서 7일 이상 된 모든 .log 파일을 찾아(find), 각 파일을 rm 명령어의 인자로 넘겨 삭제합니다(xargs). -print0-0 옵션은 파일 이름에 공백이나 특수문자가 있을 때 발생할 수 있는 문제를 방지합니다.

JSON 데이터 처리의 필수 도구: `jq`

최근에는 대부분의 API 응답이나 설정 파일이 JSON 형식입니다. jq는 터미널에서 JSON 데이터를 파싱하고 필터링, 변환하는 데 독보적인 도구입니다.


# 예시: API 응답에서 특정 필드만 추출
curl -s "https://api.example.com/data" | jq '.items[] | {id, name}'

이 코드는 API에서 JSON 데이터를 받아(curl), 각 아이템에서 idname 필드만 추출하여 새로운 JSON 객체 리스트로 출력합니다(jq). 복잡한 JSON 데이터 구조를 다룰 때 정말 유용합니다.

인터랙티브 검색으로 생산성 UP: `fzf`

fzf는 터미널에서 파일을 빠르게 검색하거나, 명령어 히스토리, 프로세스 등을 인터랙티브하게 찾을 수 있게 해주는 퍼지 파인더입니다. 셸 스크립트와 결합하면 사용자가 직접 선택할 수 있는 대화형 스크립트를 만들 수 있습니다.


# 예시: 특정 디렉토리의 파일 중 하나를 선택하여 열기
SELECTED_FILE=$(find . -maxdepth 1 -type f | fzf)
if [ -n "$SELECTED_FILE" ]; then
    open "$SELECTED_FILE" # macOS
    # xdg-open "$SELECTED_FILE" # Linux
fi

현재 디렉토리의 파일 목록을 fzf로 넘겨 사용자가 하나를 선택하게 하고, 선택된 파일이 있다면 해당 파일을 엽니다. 복잡한 파일 경로를 일일이 입력할 필요 없이 빠르게 작업할 수 있게 해줍니다.

실전 자동화 레시피: 개발자 반복 업무 해방 프로젝트

이제 위에서 소개한 도구들을 활용하여 제가 실제로 사용하고 있는 몇 가지 자동화 스크립트 예시를 보여드리겠습니다. 직접 써보니, 이 작은 스크립트들이 모여 하루에 1시간 이상을 절약해 주더군요.

프로젝트 초기 설정 자동화: 새 프로젝트 템플릿 생성

새로운 프로젝트를 시작할 때마다 항상 반복되는 작업들이 있습니다. Git 리포지토리 클론, 의존성 설치, 기본 설정 파일 생성 등이죠. 이 과정을 자동화하는 스크립트입니다.


#!/bin/bash

# 사용법: ./new_project.sh [프로젝트명] [템플릿 URL]
# 예시: ./new_project.sh my-new-app git@github.com:my-org/web-template.git

PROJECT_NAME=$1
TEMPLATE_URL=$2

if [ -z "$PROJECT_NAME" ] || [ -z "$TEMPLATE_URL" ]; then
    echo "사용법: $0 [프로젝트명] [템플릿 URL]"
    exit 1
fi

echo "--- $PROJECT_NAME 프로젝트 설정 시작 ---"

# 1. 템플릿 리포지토리 클론
echo "템플릿 클론 중..."
git clone "$TEMPLATE_URL" "$PROJECT_NAME"
if [ $? -ne 0 ]; then
    echo "템플릿 클론 실패."
    exit 1
fi
cd "$PROJECT_NAME"

# 2. .git 폴더 제거 및 새로운 Git 리포지토리 초기화
echo "새로운 Git 리포지토리 초기화 중..."
rm -rf .git
git init
git add .
git commit -m "Initial commit from template"

# 3. 의존성 설치 (예: Node.js 프로젝트의 경우)
if [ -f "package.json" ]; then
    echo "Node.js 의존성 설치 중..."
    npm install
fi

# 4. 기타 초기 설정 파일 생성 (예: .env 파일)
if [ ! -f ".env" ]; then
    echo "기본 .env 파일 생성 중..."
    cp .env.example .env
fi

echo "--- $PROJECT_NAME 프로젝트 설정 완료! ---"
echo "cd $PROJECT_NAME 명령어로 이동 후 작업을 시작하세요."

이 스크립트를 사용하면 ./new_project.sh my-awesome-app git@github.com:templates/base-web.git 명령어 하나로 기본 프로젝트 구조를 갖춘 새 리포지토리가 생성되고, 필요한 의존성까지 자동으로 설치됩니다. 새 프로젝트 생성 시간을 획기적으로 줄여주는 스크립트입니다.

로그 분석 및 모니터링 자동화: 에러 로그 요약 보고서

운영 중인 서비스의 로그를 매일 확인하는 것은 매우 중요하지만, 방대한 로그 파일에서 필요한 정보를 찾는 것은 고된 일입니다. 특정 시간대의 에러 로그를 요약하여 보고서 형태로 받아보는 스크립트입니다.


#!/bin/bash

# 사용법: ./analyze_error_logs.sh [로그파일경로] [검색키워드]
# 예시: ./analyze_error_logs.sh /var/log/app/service.log "ERROR"

LOG_FILE=$1
KEYWORD=$2

if [ -z "$LOG_FILE" ] || [ -z "$KEYWORD" ]; then
    echo "사용법: $0 [로그파일경로] [검색키워드]"
    exit 1
fi

REPORT_FILE="error_report_$(date +%Y%m%d_%H%M%S).txt"
echo "--- 에러 로그 분석 보고서 ---" > "$REPORT_FILE"
echo "분석 대상: $LOG_FILE" >> "$REPORT_FILE"
echo "검색 키워드: $KEYWORD" >> "$REPORT_FILE"
echo "생성 시간: $(date)" >> "$REPORT_FILE"
echo "--------------------------" >> "$REPORT_FILE"

# 에러 메시지 추출 및 중복 제거 후 카운트
echo "" >> "$REPORT_FILE"
echo "주요 에러 메시지 요약:" >> "$REPORT_FILE"
grep "$KEYWORD" "$LOG_FILE" \
    | awk -F "$KEYWORD" '{print $2}' \
    | sort \
    | uniq -c \
    | sort -nr \
    | head -n 10 >> "$REPORT_FILE"

# 에러 발생 시간대별 분포 (간단한 예시)
echo "" >> "$REPORT_FILE"
echo "시간대별 에러 발생 (상위 5개 시간):" >> "$REPORT_FILE"
grep "$KEYWORD" "$LOG_FILE" \
    | awk '{print substr($2, 1, 2)}' \
    | sort \
    | uniq -c \
    | sort -nr \
    | head -n 5 >> "$REPORT_FILE"

echo "--------------------------" >> "$REPORT_FILE"
echo "보고서가 '$REPORT_FILE' 파일로 생성되었습니다."

이 스크립트는 지정된 로그 파일에서 특정 키워드(예: "ERROR")를 찾아, 가장 자주 발생하는 에러 메시지와 시간대별 분포를 요약하여 보고서 파일로 생성합니다. 매번 수동으로 로그를 뒤지는 대신, 이 스크립트를 실행하여 핵심적인 문제 상황을 빠르게 파악할 수 있습니다.

배포 및 빌드 프로세스 간소화: 원격 서버 배포 스크립트

개발된 코드를 테스트 서버나 운영 서버에 배포하는 과정은 긴장되고 실수하기 쉬운 작업입니다. 이 과정을 셸 스크립트로 자동화하면 휴먼 에러를 줄이고 배포 시간을 단축할 수 있습니다.


#!/bin/bash

# 사용법: ./deploy.sh [서버타입] (예: dev, prod)

SERVER_TYPE=$1
PROJECT_DIR="/home/ubuntu/my-app" # 서버 내 프로젝트 경로
SERVICE_NAME="my-app.service" # systemd 서비스 이름

if [ -z "$SERVER_TYPE" ]; then
    echo "사용법: $0 [서버타입]"
    exit 1
fi

case "$SERVER_TYPE" in
    dev)
        REMOTE_HOST="dev.example.com"
        echo "--- 개발 서버 배포 시작 ---"
        ;;
    prod)
        REMOTE_HOST="prod.example.com"
        echo "--- 운영 서버 배포 시작 (주의!) ---"
        ;;
    *)
        echo "지원하지 않는 서버 타입: $SERVER_TYPE (dev, prod 중 하나를 선택하세요)"
        exit 1
        ;;
esac

# 1. 로컬에서 빌드 (예: React 앱)
echo "로컬에서 프로젝트 빌드 중..."
npm run build
if [ $? -ne 0 ]; then
    echo "빌드 실패."
    exit 1
fi

# 2. 빌드 결과물 압축
echo "빌드 결과물 압축 중..."
tar -czf dist.tar.gz dist/
if [ $? -ne 0 ]; then
    echo "압축 실패."
    exit 1
fi

# 3. 원격 서버로 파일 전송 (scp 사용)
echo "원격 서버로 파일 전송 중..."
scp dist.tar.gz "ubuntu@$REMOTE_HOST:$PROJECT_DIR/"
if [ $? -ne 0 ]; then
    echo "파일 전송 실패."
    exit 1
fi

# 4. 원격 서버에서 배포 및 서비스 재시작
echo "원격 서버에서 배포 작업 실행 중..."
ssh "ubuntu@$REMOTE_HOST" << EOF
    cd "$PROJECT_DIR"
    tar -xzf dist.tar.gz -C .
    rm dist.tar.gz
    sudo systemctl restart "$SERVICE_NAME"
    echo "서비스 재시작 완료."
EOF
if [ $? -ne 0 ]; then
    echo "원격 배포 실패."
    exit 1
fi

echo "--- $SERVER_TYPE 서버 배포 완료! ---"

이 스크립트는 로컬에서 프로젝트를 빌드하고, 빌드 결과물을 압축한 뒤, SCP를 이용하여 원격 서버로 전송합니다. 그리고 SSH를 통해 원격 서버에 접속하여 압축을 풀고 서비스를 재시작합니다. 개발자는 ./deploy.sh prod와 같은 명령어 하나로 전체 배포 프로세스를 안전하고 빠르게 완료할 수 있습니다.

셸 스크립트 및 터미널 도구를 활용한 개발자 반복 업무 자동화 - code, programming, coding, web, language, html, programmer, technology, programming, programming, coding, coding, html, html, html, html, html, programmer, programmer

Image by MianShahzadRaza on Pixabay

스크립트 작성 팁과 베스트 프랙티스

단순한 자동화를 넘어, 더욱 견고하고 유지보수하기 쉬운 셸 스크립트를 만들기 위한 몇 가지 팁을 공유합니다.

  1. 주석을 생활화: 스크립트가 복잡해질수록 주석은 필수입니다. #을 사용하여 각 섹션이나 중요한 로직에 설명을 달아두면 나중에 스크립트를 수정하거나 다른 사람과 공유할 때 큰 도움이 됩니다.
  2. 변수 사용: 반복되거나 변경될 가능성이 있는 값(파일 경로, 서버 주소 등)은 변수로 선언하여 사용하세요. 스크립트 상단에 모아두면 한눈에 파악하기 쉽습니다.
  3. 에러 처리 및 견고한 스크립트:
    • set -e: 에러가 발생하면 즉시 스크립트 실행을 중단합니다. 예상치 못한 상황으로 인한 오류를 방지하는 데 효과적입니다.
    • set -u: 정의되지 않은 변수를 사용할 경우 에러를 발생시켜 잠재적인 버그를 잡아냅니다.
    • set -o pipefail: 파이프라인(`|`) 내의 어느 한 명령어라도 실패하면 전체 파이프라인이 실패하도록 만듭니다.
    • trap: 스크립트가 비정상적으로 종료될 때 특정 작업을 수행하도록 설정할 수 있습니다. (예: 임시 파일 삭제)
    
    #!/bin/bash
    set -euo pipefail
    
    cleanup() {
        echo "스크립트 종료. 임시 파일 삭제."
        rm -f /tmp/my_temp_file.txt
    }
    
    trap cleanup EXIT INT TERM
    
  4. `~/.zshrc` 또는 `~/.bashrc`에 alias 및 function 등록: 자주 사용하는 스크립트나 긴 명령어는 짧은 aliasfunction으로 등록해두면 편리합니다.
    
    # .zshrc 또는 .bashrc 파일에 추가
    alias gs='git status'
    alias gad='git add .'
    alias gc='git commit -m'
    
    my_deploy_prod() {
        ./scripts/deploy.sh prod
    }
    
  5. 버전 관리 (Git)의 중요성: 스크립트도 코드입니다. Git을 이용하여 버전 관리하면 변경 이력을 추적하고, 팀원들과 공유하며 협업하기 좋습니다.
셸 스크립트 및 터미널 도구를 활용한 개발자 반복 업무 자동화 - hand, write, pen, notebook, journal, planner, writing, paper, pages, open notebook, notes, desk, person, work, working, writer, taking notes, write, journal, writing, writing, writing, writing, work, work, writer, writer, writer, writer, writer

Image by Pexels on Pixabay

셸 스크립트, 만능은 아니다? 다른 자동화 도구와의 비교

셸 스크립트는 강력하지만, 모든 자동화 문제에 대한 만능 해결책은 아닙니다. 저는 문제의 복잡성에 따라 적절한 도구를 선택하는 것이 중요하다고 생각합니다.

셸 스크립트의 한계:

  • 복잡한 로직 구현의 어려움: 조건문, 반복문, 자료구조 등 복잡한 프로그래밍 로직을 구현하기에는 다른 스크립팅 언어보다 불편합니다.
  • 플랫폼 종속성: 유닉스/리눅스 환경에 최적화되어 있어, Windows 환경에서는 WSL(Windows Subsystem for Linux)을 사용하거나 PowerShell 스크립트를 따로 작성해야 합니다.
  • GUI 상호작용의 부재: 터미널 기반이므로, GUI를 통한 사용자 상호작용이 필요한 자동화에는 적합하지 않습니다.

이러한 한계를 보완하기 위해 저는 다음과 같은 도구들을 함께 고려합니다.

셸 스크립트 vs Python/Node.js 스크립팅

간단한 파일 처리나 명령어 조합에는 셸 스크립트가 빠르고 효율적이지만, 데이터베이스 연동, 외부 라이브러리 활용, 웹 크롤링 등 복잡한 로직이 필요한 경우에는 Python이나 Node.js가 더 적합합니다.

특징 셸 스크립트 Python / Node.js
주요 강점 시스템 명령어 조합, 파일 시스템 제어, 즉각적인 실행 복잡한 로직, 풍부한 라이브러리, 크로스 플랫폼, 데이터 처리
진입 장벽 낮음 (기본 터미널 명령어 숙지) 중간 (언어 문법, 환경 설정 필요)
적합한 업무 반복적인 터미널 명령어 묶기, 간단한 파일 정리, 서버 초기 설정, 배포 스크립트 API 연동, 데이터 분석, 웹 자동화, 복잡한 비즈니스 로직, CI/CD 파이프라인 스크립트
성능 명령어 실행 속도는 빠르나, 로직 처리 자체는 느릴 수 있음 로직 처리에 최적화되어 있으며, 대규모 데이터 처리에도 효율적

저는 보통 10줄 미만으로 해결 가능한 단순한 작업에는 셸 스크립트를, 그보다 복잡하거나 외부 연동이 필요한 작업에는 Python을 주로 사용합니다. 두 도구는 서로를 보완하며 개발 생산성을 높이는 데 기여할 수 있습니다.

CI/CD 툴과의 역할 분담

Jenkins, GitHub Actions, GitLab CI/CD 등 전용 CI/CD 툴은 빌드, 테스트, 배포 과정을 자동화하는 데 특화되어 있습니다. 그렇다면 셸 스크립트는 필요 없을까요? 아닙니다.

CI/CD 툴은 전체 파이프라인을 관리하고 스케줄링하는 "오케스트레이터" 역할을 합니다. 이 오케스트레이터 안에서 실제 작업을 수행하는 "작업자" 역할은 여전히 셸 스크립트나 다른 스크립팅 언어의 몫입니다. 예를 들어, GitHub Actions 워크플로우 내에서 특정 빌드 스크립트를 실행하거나, 배포 전 서버 상태를 확인하는 스크립트를 호출하는 식으로 함께 사용될 수 있습니다.

결론: 자동화는 선택이 아닌 필수, 이제 당신의 차례!

개발자에게 시간은 금입니다. 지루하고 반복적인 업무에 낭비되는 시간은 곧 창의적이고 가치 있는 개발에 투자될 수 있는 시간을 잃는 것과 같습니다. 제가 셸 스크립트와 터미널 도구를 활용하여 반복 업무를 자동화해본 결과, 다음과 같은 긍정적인 변화를 경험했습니다.

  • 생산성 극대화: 매일 반복되던 작업들이 단 한 번의 명령어로 처리되면서, 하루에 1시간 이상의 시간을 절약할 수 있었습니다.
  • 에러 감소: 수동 작업 시 발생할 수 있는 휴먼 에러가 현저히 줄어들어, 더욱 안정적인 워크플로우를 구축할 수 있었습니다.
  • 정신적 피로도 감소: 단순 반복 작업에서 오는 지루함과 스트레스가 줄어들어, 핵심 업무에 더욱 집중할 수 있게 되었습니다.
  • 자기 계발: 스크립트를 작성하고 개선하는 과정에서 새로운 도구와 기술을 익히는 계기가 되었습니다.

자동화는 더 이상 특정 전문가의 영역이 아닙니다. 모든 개발자가 생산성을 높이기 위해 적극적으로 도입해야 할 필수적인 역량입니다. 처음에는 작은 스크립트 하나부터 시작해보세요. 매일 5분씩 절약되는 작은 변화가 모여, 한 달, 1년 뒤에는 엄청난 차이를 만들어낼 것입니다.

이제 당신의 차례입니다. 어떤 반복 업무부터 자동화하고 싶으신가요? 혹시 이미 유용하게 사용하고 있는 셸 스크립트터미널 도구가 있다면 댓글로 공유해주세요! 함께 더 효율적인 개발 환경을 만들어 나갔으면 좋겠습니다.

📌 함께 읽으면 좋은 글

  • [생산성 자동화] 개발 워크플로우 자동화: 노코드/로우코드 도구로 생산성 극대화 전략
  • [개발 책 리뷰] 객체지향 설계의 핵심, 디자인 패턴 마스터하기: 재사용 가능한 소프트웨어 개발 전략
  • [튜토리얼] GitHub Actions로 CI/CD 파이프라인 구축: 배포 자동화 실전 가이드

이 글이 도움이 되셨다면 공감(♥)댓글로 응원해 주세요!
궁금한 점이나 다루었으면 하는 주제가 있다면 댓글로 남겨주세요.

반응형