돈을 아끼고, 시간을 되찾는
자동화와 방어적 보안의
실전 필드 매뉴얼
여기서 말하는 "해킹"은 시스템을 부수는 기술이 아니라, 시스템을 깊이 이해해서 내 것으로 만드는 기술입니다. 반복 작업을 스크립트 한 줄로 없애고, 유료 SaaS를 오픈소스로 대체하고, 내 코드와 서버를 실제 공격 패턴으로부터 지키는 법 — 기초부터 실전 코드까지 정리했습니다.
⬇ 이 페이지를 HTML로 다운로드01. 키보드·에디터 마스터리 기초
마우스로 왔다 갔다 하는 시간은 하루 평균 수십 분이 누적됩니다. OS와 에디터 단축키를 손에 붙이는 것만으로 코딩 체감 속도가 크게 달라집니다.
| 동작 | Windows | macOS | Linux (GNOME) |
|---|---|---|---|
| 창 스냅 | Win + ←/→ | Rectangle / ⌃⌥←→ | Super + ←/→ |
| 스팟라이트 실행 | Win (검색) | ⌘ + Space | Super |
| 클립보드 히스토리 | Win + V | Maccy 등 | GNOME Clipboard |
| 가상 데스크톱 전환 | Ctrl+Win+←/→ | ⌃ + ←/→ | Ctrl+Alt+←/→ |
Vim 모션은 투자 대비 회수율이 가장 높은 스킬입니다. VSCode/JetBrains 모두 Vim 플러그인을 지원하며, 텍스트를 "이동"이 아니라 "편집 대상 지정"으로 다루게 됩니다.
ciw— 커서 위 단어 전체 교체dap— 문단 삭제:%s/foo/bar/g— 파일 전체 치환
02. 쉘 스크립트로 반복 작업 없애기 실전 코드
같은 작업을 세 번 이상 손으로 반복한다면, 그건 스크립트가 되어야 합니다. 아래는 실무에서 바로 쓸 수 있는 예시입니다.
예시 1 — 다운로드 폴더 자동 정리 (확장자별로 폴더 분류 후 로그 기록)
#!/usr/bin/env bash # organize_downloads.sh — 다운로드 폴더를 확장자별로 자동 정리 set -euo pipefail SRC="$HOME/Downloads" LOG="$HOME/.organize_downloads.log" declare -A MAP=( [pdf]="Documents/PDF" [docx]="Documents/Word" [png]="Images" [jpg]="Images" [jpeg]="Images" [zip]="Archives" [dmg]="Installers" [exe]="Installers" ) for ext in "${!MAP[@]}"; do dest="$HOME/${MAP[$ext]}" mkdir -p "$dest" find "$SRC" -maxdepth 1 -iname "*.${ext}" -print0 | while IFS= read -r -d '' f; do mv "$f" "$dest/" && echo "$(date '+%F %T') moved: $f -> $dest" >> "$LOG" done done echo "정리 완료. 로그: $LOG"
예시 2 — Git 저장소 다건 자동 백업 (rsync + tar)
#!/usr/bin/env bash # backup_repos.sh — 지정 폴더 하위 모든 git repo를 타임스탬프 압축 백업 TARGET_DIR="$HOME/projects" BACKUP_DIR="$HOME/backups" STAMP=$(date +%Y%m%d_%H%M%S) mkdir -p "$BACKUP_DIR" find "$TARGET_DIR" -maxdepth 2 -type d -name ".git" | while read -r gitdir; do repo=$(dirname "$gitdir") name=$(basename "$repo") tar -czf "$BACKUP_DIR/${name}_${STAMP}.tar.gz" -C "$(dirname "$repo")" "$name" echo "✔ backed up $name" done
set -euo pipefail를 스크립트 맨 위에 습관처럼 넣으세요. 에러 발생 시 조용히 넘어가지 않고 즉시 중단되어, 잘못된 상태로 후속 명령이 실행되는 사고를 막아줍니다.03. 작업 스케줄링으로 "잊어버려도 되는" 시스템 만들기
사람이 기억해서 실행하는 작업은 언젠가 빠집니다. OS 스케줄러에 위임하면 그 걱정 자체가 사라집니다.
| OS | 도구 | 예시 |
|---|---|---|
| Linux/macOS | cron | 0 3 * * * /home/user/backup_repos.sh — 매일 새벽 3시 |
| macOS | launchd | ~/Library/LaunchAgents 에 .plist 등록, 절전 중에도 깨어나 실행 가능 |
| Windows | Task Scheduler | schtasks /create /sc daily /st 03:00 /tn "Backup" /tr "C:\scripts\backup.ps1" |
cron 표현식 빠른 참고:
# 분 시 일 월 요일 명령 # 매 30분마다 헬스체크 */30 * * * * curl -fsS https://myapp.example/health || echo down # 매주 월요일 오전 9시, 지난주 통계 리포트 생성 0 9 * * 1 python3 ~/scripts/weekly_report.py
비용 절감 관점에서는 클라우드 인스턴스 자동 시작/종료 스케줄이 특히 유용합니다. 개발용 서버를 야간·주말에 자동으로 내리는 것만으로 클라우드 비용을 상당히 절감할 수 있습니다.
04. CLI 생산성 도구체인
터미널을 GUI보다 빠르게 만드는 오픈소스 도구 4종 세트입니다. 전부 무료이며 대부분 brew/apt/scoop 한 줄로 설치됩니다.
| 도구 | 대체하는 것 | 핵심 사용법 |
|---|---|---|
| fzf | 파일 탐색기 검색 | Ctrl+R로 명령 히스토리 퍼지 검색, vim $(fzf)로 파일 즉시 열기 |
| ripgrep (rg) | grep, IDE 전역검색 | rg "TODO" --type py — grep보다 수배 빠른 코드 검색 |
| jq | API 응답을 눈으로 읽기 | curl api.example.com | jq '.data[].id' |
| tmux | 여러 개 터미널 창 | 세션을 유지한 채 SSH 접속을 끊어도 작업이 계속 돌아감 |
# ~/.bashrc 또는 ~/.zshrc 에 넣어두면 좋은 alias 모음 alias ll='ls -lah' alias gs='git status' alias gp='git pull --rebase' alias serve='python3 -m http.server 8000' alias myip='curl -s ifconfig.me'
05. API·브라우저 자동화로 반복 업무 제거
매일 같은 사이트에서 같은 데이터를 손으로 복사한다면, 그 시간은 공짜가 아닙니다. 공개 API가 있다면 API를, 없다면 규정을 지키는 선에서 브라우저 자동화를 씁니다.
예시 — 공개 API로 환율/가격 모니터링 후 조건 알림
# price_watch.py — 특정 조건일 때만 알림 (requests만으로 구현) import requests, time THRESHOLD = 1350 URL = "https://api.exchangerate.host/latest?base=USD&symbols=KRW" def check(): r = requests.get(URL, timeout=10) rate = r.json()["rates"]["KRW"] if rate >= THRESHOLD: print(f"⚠ 환율 {rate} — 목표가 도달") # 여기에 슬랙/이메일 webhook 호출 추가 가능 if __name__ == "__main__": check()
예시 — Playwright로 반복 폼 작업 자동화 (본인 계정 대상, 서비스 약관 내에서 사용)
# form_fill.py from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.launch(headless=True) page = browser.new_page() page.goto("https://example.com/login") page.fill("#email", "[email protected]") page.fill("#password", "...") page.click("button[type=submit]") browser.close()
robots.txt와 이용약관을 확인하고, 요청 간 딜레이를 두어 서버에 부담을 주지 않아야 합니다. 로그인 크리덴셜은 코드에 하드코딩하지 말고 환경변수로 분리하세요.06. AI 코딩 에이전트 운용 전략
Claude Code 같은 에이전틱 CLI 도구는 "질문에 답하는 챗봇"이 아니라 "위임 가능한 작업자"로 다룰 때 생산성이 극대화됩니다.
- 작은 단위로 위임 — "앱 전체 리팩터링" 대신 "이 모듈의 에러 핸들링만 개선"처럼 범위를 명확히
- 테스트를 먼저 정의 — 통과해야 할 조건을 먼저 알려주면 결과 검증 루프가 자동으로 돌아감
- 반복 작업은 스크립트로 위임 — "이 CSV 100개 파일을 정리하는 스크립트를 짜고 실행까지 해줘"처럼 실행까지 맡기기
- diff 리뷰 습관화 — 자동 실행 전, 변경 사항을 사람이 한 번은 확인
07. 비용 절감: 유료 SaaS → 오픈소스 셀프호스팅
개인/소규모 팀 기준으로, 일부 유료 SaaS는 오픈소스 대안으로 충분히 대체 가능합니다. 트래픽이 적다면 저사양 VPS 한 대로 여러 서비스를 함께 운용할 수 있습니다.
| 카테고리 | 유료 SaaS 예시 | 오픈소스 대안 |
|---|---|---|
| 비밀번호 관리 | 1Password 팀 플랜 | Vaultwarden (Bitwarden 호환 서버) |
| 분석/모니터링 | Google Analytics 유료 확장 | Plausible, Umami (셀프호스팅) |
| 업무 자동화 | Zapier | n8n (셀프호스팅 워크플로 엔진) |
| 파일 동기화 | Dropbox 팀 플랜 | Nextcloud, Syncthing |
| 에러 트래킹 | Sentry 클라우드 | Sentry self-hosted (Docker) |
08. OWASP Top 10 개요 기초
OWASP Top 10은 웹 애플리케이션에서 가장 흔하게 발견되는 취약점 카테고리입니다. 공격 기법이 아니라 "무엇을 방어해야 하는가"의 체크리스트로 활용하세요.
| # | 카테고리 | 방어 핵심 |
|---|---|---|
| A01 | Broken Access Control | 서버 측에서 모든 요청에 권한 재검증 |
| A02 | Cryptographic Failures | 평문 저장 금지, TLS 강제, 강력한 해시 |
| A03 | Injection | 파라미터화 쿼리, 입력 검증/이스케이프 |
| A05 | Security Misconfiguration | 기본 계정/디버그 모드 비활성화 |
| A07 | Identification & Auth Failures | MFA, 세션 만료, 무차별 대입 제한 |
| A09 | Security Logging Failures | 인증 실패·권한 변경 이벤트 로깅 |
09. 시큐어 코딩 패턴 실전 코드
가장 흔한 취약점은 대부분 "입력을 신뢰한 코드"에서 발생합니다. 아래는 취약한 패턴과 방어 패턴을 나란히 비교한 예시입니다.
SQL Injection 방어 — 파라미터화 쿼리
# ❌ 취약: 문자열 결합으로 쿼리 생성 — 절대 이렇게 쓰지 마세요 query = f"SELECT * FROM users WHERE email = '{user_input}'" # ✅ 안전: 파라미터 바인딩 — DB 드라이버가 이스케이프를 책임짐 cursor.execute("SELECT * FROM users WHERE email = %s", (user_input,))
XSS 방어 — 출력 시 이스케이프
// ❌ 취약: 사용자 입력을 그대로 DOM에 삽입 element.innerHTML = userComment; // ✅ 안전: textContent는 자동 이스케이프됨 element.textContent = userComment; // 혹은 신뢰된 라이브러리(DOMPurify)로 새니타이즈 후 삽입
입력 검증 체크리스트
- 화이트리스트 방식 검증(허용 패턴만 통과) — 블랙리스트보다 우회가 어려움
- 서버 측 검증은 필수, 클라이언트 검증은 UX 보조 수단일 뿐
- 파일 업로드 시 확장자·MIME·실제 매직바이트를 모두 확인
10. 인증·비밀번호 보안
비밀번호는 절대 평문이나 단순 해시(MD5, SHA1)로 저장하면 안 됩니다. 느리고 솔트가 내장된 해시 함수를 사용하세요.
# bcrypt를 이용한 안전한 비밀번호 저장 (Python 예시) import bcrypt # 회원가입 시 hashed = bcrypt.hashpw(password.encode(), bcrypt.gensalt(rounds=12)) # DB에는 hashed 값만 저장 # 로그인 시 if bcrypt.checkpw(input_password.encode(), stored_hash): print("인증 성공")
- MFA(다단계 인증) — TOTP(Google Authenticator 방식) 도입만으로 계정 탈취 위험이 크게 감소
- Rate limiting — 로그인 시도 5회 실패 시 일정 시간 잠금으로 무차별 대입 방어
- 비밀번호 관리자 사용 — 서비스별 고유·고강도 비밀번호를 사람이 직접 기억하지 않도록
11. 네트워크 기초 방어
| 개념 | 실무 적용 |
|---|---|
| 방화벽(Firewall) | 필요한 포트만 열기 — ufw allow 443/tcp, 나머지는 기본 차단 |
| TLS/HTTPS | Let's Encrypt로 무료 인증서 발급, HTTP→HTTPS 강제 리다이렉트 |
| VPN | 관리용 포트(SSH 등)는 VPN 뒤에 숨기고 공인망에 직접 노출 최소화 |
| 최소 권한 원칙 | 서비스 계정은 필요한 권한만, root/관리자 계정 상시 사용 지양 |
SSH 서버 기본 하드닝
# /etc/ssh/sshd_config 권장 설정 PermitRootLogin no PasswordAuthentication no # 키 기반 인증만 허용 Port 2222 # 기본 22번 포트 스캔 노이즈 감소(보안의 본질은 아님)
12. 자가 진단 스캐닝 도구 본인 시스템 한정
아래 도구들은 본인이 소유하거나 명시적 허가를 받은 시스템을 진단할 때만 사용해야 합니다. 목적은 "내 서비스의 노출면을 내가 먼저 확인하는 것"입니다.
| 도구 | 용도 | 기본 사용법 |
|---|---|---|
| nmap | 내 서버에서 열려 있는 포트/서비스 확인 | nmap -sV -p- my-own-server.com |
| OWASP ZAP | 내 웹앱의 자동 취약점 스캔 | GUI에서 대상 URL 입력 후 "Automated Scan" |
| SSL Labs | 내 도메인의 TLS 설정 등급 확인 | ssllabs.com/ssltest 에 도메인 입력 |
| git-secrets | 커밋에 API 키 등 비밀정보 실수 포함 방지 | pre-commit 훅으로 자동 검사 |
13. CTF 학습 로드맵
CTF(Capture The Flag)는 합법적으로 마련된 취약 환경에서 공격·방어를 실습하는 대회/플랫폼입니다. 실제 시스템이 아닌 훈련용 샌드박스이므로 안전하게 실전 감각을 익힐 수 있습니다.
- 기초 개념 — 리눅스 커맨드라인, 네트워킹 기본, 웹 요청/응답 구조 이해
- OverTheWire (Bandit) — 리눅스 커맨드라인 기반 워게임, 완전 초심자용
- TryHackMe — 가이드형 학습 경로, "Pre Security" / "Jr Penetration Tester" 트랙 추천
- HackTheBox — 좀 더 실전형, 다양한 난이도의 취약 머신 실습
- PortSwigger Web Security Academy — 웹 취약점(XSS, SQLi 등)을 무료로 실습 가능
14. 윤리적 해킹 커리어 경로
"화이트햇" 보안 전문가로 나아가려면 인정받는 자격증과 실습 이력이 함께 필요합니다.
| 자격증 | 난이도 | 특징 |
|---|---|---|
| CompTIA Security+ | 입문 | 보안 기본 개념 전반을 다루는 표준 입문 자격 |
| CEH (Certified Ethical Hacker) | 중급 | 공격 기법을 이론+실습으로 폭넓게 커버 |
| OSCP | 고급 | 실전 침투 테스트 시험 — 실습 위주로 업계 신뢰도 높음 |
실무에서는 버그 바운티 프로그램(HackerOne, Bugcrowd)에 참여해 합법적으로 실제 서비스의 취약점을 찾고 신고하며 실력을 검증받는 경로도 널리 쓰입니다.