작업을 하다 보면 가끔 파일 생성, 혹은 디렉토리 구조 출력 등에 cmd(Command Prompt)를 사용할 때가 있습니다.
평소에는 cmd로 os단의 작업을 처리하거나 소켓 정보를 보곤 했는데, 도커를 가동시키기 위해 wsl을 설치하면서
윈도우 터미널로 파워쉘을 만져볼 일이 생겼습니다.
cmd보다 훨씬 직관적이고, 윈도우에서 자체 ISE를 제공해서 자동완성까지 지원하는 파워쉘로 작업을 하다 보니
어느덧 cmd는 점점 사용하지 않게 되었습니다.
게다가 cmd 커맨드를 모두 파워쉘에서 지원하는 것을 알게 된 이후에는
이전에 쓰던 .batch 파일들도 모두 ps1 파일로 옮기게 되었습니다.
이렇게 작업을 하다 보니, cmd가 파워쉘로 완전히 대체될 수도 있지 않은지 궁금해서
둘의 차이를 직접 조사해 보았습니다.
Powershell vs Command Prompt 비교글
위의 글에서는 파워쉘이 cmd에 비해 가지는 장점이 압도적으로 많은 것으로 묘사하고 있습니다.
각 항목들을 자세히 설명하지는 않겠으나, 제가 느꼈던 ISE 지원이나 각 쉘마다 같은 파일이 연동된다는 점, 문법적으로 파워쉘이 cmd를 지원하는 하위호환이 가능하다는 점 등을 볼때 파워쉘로 넘어가지 않을 이유가 없다고 설명하고 있습니다.
쉽고 편한 개발, 유지보수에 있어서는 파워쉘이 압도적으로 뛰어난 것으로 보여지는군요.
공식 문서 지원
공식 문서에 대해서는 파워쉘과 cmd 문법 모두 Microsoft 공식 홈페이지에 정리된 것을 확인할 수 있었습니다.
접근성 면에서는 크게 차이나지 않고, 둘 모두 windows 업데이트 시 최신 버전으로 핫픽스 및 버전업 역시 꾸준히 지원되는 것 같습니다.
성능 차이
의외였던 것은 파워쉘의 오버헤드가 생각보다 크다는 것이었습니다. 아무래도 .NET이라는 프레임워크를 통해서 실행하는 것인 만큼 반복적인 작업을 수행할 때 cmd보다 훨씬 큰 시간이 드는 것으로 보입니다.
cmd 문법을 지원하기에 거의 비슷한 속도가 나올 것 같았는데 이런 차이점이 있었네요.
결론, 성능을 위해서는 cmd, 가독성과 유지보수를 위해서는 Powershell을 사용하자
보통 간단한 작업들을 주로 하는 제 입장에서는 아무래도 powershell에 손이 더 가게 되는 것은 어쩔수 없는 것 같습니다.
나중에 제가 다시 코드를 볼 때도 이해하기 훨씬 쉽고, 에러가 날 때도 어느 지점이 문제인지 더 빠르게 파악할 수 있어 작업시간이 훨씬 단축되었습니다.
다만 한가지 아쉬운 점은 ps1파일은 windows 검색에서 powershell을 통해 바로 열리지 않는다는 점인데요.
window 키를 눌러 검색하는 경우, .bat 파일들은 바로 실행이 가능하지만
ps1 파일들은 메모장으로 열리는 것 같습니다.
지금은 .bat 파일로 해당 경로에 있는 파일을 실행시키도록 해서 .bat을 실행시켜 간접적으로 ps1 파일들을 실행시키고 있긴 한데 유지보수 면에서 번거로운 감이 있네요.
이런 점까지 고려해서 Powershell과 cmd 중 적절한 상황에 더 맞는 프로그램을 활용하시면 좋을 것 같습니다.