시스템 환경 변수(System Environment Variables)와 사용자 환경 변수(User Environment Variables)는 일상적으로 Windows OS를 사용하는 사람들에게 늘 어렵게 느껴지는 주제입니다. 이 변수들은 정확히 어떤 역할을 할까요? 인터넷의 어떤 튜토리얼에서 PATH 변수를 추가하라고 했는데, 그게 대체 무엇일까요? 그리고 이러한 변수들은 어디에서 찾을 수 있을까요? 이 글에서는 이런 궁금증들을 모두 해결해 드리겠습니다. 시스템 및 사용자 환경 변수가 무엇인지, 그리고 이를 어떻게 활용할 수 있는지 전반적인 개요를 알아보겠습니다.
이 글에서는 환경 변수의 개념, 시스템 및 사용자 환경 변수의 차이점, 변수를 추가하고 수정하는 방법까지 다룹니다. 마지막으로 동적 시스템 변수(Dynamic System Variables)에 대해서도 살펴보고 명령 프롬프트에서 활용하는 방법까지 소개합니다.
Windows OS에서 환경 변수란 무엇인가?
환경 변수(Environment Variable)는 '환경(Environment)'과 '변수(Variable)'라는 두 단어로 이루어져 있습니다. 먼저 '변수'부터 살펴보겠습니다. 변수란 값을 저장할 수 있고 컴퓨터마다 다른 값을 가질 수 있는 존재를 의미합니다. 한편 Windows는 응용 프로그램이 실행되고 작업을 수행할 수 있도록 '환경'을 제공하는데, 이것이 첫 번째 단어의 유래입니다. 두 단어를 합치면, 환경 변수란 환경이 제공하는 값들을 저장하는 동적인 객체라고 할 수 있습니다.
환경이 제공하는 값들은 다른 프로그램이 시스템에 관한 중요한 정보를 얻는 데 도움을 줍니다. 예를 들어 'windir'라는 환경 변수는 Windows가 설치된 디렉터리를 가리킵니다. 실제로 확인해 보려면 파일 탐색기 창을 열고 주소창에 '%windir%'를 입력해 보세요. Windows 설치 폴더가 바로 열리는 것을 볼 수 있습니다.
마찬가지 방식으로 다른 프로그램이나 스크립트에서도 'windir' 변수를 사용해 Windows 디렉터리를 참조할 수 있습니다. 그 외에도 접근 가능한 변수가 매우 많습니다. 'TEMP' 또는 'TMP'는 임시 파일들이 저장되는 디렉터리를 가리키는 변수이며, 가장 널리 알려진 'Path' 변수는 실행 파일이 포함된 디렉터리들을 가리킵니다. 덕분에 명령 프롬프트에서 현재 위치와 상관없이 프로그램을 실행할 수 있습니다. Path 변수에 대해서는 뒤에서 자세히 설명하겠습니다. 이러한 변수들은 개발 작업을 하거나 셸(shell)을 자주 사용할 때 특히 유용합니다.
시스템 환경 변수와 사용자 환경 변수란?
Windows에서 레지스트리가 작동하는 방식과 매우 유사하게, 환경 변수에도 시스템 변수와 사용자 변수가 있습니다. 시스템 변수는 시스템 전체에 적용되며 사용자마다 달라지지 않습니다. 반면 사용자 환경 변수는 사용자별로 각각 다르게 구성됩니다. 따라서 자신만의 변수를 사용자 계정 아래에 추가하면 다른 사용자에게 영향을 주지 않습니다.
주제를 깊이 있게 다루는 김에 알아두면 좋은 정보 하나를 소개합니다. 시스템 변수가 사용자 변수보다 먼저 평가됩니다. 따라서 시스템 변수와 이름이 같은 사용자 변수가 있다면 최종적으로는 사용자 변수가 적용됩니다. 단, Path 변수는 다른 방식으로 생성됩니다. 유효한 Path는 시스템 Path 변수에 사용자 Path 변수가 덧붙여진 형태가 되며, 항목 순서는 시스템 항목이 먼저 오고 그다음 사용자 항목이 따라옵니다.
환경 변수 추가 및 수정 방법
본격적으로 들어가기 전에 주의사항 하나 말씀드립니다. 먼저 시스템 복원 지점을 만들어 두고, 작업 내용이 확실하지 않다면 기존에 설정되어 있는 값들을 함부로 변경하지 않는 것이 좋습니다. '환경 변수' 창을 열려면 다음 단계를 따르세요.
- '내 PC(This PC)' 아이콘을 마우스 오른쪽 버튼으로 클릭하고 '속성(Properties)'을 선택합니다.
- 열린 창에서 왼쪽 메뉴의 '고급 시스템 설정(Advanced System Settings)'을 선택합니다.
- 하단의 '환경 변수(Environment Variables)' 버튼을 클릭하면 원하는 창이 열립니다.

창이 열리면 사용자 변수와 시스템 변수를 각각 확인할 수 있습니다. 첫 번째 열에는 변수 이름이, 두 번째 열에는 해당 값이 표시됩니다. 목록 아래의 버튼들을 통해 변수를 '새로 만들기', '편집', '삭제'할 수 있습니다.
Path 변수 활용하기
Path는 가장 많이 사용되는 환경 변수입니다. 앞서 언급했듯이 실행 파일이 들어 있는 디렉터리들을 가리킵니다. Path 변수를 올바르게 설정해 두면 시스템의 어느 위치에서든 해당 실행 파일들을 사용할 수 있습니다. 예제를 통해 이해해 보겠습니다. 환경 변수 창을 열고 시스템 변수 목록에서 'Path'를 찾습니다.

