- Jeffrey Snover는 Windows를 명령줄로 관리 가능한 서버 OS로 만들기 위해 PowerShell을 추진했고, GUI 중심이던 Microsoft 문화와 조직 저항을 넘어서야 했음
- 초기의 UNIX 도구 이식은 Windows가 파일보다 Registry, Active Directory, WMI 같은 API에 의존하는 구조라 서버 관리 문제를 풀지 못함
- WMIC에서 WMI 기반 명령 70개를 만든 뒤, 테스트 병목과 비용 문제를 줄이기 위해 메타데이터 기반 명령 생성 엔진으로 방향을 바꿈
- PowerShell의 전신 Monad는.NET과 Longhorn 흐름을 타고 출발했지만, Longhorn 리셋 뒤 Windows에서 밀려났고 Exchange 팀과 Windows Server 조직의 지원으로 되살아남
- Snover는 직급과 보상 손실을 감수하며 PowerShell 1~4에 집중했고, 이 도구는 Windows 관리 자동화와 Office 클라우드 전환의 기반이 됨
GUI 중심 Windows와 데이터센터 관리 문제
- PowerShell은 Windows 시스템 관리를 바꾼 명령 도구였지만, Microsoft 내부에서 처음부터 자연스럽게 받아들여진 프로젝트는 아니었음
- 당시 Microsoft 문화는 GUI 중심이었고, Bill Gates가
command.exe를 마지막으로 보게 될 것이라고 말한 일화가 나올 정도로 명령줄 인터페이스는 낡은 것으로 취급됨 - Snover가 Microsoft에 합류한 출발점은 Windows NT 기반 OS를 데이터센터와 엔터프라이즈 시장에 맞게 바꿔야 한다는 문제의식이었음
- 목표는 Sun, IBM, HP 같은 UNIX 벤더와 경쟁하는 것이었음
- Intel과 개방형 하드웨어 생태계는 비용 면에서 장점이 있었지만, 서버 관리 소프트웨어는 충분히 좋지 않았음
시스템 통합업체 의존을 줄이는 관리자 모델
- Windows 서버 관리는 많은 서버를 클릭으로 설정해야 했고, 기업마다 필요한 구성이 달라 시스템 통합업체 의존이 커질 수 있었음
- Snover는 통합업체 비용이 커지면 Windows의 가격 우위가 사라진다고 봄
- 예시로 하드웨어 10, 소프트웨어 2, 시스템 통합업체 40이라는 비용 구조를 들었음
- 고객 관계와 가치가 통합업체로 넘어가는 것도 문제였음
- 대안은 UNIX식 프로그래머 관리자 모델이었음
- 작은 도구를 조합해 고유한 문제를 해결하고 자동화하는 방식임
- Windows에도 “다음 버튼만 누르는 관리자”가 아니라 스크립트와 자동화를 다루는 전문 관리자층이 필요했음
UNIX 도구 이식이 맞지 않았던 이유
- 초기 해법은 Windows Services for Unix로 Windows에 UNIX 셸과 AWK/GREP/SED 같은 도구를 올리는 것이었음
- 하지만 Windows의 관리 구조는 UNIX와 달랐음
- UNIX는 파일 중심 OS라 파일을 조작하고 프로세스를 재시작하면 많은 관리 작업을 처리할 수 있음
- Windows는 Registry, Active Directory, WMI 등 API 뒤에 기능이 있는 구조였음
- AWK는 Registry에, SED는 Active Directory에, GREP은 WMI에 직접 맞지 않았음
- WMI는 관리 작업을 위한 가능성이 있었지만 널리 쓰이지 않았고, Snover의 팀은 WMI 객체를 다루는 명령줄 도구를 만들려 함
WMIC와 메타데이터 기반 엔진
- Windows XP 시기에는 코딩 창이 10주뿐이라는 제약 속에서 WMI 기반 명령줄 인터페이스를 만들어야 했음
- 계약 엔지니어를 활용해 70개 작업을 구현했지만, Windows 서버 전체 관리에 필요한 범위에는 턱없이 부족했음
- Microsoft 내부에서는 테스트 조직이 승인하지 않으면 기능이 출시되지 않는 구조였고, 명령이 늘어날수록 테스트 병목도 커졌음
- Snover는 HTML과 브라우저의 관계처럼, 개별 명령을 코드가 아니라 메타데이터로 보고 공통 엔진만 테스트하는 방식을 밀어붙임
- 엔진이 명령을 생성하고, 각 명령의 설정은 XML 같은 형식의 메타데이터로 표현하는 접근이었음
- 그는 크리스마스 휴가 동안 메타데이터를 작성해 72개 명령을 만듦
- 기존 70개 명령에는 약 400만 달러가 들었고, 엔진에는 약 6만 달러가 들었다고 회고함
- 엔진에 필터링과 포맷팅 같은 기능을 추가하자 모든 명령이 함께 좋아졌고, 이는 PowerShell 아키텍처의 중요한 전조가 됨
Longhorn, .NET, Monad
- Bill Gates는 Windows 98 사용자가 XP로 잘 옮겨가지 않는 문제를 보고, Longhorn을 새로운 Windows 95 같은 전환점으로 만들려 했음
- Longhorn에는 .NET 기반 개발 방식, WPF, WCF, 새 저장소 모델 등이 포함될 예정이었음
- Snover는 .NET이 Windows 관리 범위를 넓히는 수단이 될 수 있다고 판단함
- WMI 제공자 작성은 충분한 동력을 얻지 못했지만, Bill Gates는 .NET 채택을 강하게 밀고 있었음
- .NET 위에 관리 유틸리티를 올리면 더 넓은 커버리지를 얻을 수 있다고 봄
- 다른 조직에서 K-shell을 포팅해 셸을 만들려 하자, Snover는 더 나은 접근을 설명했지만 설득에 실패함
- 그는 방에 틀어박혀 약 1만 줄짜리 프로토타입을 만들었고, 여기에 PowerShell의 핵심 아키텍처 원칙이 들어 있었음
- 시연 뒤 해당 팀이 아이디어를 받아들였고, Snover는 이것이 자신의 최고의 아이디어일 수 있다고 생각함
- 이 프로젝트에 참여하기 위해 수백~천 명 규모 제품·서비스의 chief architect 역할을 내려놓았고, 사실상 강등을 감수함
Monad Manifesto와 팀 설득
- 새 팀은 프로젝트 이름을 Monad로 정했고, 인력이 부족해 일부 작업을 인도에 외주화했음
- Snover는 프로젝트 비전과 성공 경로를 맞추기 위해 Monad Manifesto를 작성함
- 문제, 기존 접근, 새 접근, 가치, 차별점을 정리함
- 관리자, 제공자, 개발팀 등 이해관계자별로 어떤 가치를 제공하는지 명확히 함
- Microsoft 각 팀은 해야 할 일이 많았고, 명령줄 인터페이스를 만들지 않아도 해고되지 않으며 만들어도 승진으로 이어지지 않는 상황이었음
- Monad의 제안은 각 제품팀이 자기 객체를 조작하는 코드만 작성하고, 나머지는 PowerShell이 제공한다는 것이었음
- 포맷팅, 정렬, 필터링, 파서, 원격 실행, 권한 상승 등은 PowerShell 쪽에서 제공함
- 각 팀은 자기 도메인 객체를 어떻게 조작할지만 알려주면 됨
- Active Directory 팀은 몇 주를 투자해 cmdlet 몇 개를 만들었고, 사용자 그룹 반응이 강하자 더 많은 작업을 진행하게 됨
Longhorn 리셋 뒤 Windows로 돌아가기
- Longhorn에서는 .NET 도입이 과도하게 추진되며 문제가 커졌음
- 예시로 Notepad의
Save As대화상자가 .NET/WCF 기반 공용 대화상자 때문에 1분 30초 뒤 뜨고, 작업 세트가 15KB에서 15MB로 늘어나는 상황이 있었음 - 야간 빌드가 약 7개월 동안 동작하지 않았다는 회고도 나옴
- 예시로 Notepad의
- Windows 조직은 리셋을 하며 .NET 코드를 Windows에서 빼냈고, PowerShell도 Windows 밖으로 밀려남
- 이후 PowerShell은 명령줄 인터페이스이자 .NET 기반이라는 이유로 반복적인 취소 압박을 받음
- Bill Gates는 가치를 이해했지만 일상적인 방어에는 도움이 되지 않았음
- Windows Server 책임자는 중요한 순간에 지원했음
- Exchange 팀은 PowerShell에 의존하는 “수십억 달러 규모 사업”을 내세워 취소를 막는 역할을 함
- Windows에 .NET을 넣기 위한 WinArch 요구사항은 매우 엄격했지만, PowerShell 팀은 모든 조건을 충족하도록 준비함
- Windows 책임자가 요청 철회를 요구하자 프로그램 매니저는 정식 거부를 요구했고, 그 결과 검토 절차가 열림
- Windows Server 조직이 이 결정권을 가졌고, PowerShell이 요구사항을 충족한다고 판단해 Windows에 다시 들어가게 됨
PowerShell 1~4와 실제 영향
- PowerShell 1은 Windows Vista의 일부로 출시됨
- Snover는 출시 뒤 다른 일을 하라는 조언과 경력상 불이익 경고를 받았지만, PowerShell 2, 3, 4까지 같은 비전에 집중함
- 버전 1은 일부 목표에 도달했고, 버전 2와 3에서 기능을 채웠으며, 버전 4에서 비전이 거의 완성됐다고 회고함
- PowerShell은 Windows 관리자들이 스크립트를 쓰고 복잡한 작업을 자동화하게 만들었음
- 사용자 그룹, 온라인 질문 답변, 스크립트 공유, 콘퍼런스 발표가 생김
- 일부 관리자는 PowerShell 경험을 통해 전문 발표자가 됨
- Snover는 약 5년 뒤 Distinguished Engineer가 되었고, 이후 Technical Fellow가 됨
- Office 책임자는 PowerShell이 없었다면 Office의 클라우드 전환이 어려웠고, Office의 클라우드 전환이 Azure의 클라우드 전환에도 영향을 줬다고 말함
- 이전에는 서버 프로비저닝이 클릭 작업이어서 반복과 수정이 어려웠음
- 스크립트 덕분에 확장할 수 있었고, 문제가 생기면 스크립트를 바꿔 대응할 수 있었음