Windows 환경에서 명령줄 인터페이스(CLI)를 사용할 때 가장 먼저 접하게 되는 두 가지 도구가 있습니다. 바로 CMD(명령 프롬프트)와 PowerShell입니다. 이 글에서는 두 도구의 개념부터 실전 활용까지, 체계적으로 비교하고 정리합니다.
🖥️ CMD란 무엇인가?
CMD(Command Prompt, 명령 프롬프트)는 MS-DOS 시절부터 이어져 온 Windows의 전통적인 명령줄 인터페이스입니다. Windows NT 계열에서 cmd.exe라는 실행 파일로 동작하며, 1987년 DOS 시대부터 그 뿌리를 두고 있습니다.
기본적인 파일 시스템 탐색, 배치 파일(.bat) 실행, 간단한 네트워크 진단 등 일상적인 시스템 작업을 처리하는 데 사용됩니다. 문법이 단순하고 직관적이어서 Windows 초보 사용자도 쉽게 접근할 수 있다는 장점이 있습니다.
⚡ PowerShell이란 무엇인가?
PowerShell은 Microsoft가 2006년에 처음 출시한 차세대 명령줄 셸(Shell)이자 스크립팅 언어입니다. 단순한 명령 실행 도구를 넘어, .NET 프레임워크(또는 .NET Core) 기반으로 설계된 강력한 자동화 플랫폼입니다.
2016년에는 오픈소스로 공개되면서 PowerShell Core(PowerShell 6+)로 발전하였고, 현재는 Windows뿐만 아니라 macOS, Linux에서도 동작하는 크로스플랫폼 도구가 되었습니다. Windows 10/11에는 기본적으로 포함되어 있습니다.
📊 CMD vs PowerShell: 핵심 차이점 한눈에 보기
| 구분 | CMD | PowerShell |
| 출시 연도 | 1987년 (MS-DOS 기반) | 2006년 |
| 기반 기술 | MS-DOS 명령 체계 | .NET Framework / .NET Core |
| 출력 형식 | 텍스트(문자열) | 객체(Object) |
| 스크립팅 | 배치 파일(.bat, .cmd) | PowerShell 스크립트(.ps1) |
| 파이프라인 | 텍스트 기반 | 객체 기반 |
| 크로스플랫폼 | Windows 전용 | Windows / macOS / Linux |
| 확장성 | 제한적 | 모듈 시스템으로 매우 높음 |
| 학습 난이도 | 쉬움 | 중간~어려움 |
| 주요 사용 목적 | 간단한 작업, 레거시 시스템 | 자동화, 시스템 관리, DevOps |
🔤 기본 명령어 비교
CMD와 PowerShell은 같은 작업을 수행하더라도 명령어 문법이 다릅니다. 자주 사용하는 명령어를 비교해보겠습니다.
| 작업 | CMD | PowerShell |
| 현재 디렉터리 파일 목록 | dir | Get-ChildItem 또는 ls, dir |
| 디렉터리 이동 | cd 경로 | Set-Location 경로 또는 cd |
| 파일 복사 | copy 원본 대상 | Copy-Item 원본 대상 |
| 파일 이동 | move 원본 대상 | Move-Item 원본 대상 |
| 파일 삭제 | del 파일명 | Remove-Item 파일명 |
| 폴더 생성 | mkdir 폴더명 | New-Item -ItemType Directory |
| 파일 내용 보기 | type 파일명 | Get-Content 파일명 |
| 프로세스 목록 | tasklist | Get-Process |
| 프로세스 종료 | taskkill /PID 번호 | Stop-Process -Id 번호 |
| 네트워크 연결 확인 | ping 주소 | Test-Connection 주소 |
| IP 정보 확인 | ipconfig | Get-NetIPAddress |
| 환경 변수 출력 | echo %변수명% | $env:변수명 |
| 화면 지우기 | cls | Clear-Host 또는 cls |
| 도움말 보기 | 명령어 /? | Get-Help 명령어 |
PowerShell은 CMD 명령어 일부(dir, cd, cls 등)를 별칭(Alias)으로 지원하므로, CMD에 익숙한 사용자도 큰 불편 없이 사용할 수 있습니다.
🧱 아키텍처 차이: 텍스트 vs 객체
CMD와 PowerShell의 가장 근본적인 차이는 파이프라인(Pipeline)이 무엇을 전달하느냐입니다.
CMD의 텍스트 기반 파이프라인은 명령의 결과를 단순한 문자열로 처리합니다. 아래 예시처럼, 텍스트를 직접 파싱(Parsing)해야 하는 불편함이 있습니다.
:: CMD 예시: 특정 프로세스 찾기 (텍스트 파싱 필요)
tasklist | find "notepad"
PowerShell의 객체 기반 파이프라인은 명령 결과를 .NET 객체로 전달합니다. 속성(Property)과 메서드(Method)를 바로 활용할 수 있어 훨씬 강력하고 정밀한 처리가 가능합니다.
# PowerShell 예시: 특정 프로세스 찾아 종료 (객체 활용)
Get-Process | Where-Object { $_.Name -eq "notepad" } | Stop-Process
이처럼 PowerShell에서는 파이프라인을 통해 전달된 객체의 특정 속성을 기준으로 필터링하고, 바로 다음 작업을 연결할 수 있습니다.
📝 스크립팅 비교: 배치 파일(.bat) vs PowerShell 스크립트(.ps1)
반복 작업을 자동화할 때 두 도구의 스크립팅 능력 차이가 뚜렷하게 드러납니다.
CMD 배치 파일 예시: 폴더 백업
@echo off
set SRC=C:\Users\user\Documents
set DST=D:\Backup
if not exist "%DST%" mkdir "%DST%"
xcopy "%SRC%" "%DST%" /E /Y
echo 백업 완료!
pause
PowerShell 스크립트 예시: 폴더 백업 (오류 처리 포함)
$src = "C:\Users\user\Documents"
$dst = "D:\Backup"
$timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
$backupPath = "$dst\$timestamp"
try {
New-Item -ItemType Directory -Path $backupPath -Force | Out-Null
Copy-Item -Path $src -Destination $backupPath -Recurse
Write-Host "✅ 백업 완료: $backupPath" -ForegroundColor Green
} catch {
Write-Host "❌ 오류 발생: $_" -ForegroundColor Red
}
PowerShell 스크립트는 변수, 조건문, 반복문, 예외 처리(try-catch), 함수 등 프로그래밍 언어에 준하는 기능을 제공합니다. 반면 배치 파일은 문법이 단순하지만 복잡한 로직 구현에는 한계가 있습니다.
🔐 PowerShell 실행 정책(Execution Policy)
PowerShell에는 보안을 위해 스크립트 실행 정책이 적용됩니다. 기본값은 Restricted로 설정되어 있어, 스크립트 파일(.ps1)을 실행하려면 정책을 변경해야 할 수 있습니다.
| 정책 | 설명 |
| Restricted | 스크립트 실행 불가 (기본값, Windows 클라이언트) |
| AllSigned | 신뢰할 수 있는 게시자가 서명한 스크립트만 실행 |
| RemoteSigned | 로컬 스크립트는 자유, 인터넷 다운로드 스크립트는 서명 필요 (권장) |
| Unrestricted | 모든 스크립트 실행 가능 (보안 위험 있음) |
| Bypass | 아무것도 차단하지 않음 (자동화 파이프라인용) |
실행 정책을 변경하려면 PowerShell을 관리자 권한으로 실행한 후 아래 명령어를 입력합니다.
# 현재 정책 확인
Get-ExecutionPolicy
# 정책 변경 (RemoteSigned 권장)
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
💡 PowerShell 활용 예시
PowerShell은 다양한 자동화 작업에 활용됩니다. 자주 쓰이는 실용적인 예시를 소개합니다.
1. 특정 확장자 파일 일괄 검색
# 현재 폴더와 하위 폴더에서 .log 파일 모두 검색
Get-ChildItem -Path . -Recurse -Filter "*.log"
2. 파일 내용 검색 (grep 역할)
# 특정 텍스트가 포함된 줄 출력
Select-String -Path ".\*.txt" -Pattern "ERROR"
3. 서비스 상태 확인 및 재시작
# 서비스 상태 확인
Get-Service -Name "wuauserv"
# 서비스 재시작
Restart-Service -Name "wuauserv"
4. CSV 파일 읽고 처리하기
# CSV 파일을 읽어 특정 조건으로 필터링
Import-Csv -Path ".\users.csv" | Where-Object { $_.Department -eq "IT" } | Select-Object Name, Email
5. 원격 컴퓨터에 명령 실행
# 원격 PC에서 명령 실행 (WinRM 활성화 필요)
Invoke-Command -ComputerName "REMOTE-PC" -ScriptBlock { Get-Process }
6. 예약 작업 생성
# 매일 오전 9시에 스크립트 실행하는 예약 작업 등록
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File C:\Scripts\daily.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At "09:00"
Register-ScheduledTask -TaskName "DailyTask" -Action $action -Trigger $trigger
🔧 언제 CMD를 쓰고, 언제 PowerShell을 써야 할까?
CMD가 적합한 경우:
- 간단한 파일/폴더 작업: 빠르게 디렉터리를 이동하거나 파일을 확인할 때
- 레거시 배치 파일 실행: 오래된 .bat 스크립트를 그대로 실행해야 할 때
- 기본 네트워크 진단: ping, tracert, ipconfig 등의 간단한 명령을 빠르게 칠 때
- 구형 시스템 환경: PowerShell이 설치되지 않은 구형 Windows 환경
- 낮은 학습 부담: IT 비전문가가 간단한 작업을 수행할 때
PowerShell이 적합한 경우:
- 시스템 자동화: 반복 작업을 스크립트로 자동화할 때
- Windows 서버 관리: Active Directory, IIS, Exchange 등 서버 환경 관리
- DevOps / CI-CD 파이프라인: 빌드, 배포 자동화 스크립트 작성
- 클라우드 관리: Azure, AWS PowerShell 모듈을 통한 클라우드 리소스 제어
- 복잡한 데이터 처리: CSV, XML, JSON 파일 파싱 및 변환
- 크로스플랫폼 스크립팅: Windows, macOS, Linux 모두에서 동작하는 스크립트
🚀 Windows Terminal: 두 도구를 함께 사용하는 방법
Windows 10/11에서는 Windows Terminal을 통해 CMD, PowerShell, WSL(Windows Subsystem for Linux)을 하나의 앱에서 탭으로 사용할 수 있습니다. Microsoft Store에서 무료로 설치 가능하며, GPU 가속 텍스트 렌더링, 유니코드 지원, 커스텀 테마 등 풍부한 기능을 제공합니다.
또한 VS Code의 통합 터미널에서도 CMD와 PowerShell을 선택하여 사용할 수 있어, 개발 환경에서 매우 편리하게 활용됩니다.
📌 마치며: CMD는 죽었는가?
Microsoft는 공식적으로 CMD보다 PowerShell 사용을 권장하고 있으며, Windows 11에서는 기본 터미널이 PowerShell로 변경되었습니다. 그러나 CMD는 여전히 레거시 시스템 호환성, 낮은 진입 장벽, 빠른 실행이라는 강점으로 완전히 사라지지 않고 있습니다.
결론적으로, 두 도구를 모두 이해하고 상황에 맞게 선택하는 것이 Windows 파워 유저의 올바른 자세입니다. 처음 CLI에 입문한다면 CMD로 기초를 익히고, 자동화와 시스템 관리 영역으로 나아갈 준비가 되면 PowerShell을 깊이 학습하는 것을 권장합니다.
이 글이 도움이 되셨다면 좋아요와 구독 부탁드립니다. 🙏 궁금한 점은 댓글로 남겨주세요!
'까먹음 방지.zip' 카테고리의 다른 글
| 🖥️ AWS EC2 리눅스 필수 명령어 총정리 (초보자부터 실무까지) (0) | 2026.04.10 |
|---|---|
| [2026] 프로젝트 시작할 때 매번 헷갈리는 개발 명령어, 이 글 하나로 해결 (0) | 2026.04.07 |
| Antigravity Agent 설정 가이드: 모든 옵션 한국어 번역과 상세 설명 (0) | 2026.03.26 |
| Google Antigravity 자율 실행 설정 가이드: Terminal Allow/Deny List 최적 구성법 (0) | 2026.03.26 |
| [SEO.zip] 테크니컬 SEO란? 코딩 몰라도 바로 적용하는 사이트 기술 최적화 완벽 가이드 (0) | 2026.03.18 |