'편집(Edit)'을 클릭한 후, 다른 항목은 건드리지 말고 '새로 만들기(New)'를 클릭합니다. 그다음 '찾아보기'를 눌러 원하는 실행 파일이 있는 폴더를 선택하고 '확인'을 눌러 모든 설정을 저장합니다. 여기서는 필자가 'Visual Studio Code' 실행 파일을 Path에 추가했습니다.

이제 응용 프로그램을 실행하려면 명령 프롬프트를 열고 해당 폴더에 있던 실행 파일의 이름을 입력하기만 하면 됩니다. 프로그램이 지원한다면 추가 인수(arguments)도 함께 전달할 수 있습니다. 명령을 실행한 현재 디렉터리에 프로그램이 없더라도 명령 프롬프트에서 바로 실행됩니다. 이것이 바로 Path 변수의 강력함입니다.
전체 환경 변수 목록 확인하기
명령 프롬프트를 열고 'SET'을 입력한 후 Enter 키를 누르세요. 모든 변수와 현재 설정된 값의 전체 목록이 화면에 표시되며, 이를 참고해 시스템 설정을 변경할 수 있습니다.
동적 환경 변수(Dynamic Environment Variables)
일반적인 변수와 달리, 동적 환경 변수는 시스템이 아니라 CMD(명령 프롬프트)가 제공합니다. 이 변수들의 값은 직접 변경할 수 없으며, 조회할 때마다 서로 다른 개별 값으로 확장됩니다. 주로 배치(batch) 처리에 사용되며 환경 자체에는 저장되지 않습니다. 'SET' 명령으로도 이러한 변수들은 표시되지 않습니다. 대표적인 동적 환경 변수는 아래 목록에 포함되어 있습니다.
참고: 환경 변수를 마우스 오른쪽 버튼 메뉴(컨텍스트 메뉴)에 추가하는 방법도 있습니다.
Windows 11/10 환경 변수 목록
%APPDATA% – C:\Users\<사용자명>\AppData\Roaming
%ALLUSERSPROFILE% – C:\ProgramData
%CD% – 입력 시 현재 작업 중인 디렉터리를 반환합니다.
%COMMONPROGRAMFILES% – C:\Program Files\Common Files
%COMMONPROGRAMFILES(x86)% – C:\Program Files (x86)\Common Files
%COMMONPRGRAMW6432% – C:\Program Files\Common Files
%CMDEXTVERSION% – 명령줄 확장의 버전 번호로 확장됩니다.
%COMSPEC% – C:\Windows\System32\cmd.exe
%DATE% – 날짜 형식 기본 설정에 따른 현재 날짜를 반환합니다.
%ERRORLEVEL% – 마지막으로 실행된 명령이 설정한 오류 수준(error level)을 나타냅니다.
%HOMEDRIVE% – C:\
%HOMEPATH% – C:\Users\<사용자명>
%LOCALAPPDATA% – C:\Users\<사용자명>\AppData\Local
%LOGONSERVER% – \\<도메인_로그온_서버>
%PATH% – C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem
%PATHEXT% – .com;.exe;.bat;.cmd;.vbs;.vbe;.js;.jse;.wsf;.wsh;.msc
%PROGRAMDATA% – C:\ProgramData
%PROGRAMFILES% – C:\Program Files
%PROGRAMW6432% – C:\Program Files
%PROGRAMFILES(X86)% – C:\Program Files (x86)
%PROMPT% – $P$G
%SYSTEMDRIVE% – C:
%SYSTEMROOT% – C:\Windows
%TIME% – 시간 형식 기본 설정에 따른 현재 시간을 반환합니다.
%TMP% – C:\Users\<사용자명>\AppData\Local\Temp
%TEMP% – C:\Users\<사용자명>\AppData\Local\Temp
%USERNAME% – <사용자명>
%USERPROFILE% – C:\Users\<사용자명>
%USERDOMAIN% – 현재 사용자와 연결된 사용자 도메인을 반환합니다.
%USERDOMAIN_ROAMINGPROFILE% – 로밍 프로필과 연결된 사용자 도메인을 반환합니다.
%WINDIR% – C:\Windows
%PUBLIC% – C:\Users\Public
%PSMODULEPATH% – %SystemRoot%\system32\WindowsPowerShell\v1.0\Modules\
%ONEDRIVE% – C:\Users\<사용자명>\OneDrive
%DRVERDATA% – C:\Windows\System32\Drivers\DriverData
%CMDCMDLINE% – 현재 명령 프롬프트 세션을 시작하는 데 사용된 명령줄을 출력합니다.
%COMPUTERNAME% – 시스템(컴퓨터) 이름을 출력합니다.
%PROCESSOR_REVISION% – 프로세서 리비전(revision)을 출력합니다.
%PROCESSOR_IDENTIFIER% – 프로세서 식별자(identifier)를 출력합니다.
%PROCESSOR_LEVEL% – 프로세서 수준(level)을 출력합니다.
%RANDOM% – 0부터 32767 사이의 임의의 숫자를 출력합니다.
%NUMBER_OF_PROCESSORS% – 물리적 코어와 가상 코어의 총 개수를 출력합니다.
%OS% – Windows_NT
지금까지 Windows의 시스템 및 사용자 환경 변수에 대해 알아보았습니다. Windows에는 이 외에도 훨씬 더 많은 변수가 내장되어 있으니, 'SET' 명령을 통해 직접 확인해 보시기 바랍니다.
팁: Rapid Environment Editor는 Windows용으로 강력한 환경 변수 편집기입니다.
