Choose a default theme

You can change your theme from the menu

Windows

Windows(윈도우)는 Microsoft가 개발하는 운영체제 제품군이다. 이 문서는 오늘날의 Windows NT 계열을 중심으로 응용 프로그램 실행, 사용자 모드와 커널 모드, 파일 경로 및 개발 도구의 관계를 설명한다. 개별 버전의 설치 요구 사항이나 지원 종료일은 버전별 공식 문서에서 확인해야 한다.

운영체제와 개발 환경

운영체제

운영체제 · Linux · Windows · macOS

관련 환경

WSL · Mac

운영체제와 도구의 관계

Windows는 하드웨어 자원을 관리하고 응용 프로그램이 실행될 기반을 제공한다. 파일 탐색기는 파일을 다루는 그래픽 인터페이스이고, PowerShell과 명령 프롬프트는 명령을 실행하는 서로 다른 환경이다. Windows Terminal은 여러 명령줄 환경을 보여 주는 터미널 프로그램이므로 PowerShell 자체와 동일하지 않다.

개발자는 Windows용 API와 개발 도구를 사용하거나 여러 운영체제를 지원하는 언어·런타임으로 프로그램을 만들 수 있다. 다중 플랫폼 언어를 쓴다는 이유만으로 모든 동작이 같아지는 것은 아니다. 파일 경로, 프로세스 실행, 권한과 네이티브 라이브러리처럼 운영체제에 의존하는 부분은 따로 확인한다.

사용자 모드와 커널 모드

일반적인 응용 프로그램은 사용자 모드에서 실행된다. 프로세스에는 별도의 가상 주소 공간과 핸들 테이블이 제공된다. 핸들은 파일이나 다른 운영체제 자원에 접근할 때 사용하는 참조이며, 임의의 물리 메모리 주소를 직접 다루는 것과 다르다.

핵심 운영체제 구성 요소와 많은 드라이버는 커널 모드에서 동작한다. 사용자 모드의 분리는 한 응용 프로그램의 잘못된 메모리 접근이 다른 프로그램과 커널을 바로 손상시키는 것을 제한한다. 커널 모드 구성 요소는 더 넓은 권한을 가지므로 결함의 영향 범위도 커질 수 있다. 관리자 계정으로 실행하는 것과 CPU의 커널 모드로 실행하는 것은 같은 개념이 아니다.

파일 경로와 이식성

Windows의 일반적인 절대 경로는 C:\Users\Example\Documents처럼 드라이브와 경로 구분자를 포함한다. 네트워크 공유에는 UNC 경로가 쓰일 수 있다. 프로그램에서 경로를 만들 때에는 문자열을 무작정 이어 붙이기보다 언어가 제공하는 경로 처리 기능을 사용하는 편이 낫다.

파일 이름에는 예약된 이름과 문자가 있으며, 대소문자 처리와 긴 경로 지원은 파일 시스템·API·설정에 따라 달라진다. 다른 운영체제에서 만들어진 이름이 항상 그대로 허용된다고 가정하지 않는다. 공백이 포함된 경로를 명령줄에 전달할 때는 하나의 인자로 전달되도록 해당 셸의 인용 규칙을 따른다.

예시: 프로세스 메모리 조회

Windows PowerShell 5.1 또는 Windows에서 실행하는 PowerShell 7의 창에서 다음 명령을 실행한다. 현재 프로세스의 작업 집합 크기를 내림차순 정렬하고 상위 다섯 개의 이름·식별자·크기를 표시한다. 프로세스를 종료하거나 설정을 바꾸지 않는 조회 예제다.

Get-Process의 결과는 단순한 화면 문자열이 아니라 속성을 가진 객체다. Sort-Object는 WorkingSet64 속성으로 정렬하고 Select-Object는 다섯 개를 골라 필요한 속성을 보여 준다. 결과의 행과 값은 실행 중인 프로그램에 따라 바뀐다. WorkingSet64는 바이트 단위 작업 집합 크기이며, 프로그램이 예약한 전체 가상 주소 공간의 크기와 같지 않다.

Get-Process | Sort-Object -Property WorkingSet64 -Descending | Select-Object -First 5 -Property ProcessName, Id, WorkingSet64

예시 해석과 한계

출력에 같은 ProcessName이 여러 번 나타날 수 있다. 브라우저처럼 하나의 제품이 여러 프로세스를 실행하기 때문이다. 이때 Id를 함께 보면 프로세스를 구분하는 데 도움이 된다. 여러 시점의 결과를 비교해야 증가 추세를 판단할 수 있으며 한 번의 측정만으로 메모리 누수를 확정할 수는 없다.

파이프라인에 Format-Table을 중간부터 넣으면 다음 명령에 전달되는 자료가 원하는 원래 객체가 아닐 수 있다. 먼저 정렬·필터·선택을 마친 뒤 최종 표시 형식을 정하는 흐름이 이해하기 쉽다. 실행 권한이나 프로세스 종료 시점에 따라 일부 정보가 조회되지 않을 수 있다는 점도 고려한다.

WSL과 개발 환경

WSL은 Windows에서 Linux 환경을 사용할 수 있게 하는 기능이다. 특히 WSL 2는 관리되는 경량 가상 머신에서 Linux 커널을 실행한다. 따라서 WSL에서 Linux 명령이 동작한다고 Windows 자체의 커널이 Linux로 바뀌는 것은 아니다.

Windows용 프로그램과 WSL 안의 프로그램은 실행 환경과 경로 체계가 다를 수 있다. 설치한 Python이나 Node.js가 어느 쪽에 속하는지, 프로젝트 파일을 어디에 두었는지, 어떤 터미널과 셸에서 명령을 실행했는지를 구분해야 같은 프로젝트의 의존성이 뒤섞이지 않는다.

주의할 점

버전·에디션·CPU 구조에 따라 이용 가능한 기능과 도구가 달라질 수 있다. 특정 개발 도구의 문서를 따라갈 때에는 Windows 버전과 PowerShell 버전을 별도로 확인한다. “Windows에서 실행했다”는 정보만으로는 재현 조건이 충분하지 않다.

인터넷의 명령 예제가 PowerShell용인지 cmd.exe용인지 먼저 구별한다. 같은 기호나 명령 이름이라도 인수 처리와 파이프라인 의미가 다를 수 있다. 관리자 실행은 필요한 작업에 한정하고, 일반적인 코드 편집이나 조회까지 항상 권한을 높일 필요는 없다.

참고 자료