Netwrix 1Secure는 데이터와 아이덴티티 전반에 걸쳐 통합된 가시성을 제공합니다 - 14일간 무료로 전체 액세스가 가능합니다.무료 평가판 시작

리소스 센터블로그

PowerShell 환경 변수

PowerShell 환경 변수

Aug 25, 2025

PowerShell 환경 변수는 시스템 및 사용자 구성을 키-값 쌍으로 저장하며, 프로세스와 스크립트 전반에서 접근할 수 있습니다. 다음으로 나열할 수 있습니다: Get-ChildItem Env:$Env:<Name> 로 접근하고, Set-Item 또는 [Environment]::SetEnvironmentVariable() 로 수정하며, Remove-Item 로 제거합니다. 변수는 프로세스, 사용자 또는 머신 범위에서 존재하며, 변경 사항은 사용자 또는 머신 수준에서 정의된 경우에만 지속됩니다. 모범 사례로는 범위를 제한하고, 하드코딩된 비밀(시크릿)을 피하며, 변수를 문서화하고, 변경 사항을 안전하게 테스트하는 것이 있습니다.

PowerShell 환경 변수 소개

환경 변수는 운영 체제에 미리 정의된 변수입니다. 경로, 사용자 구성, 시스템 설정과 같은 중요한 시스템 수준 또는 사용자별 정보를 키-값 쌍 형태로 저장합니다. 이러한 변수는 PowerShell 스크립트와 세션에서 접근할 수 있으며, 소프트웨어 구성, 시스템 경로 조정, 사용자별 설정 관리 같은 작업에서 중요한 역할을 합니다. 환경 변수는 전역 변수처럼 동작하여 운영 체제와 스크립팅 환경 전반에서 접근할 수 있습니다. PowerShell에서는 이러한 변수를 손쉽게 조작할 수 있지만, 수정하거나 삭제할 때는 주의해야 합니다. 잘못된 변경은 시스템 불안정이나 애플리케이션 오류로 이어질 수 있기 때문입니다. 예를 들어, 실행 파일이 들어 있는 디렉터리를 저장하는 PATH 변수는 시스템이 명령을 찾아 실행하는 데 필수적입니다.

PowerShell 환경 변수 나열

PowerShell에서 모든 환경 변수를 나열하는 가장 간단한 방법 중 하나는 “Env:” 드라이브와 함께 Get-ChildItem cmdlet을 사용하는 것입니다. 이 명령을 통해 사용자는 환경 변수 저장소의 내용을 깔끔하고 정리된 형식으로 액세스하고 표시할 수 있습니다.

PowerShell 세션에서 사용 가능한 모든 환경 변수를 나열하려면 다음 명령을 실행하기만 하면 됩니다.

Get-ChildItem Env:

출력에는 일반적으로 다양한 환경 변수가 포함되며, 그중 일부는 익숙하게 보일 수 있습니다.

  • PATH: 실행 파일이 저장된 디렉터리 목록입니다.
  • TEMP: 임시 파일 저장 디렉터리의 경로입니다.
  • USERPROFILE: 현재 사용자의 프로필 디렉터리 경로입니다. 예: C:\Users\Administrator.Milkyway.
  • COMPUTERNAME: 컴퓨터의 이름입니다.
  • OS: 운영 체제 이름입니다. 예: Windows_NT.
  • HOMEPATH: 사용자의 홈 디렉터리입니다.
Image

환경 변수에 액세스하고 출력하기

이를 수행하는 데는 두 가지 주요 방법이 있습니다. 하나는 “$Env:<variable-name>” 구문을 사용하는 방법이고, 다른 하나는 변수 이름과 함께 “Get-ChildItem” cmdlet을 사용하는 방법입니다. 예를 들어 USERNAME 변수를 액세스하려면 환경 변수를 가져오기 위해 PowerShell에서 다음 명령을 사용합니다.

$Env:USERNAME

이 명령을 실행하기만 하면 콘솔에 로그인한 사용자의 이름이 출력됩니다.

Image

두 번째 방법은 Get-ChildItem cmdlet을 사용하는 것입니다. 아래와 같이 확인하려는 환경 변수를 지정할 수 있습니다.

(Get-ChildItem Env:USERNAME).Value

Image

같은 패턴을 사용해 PATH, COMPUTERNAME, USERPROFILE 또는 TEMP와 같은 다른 환경 변수를 출력할 수 있습니다.

$Env:Path

Image

(Get-ChildItem Env:Path).Value

Image

PowerShell 환경 변수 설정

환경 변수(Environment Variables)를 생성하거나 업데이트하는 과정은 간단하며, 아래 구문을 사용해 수행할 수 있습니다.

$Env:<variable-name> = “<value>”

초보자를 위한 Windows PowerShell 스크립팅 튜토리얼(PDF)

자세히 알아보기

환경 변수 생성

새 환경 변수를 만드는 것은 변수 이름에 값을 할당하는 것만큼 간단합니다. 예를 들어, “Foo”라는 이름의 환경 변수를 만들고 특정 값으로 설정하려면 아래 명령을 사용할 수 있습니다.

$Env:Foo = “Hello”

아래 cmdlet을 사용해 변수를 확인하면 값이 올바르게 설정되었는지 확인할 수 있습니다.

$Env:Foo

Image

환경 변수 업데이트

변수 “Foo”가 이미 존재하고 해당 값만 업데이트하려면 동일한 구문을 사용할 수 있습니다.

$Env:Foo = “NewValue”

아래와 같이 변수의 값을 확인할 수 있습니다.

$Env:Foo

Image

중요하게 알아두어야 할 점은 $Env: 접두사를 사용해 환경 변수를 변경하면 해당 변경 사항이 현재 PowerShell 세션의 실행 기간 동안에만 유지된다는 것입니다. 세션을 닫으면, 그 세션에서 생성하거나 수정한 사용자 지정 환경 변수는 모두 사라집니다. 세션을 넘어 지속되어야 하는 환경 변수를 생성하거나 업데이트해야 한다면 “SetX” 명령을 사용해야 하며, 이를 통해 사용자 또는 시스템 수준에서 환경 변수를 정의할 수 있습니다. 예를 들어 동일한 값으로 “Foo”라는 영구 환경 변수를 생성하려면 아래 cmdlet을 사용할 수 있습니다.

SetX Foo “MyVariableValue”

시스템 속성으로 들어간 다음 고급 탭→환경 변수→현재 사용자에 대한 사용자 변수에서 영구 변수를 확인할 수 있습니다.

Image

기존 환경 변수에 값 추가하기

PowerShell에서 기존 환경 변수에 값을 추가하는 것은, 기존 값은 덮어쓰지 않으면서 현재 구성을 확장하려는 경우에 유용할 수 있습니다. 이때 흔히 사용하는 시나리오 중 하나가 PATH 환경 변수이며, 실행 파일을 위한 추가 디렉터리를 추가하고 싶을 수 있습니다. PowerShell에서는 “+=” 연산자를 사용하면 이를 손쉽게 수행할 수 있는데, 이 연산자는 변수에 값을 추가하도록 특별히 설계되었습니다.

예를 들어 `Path` 환경 변수에 새 디렉터리를 추가하려면 다음 명령을 사용할 수 있습니다.

$Env:Path += “;C:\Test\SecurityService”

세미콜론( ; )은 PATH 변수에서 개별 경로를 구분하는 구분자 역할을 하므로 중요합니다. 이것이 없으면 새 경로가 기존 경로에 그대로 연결되어, 의도하지 않은 결과가 발생할 수 있습니다. 값이 성공적으로 추가되었는지 확인하려면 아래 cmdlet을 사용하여 업데이트된 변수를 출력할 수 있습니다.

$Env:Path

Image

PowerShell 환경 변수의 범위

PowerShell 환경 변수의 범위를 이해하는 것은 효과적인 스크립팅과 시스템 구성에 중요합니다. 환경 변수는 서로 다른 범위에 존재할 수 있으며, 이 범위는 다양한 상황에서 해당 변수의 사용 가능 여부와 수명(라이프사이클)을 결정합니다.

환경 변수에 대한 머신(컴퓨터), 사용자, 프로세스 스코프 설명.

환경 변수의 세 가지 주요 범위는 machine(컴퓨터), user(사용자), process(프로세스)입니다. 각 범위는 접근성 및 상속에 관한 고유한 규칙을 가지며, 이는 스크립트와 애플리케이션의 동작 방식에 상당한 영향을 줄 수 있습니다.

머신 범위

머신 범위(environment variables)로 설정된 환경 변수는 컴퓨터에서 실행되는 모든 사용자와 프로세스에 적용되는 시스템 전역 변수입니다. 이러한 변수는 보통 운영 체제나 관리자가 설정하며, 세션과 재부팅 후에도 지속적으로 유지됩니다. 머신 범위 환경 변수를 접근하거나 수정하려면 관리자 권한이 필요합니다.

유저 범위

반면 사용자 범위 환경 변수는 특정 사용자 프로필에만 해당하며, 해당 사용자의 프로필로 실행되는 모든 프로세스에서 보입니다. 이 변수들은 지속적으로 유지되지만, 이를 만든 사용자에게만 제공되며 관리자 권한을 요구하지 않고도 수정할 수 있습니다. 한 사용자가 사용자 범위 변수를 설정하더라도, 동일한 컴퓨터의 다른 사용자들은 그 변수에 접근할 수 없습니다.

프로세스 범위

프로세스 범위의 환경 변수는 해당 변수가 생성된 프로세스 또는 세션의 인스턴스에서만 존재합니다. 일시적이며 프로세스가 종료되면 사라집니다. 이 범위는 실행 시간 동안에만 관련이 있는 설정을 정의하려는 스크립트와 애플리케이션에서 흔히 사용됩니다.

환경 변수가 자식 프로세스에 상속되는 방식

환경 변수는 부모 프로세스에서 자식 프로세스로 상속됩니다. 즉, PowerShell 세션에서(프로세스 범위) 환경 변수를 생성하면, 해당 세션에서 실행하는 모든 외부 애플리케이션이나 스크립트가 그 변수를 상속받습니다. MY_USER_VAR와 같은 사용자 수준 환경 변수를 설정하면 PowerShell 세션 전반에 걸쳐 유지되며, 해당 사용자가 실행하는 모든 프로세스는 그 값이 상속됩니다. MY_MACHINE_VAR와 같은 컴퓨터 전체 변수(머신 전역 변수)를 설정하면 시스템의 모든 사용자에게 상속되고, 모든 프로세스가 해당 변수에 접근할 수 있습니다.

플랫폼 전반에서 환경 변수를 수정하는 방법

환경 변수 수정과 관련해서는 운영 체제마다 접근 방식이 크게 달라질 수 있으며, 특히 Windows와 macOS 및 Linux와 같은 유닉스 계열 시스템 간에는 차이가 큽니다. 이러한 차이는 문법, 대/소문자 구분 여부, 그리고 수정에 사용할 수 있는 명령에까지 포함됩니다.

macOS/Linux에서는 대/소문자 구분이 어떻게 작동하는지(Windows와 비교).

운영 체제 간의 핵심 차이 중 하나는 환경 변수 이름의 대/소문자 구분을 어떻게 처리하느냐입니다.

Windows

Windows에서는 환경 변수 이름이 대/소문자를 구분하지 않습니다. 예를 들어 PATH, Path, path는 모두 동일한 환경 변수를 가리킵니다. 즉, 명령에 사용한 대/소문자 표기에 대해 걱정하지 않고도 이러한 변수를 참조하거나 수정할 수 있습니다.

macOS/Linux

Unix 계열 시스템은 환경 변수 이름에 대해 대/소문자를 구분합니다. 따라서 PATH와 path는 서로 다른 두 변수로 인식됩니다. 즉, 스크립트나 명령을 환경 변수로 다룰 때 혼란이나 오류를 피하려면 정확한 대/소문자 표기를 사용해야 합니다.

임시 환경 변수와 영구 환경 변수의 차이

PowerShell의 환경 변수는 설정 방식과 변경 범위에 따라 임시 또는 영구로 구분할 수 있습니다. 이 두 가지 유형의 환경 변수 차이를 이해하는 것은 구성을 관리하고, 세션이나 시스템 재시작 이후에도 변수가 유지되도록 하는 데 중요합니다.

PowerShell 세션에서 임시 변수가 작동하는 방식

임시 환경 변수는 현재 PowerShell 세션의 컨텍스트에서만 정의되고 사용됩니다. 이러한 변수는 $Env: 접두사를 사용해 생성하고 수정할 수 있습니다. PowerShell 세션을 닫으면 임시 변수가 모두 사라지며, 이후 세션에서는 값이 유지되지 않습니다. 임시 변수는 전역 또는 사용자별 설정에 영향을 주지 않고 현재 세션에 대해 빠르게 구성을 해야 할 때 특히 유용합니다.

영구 환경 변수

영구 환경 변수는 시스템 구성에 저장되며, PowerShell을 닫았다가 다시 열거나 컴퓨터를 다시 시작한 후에도 계속 사용할 수 있습니다. PowerShell에서 영구 환경 변수를 만들거나 수정하려면 .NET의 "System.Environment" 클래스를 사용할 수 있습니다.

영구 환경 변수를 추가하거나 수정하는 구문은 다음과 같습니다.

[Environment]::SetEnvironmentVariable(‘VariableName’, ‘Value’, ‘Scope’)

Scope 매개변수는 Machine, User 또는 Process의 세 가지 값 중 하나일 수 있습니다.

예를 들어 값이 “Bar”이고 이름이 “Foo”인 영구적인 사용자 범위 환경 변수를 만들려면 다음 명령을 실행할 수 있습니다.

[Environment]::SetEnvironmentVariable(‘Foo’, ‘Bar’, ‘User’)

머신 범위 변수를 설정하려면 아래 명령을 실행하면 됩니다.

[Environment]::SetEnvironmentVariable(‘Foo’, ‘Bar’, ‘Machine’)

위 명령은 시스템의 모든 사용자에게 영향을 미치는 머신 범위 변경이 있기 때문에 관리자 권한이 필요합니다.

GetEnvironmentVariable() 메서드는 환경 변수의 값을 표시합니다. 환경 변수의 이름을 지정할 수 있습니다. 아래는 예시 cmdlet입니다.

[System.Environment]::GetEnvironmentVariable(‘Foo’)

Image

위 명령의 범위를 확인해야 할 수 있습니다.

Environment Provider 및 Item Cmdlet 작업

환경 공급자를 사용하여 환경 변수를 파일 시스템 드라이브처럼 관리하기

PowerShell은 환경 변수를 파일 시스템 드라이브처럼 취급하는 환경 공급자를 제공하며, 사용자가 파일과 디렉터리처럼 환경 변수를 관리할 수 있도록 해줍니다. Env: 드라이브는 PowerShell에서 환경 변수에 액세스할 수 있게 해줍니다. 각 환경 변수는 Env: 드라이브의 항목으로 취급되며, 표준 cmdlet을 사용해 이러한 변수와 상호 작용할 수 있습니다. 아래는 New-Item, Set-Item, Get-Item, Remove-Item 등 환경 공급자를 사용할 때 핵심적으로 사용하는 cmdlet에 대한 개요입니다.

New-Item

아래 예시 구문과 cmdlet을 따라 New-Item cmdlet을 사용하면 새 환경 변수를 생성할 수 있습니다.

New-Item -Path Env:MY_NEW_VAR -Value “MyValue”

New-Item -Path Env: -Name “MyVariable” -Value “HelloWorld”

이 명령은 현재 세션이 진행되는 동안 사용할 수 있는 새 환경 변수를 생성합니다.

Image

Set-Item

기존 환경 변수의 값을 업데이트하거나, 아직 존재하지 않는 경우 이를 생성하려면 아래 예시 cmdlet을 사용해 Set-Item cmdlet을 사용할 수 있습니다.

Set-Item -Path Env:MY_NEW_VAR -Value “UpdatedValue”

Set-Item -Path Env:MyVariable -Value “NewValue”

이 명령은 환경 변수의 값을 새 값으로 설정합니다. 변수가 존재하지 않으면, 이 명령은 지정된 값으로 변수를 생성합니다.

Get-Item

기존 환경 변수의 값을 검색하려면, 아래 예제 cmdlet을 따라 Get-Item cmdlet을 사용할 수 있습니다.

Get-Item -Path Env:MY_NEW_VAR

Get-Item -Path Env:MyVariable

이 명령은 환경 변수의 이름과 해당 변수에 할당된 값을 포함하여, 해당 환경 변수를 나타내는 개체를 반환합니다.

Image

Remove-Item

기존 환경 변수를 삭제하려면 Remove-Item cmdlet을 사용할 수 있습니다.

Remove-Item -Path Env:MY_NEW_VAR

Remove-Item -Path Env:MyVariable

이 명령은 환경 변수에서 변수를 제거합니다. 확인하려면 Get-Item cmdlet을 사용할 수 있습니다. 이 변수가 제거되면 다시 생성하지 않는 한 복구할 수 없다는 점에 유의하는 것이 중요합니다.

Image

일반적인 PowerShell 환경 변수

PowerShell에는 동작과 구성을 좌우할 수 있는 몇 가지 핵심 환경 변수가 있습니다. 이러한 변수는 PowerShell의 동작 방식, 모듈 및 스크립트를 찾는 위치, 그리고 여러 사용자 기본 설정을 구성하는 데 사용되며 생성됩니다. 아래는 PowerShell에서 일반적으로 사용되는 주요 환경 변수 중 일부입니다.

POWERSHELL_TELEMETRY_OPTOUT

이 환경 변수는 PowerShell이 Microsoft에 텔емेट리(사용/진단) 데이터를 전송하는지 여부를 제어합니다. 이 변수를 1로 설정하면 Microsoft에 사용 데이터와 충돌 보고서를 보내지 않도록 선택(옵트아웃)합니다. 기본적으로 PowerShell은 개선 목적으로 익명 사용 데이터를 전송하지만, 원하시면 옵트아웃할 수 있습니다.

POWERSHELL_DISTRIBUTION_CHANNEL

PowerShell이 설치된 배포 채널을 지정합니다. 이를 통해 PowerShell이 Windows 패키지 관리자(winget), MSI 또는 다른 패키지 관리자를 통해 설치되었는지 여부를 파악하는 데 유용할 수 있습니다. 이는 Microsoft가 어떤 채널이 가장 많이 사용되는지 추적하는 데 도움이 됩니다.

POWERSHELL_UPDATECHECK

이 환경 변수는 PowerShell이 업데이트를 자동으로 확인할지 여부를 제어합니다. 이 값을 1로 설정하면 PowerShell은 셸에 대한 업데이트를 확인합니다. 값을 0으로 설정하면 자동 업데이트 확인을 비활성화합니다. 이를 통해 PowerShell이 업데이트를 처리하는 방식을 관리하는 데 유용합니다.

PSExecutionPolicyPreference

이 환경 변수는 스크립트를 실행할 때 사용할 기본 PowerShell 실행 정책을 지정합니다. 설정되어 있으면 Set-ExecutionPolicy를 통해 구성된 실행 정책을 재정의합니다. 예를 들어 이 값을 RemoteSigned로 설정하면 서명 없이 실행할 수 있는 것은 로컬에서 생성한 스크립트뿐입니다.

PSModulePath

이 변수에는 PowerShell 모듈이 저장되어 있으며 로드되는 경로가 포함됩니다. 이는 PowerShell이 모듈을 찾기 위해 검색하는 디렉터리의 콜론(:)으로 구분된 목록입니다. 이 변수를 수정하여 사용자 지정 모듈을 위한 추가 디렉터리를 포함할 수 있습니다.

PSModuleAnalysisCachePath

이 변수는 PowerShell이 모듈 분석 캐시를 저장하는 경로를 지정합니다. PowerShell은 모듈을 로드할 때 성능을 최적화하기 위해 모듈 분석을 사용하며, 캐시는 모듈에 대한 구문 분석된 메타데이터를 저장합니다. 사용자 지정 경로를 설정하면 이 캐시 위치를 다른 곳으로 리디렉션할 수 있습니다.

PSDisableModuleAnalysisCacheCleanup

이 변수가 1로 설정되면 PowerShell은 모듈 분석 캐시의 자동 정리를 비활성화합니다. 기본적으로 PowerShell은 디스크 공간을 절약하기 위해 사용하지 않는 분석 캐시를 자동으로 삭제하지만, 이 변수는 해당 작업을 방지하도록 설정할 수 있습니다.

PowerShell을 사용하여 환경을 구성하거나 시스템 관련 정보를 검색하는 데 사용할 수 있는 다른 환경 변수도 여러 가지가 있습니다. 그중 일부는 위의 이 블로그에서 이미 언급되어 있으며, 아래에는 보다 일반적인 환경 변수들이 나와 있습니다.

  • USERNAME: 현재 사용자의 사용자 이름을 반환합니다.
  • ProgramFiles: “Program Files” 디렉터리를 가리키며, 보통 C:\Program Files입니다.
  • ProgramFiles(x86): “Program Files (x86)” 디렉터리를 가리키며, 보통 64비트 시스템에서 32비트 애플리케이션에 사용됩니다.
  • ALLUSERSPROFILE: 모든 사용자 프로필 디렉터리를 가리킵니다(보통 C:\ProgramData).
  • WINDIR: Windows 디렉터리를 가리킵니다(보통 C:\Windows).

제어판을 통해 환경 변수 관리하기

Windows 제어판을 통해 환경 변수를 직접 설정하거나 수정할 수 있습니다. 아래 단계를 따라 하면 Windows 제어판에서 환경 변수를 손쉽게 관리하면서 필요에 맞게 시스템 설정을 사용자 지정할 수 있습니다.

  1. “Windows + R”을 눌러 실행(Run) 대화 상자를 연 다음, “control”을 입력하고 Enter 키를 눌러 제어판을 여세요. 또는 시작 버튼 옆의 검색 창에 “control panel”을 입력해 검색한 뒤 선택해도 됩니다.
Image
  • 제어판에서 “System”을 클릭합니다. 왼쪽 사이드바에서 “Advanced system settings”를 클릭합니다.
Image
  • 시스템 속성(System Properties) 창에서 오른쪽 아래에 있는 “Environment Variables*” 버튼을 클릭하세요.
Image
  • 환경 변수(Environment Variables) 창에는 두 가지 섹션이 표시됩니다. “User variables”(현재 사용자용)와 “System variables”(모든 사용자용)입니다.
  • 새 변수를 만들려면 해당 섹션에서 새로 만들기(New)를 클릭하세요.
  • 기존 변수를 편집하려면 목록에서 변수를 선택한 다음 편집(Edit)을 클릭하세요.
  • 변수를 삭제하려면 해당 변수를 선택한 다음 삭제(Delete)를 클릭하세요.
Image
  • 변수를 만들거나 편집하는 경우, 해당 필드에 “Variable name” 및 “Variable value”를 입력하세요. Path와 같은 변수의 경우 세미콜론(;)으로 구분해 새 경로를 추가할 수 있습니다. 아래는 PATH 변수의 스크린샷입니다.
Image
  • 변경이 끝나면 각 대화 상자를 닫고 변경 사항을 저장하려면 OK를 클릭하세요.
  • 변경 사항이 적용되려면 열려 있는 모든 애플리케이션이나 명령 프롬프트를 다시 시작해야 할 수 있습니다.

PowerShell 환경 변수에서 흔히 발생하는 문제 해결

PowerShell의 환경 변수는 특히 범위(scope), 지속성(persistence), 또는 잘못된 값을 설정하려고 할 때 다루기가 까다로울 수 있습니다. 아래는 사용자가 환경 변수로 작업할 때 흔히 겪는 몇 가지 문제입니다.

환경 변수를 빈 문자열로 설정하기

환경 변수를 빈 문자열로 설정하려고 하면 예상한 동작이 나타나지 않을 수 있습니다. 변수가 지워지는 대신 이전 값이 그대로 유지될 수 있습니다. 환경 변수를 빈 문자열로 설정해도 해당 변수가 제거되는 것은 아니며, 단지 빈 값이 할당될 뿐입니다. 환경 변수를 빈 문자열로 설정하는 것이 아니라 완전히 제거하려면 Remove-Item cmdlet을 사용할 수 있습니다.

환경 변수 설정에 잘못된 범위가 사용됨

환경 변수를 설정할 때 잘못된 범위(사용자 vs. 프로세스 vs. 컴퓨터)를 지정하면, 변수가 예상한 위치에서 사용 가능하지 않을 수 있습니다. 사용자 또는 시스템 범위에 대해 변수를 영구적으로 설정하려면 아래 cmdlet을 사용할 수 있습니다.

[System.Environment]::SetEnvironmentVariable(‘Variable’, ‘Value’, ‘scope’)

환경 변수를 설정한 후 변경 사항이 반영되지 않음

환경 변수를 수정한 후 하위 프로세스나 다른 애플리케이션에서 변경 사항이 즉시 반영되지 않는 것을 확인할 수 있습니다. 환경 변수는 프로세스에서 캐시됩니다. 한 세션에서 환경 변수를 수정하면, 다른 세션은 재시작하기 전까지 변경 사항을 보지 못할 수 있습니다. 다른 애플리케이션에서 변경 사항을 확인할 수 있도록 하려면 해당 애플리케이션을 다시 시작하세요. 경우에 따라, 애플리케이션이 변경 사항을 인식하려면 시스템 재시작이 필요할 수 있습니다.

시스템 변수를 설정할 때 발생하는 권한 오류

시스템 수준의 환경 변수를 설정하려고 하면 “access denied” 오류가 발생할 수 있습니다. 시스템 환경 변수를 수정하려면 일반적으로 관리자 권한이 필요합니다. PowerShell을 관리자 권한으로 실행하세요.

세션 간에 변수가 유지되지 않음

세션이 끝나도 유지될 것이라고 기대하고 환경 변수를 설정했지만, 사라집니다.

변수가 “$env:”를 사용해 현재 세션에서만 설정된 경우 PowerShell을 닫으면 유지되지 않습니다. System.Environment 클래스 또는 레지스트리 편집기를 사용하여 사용자 또는 시스템 수준에서 변수를 설정하고 있는지 확인하세요.

대소문자 구분 불일치

환경 변수 이름은 Windows에서는 대소문자를 구분하지 않지만, Linux 또는 macOS의 PowerShell Core와 같이 플랫폼을 넘나드는 스크립트로 작업할 때 대소문자 구분 관련 문제가 발생할 수 있습니다. 여러 플랫폼에서 실행될 스크립트를 작성할 때는 환경 변수 이름의 올바른 대소문자를 일관되게 사용했는지 확인하세요.

환경 변수 관리를 위한 모범 사례

환경 변수를 효과적으로 관리하는 것은 PowerShell에서 안정적이고 효율적인 작업 환경을 유지하는 데 매우 중요합니다. 아래에는 플랫폼 전반에서 환경 변수를 효율적으로 사용하는 방법에 대한 몇 가지 모범 사례를 소개합니다.

설명 가능한 이름 사용

환경 변수의 이름을 명확하고 설명적으로 지정하여 쉽게 식별할 수 있게 하세요. 예를 들어, CONFIG_PATH처럼 모호한 이름 대신 MY_APP_CONFIG_PATH를 사용합니다. 그러면 다른 사람(그리고 미래의 당신)이 해당 변수의 역할을 이해하기가 더 쉬워집니다. 또 다른 예로, “Var_Database” 대신 “DatabaseConnectionString”처럼 더 설명적인 이름을 사용하면 좋습니다.

범위를 적절하게 제한하기

환경 변수의 서로 다른 범위(프로세스, 사용자, 머신)를 이해하고 필요에 따라 범위를 설정하세요. 잠재적인 충돌을 피하려면 변수를 필요한 최소 범위로 제한합니다. 임시 또는 세션 전용 변수에는 프로세스 범위를 사용하세요. 다른 사용자에게는 적용되지 않지만, 세션 전반에 걸쳐 현재 사용자에게 제공되어야 하는 변수에는 사용자 범위를 사용합니다. 데이터베이스 연결 문자열이나 시스템 전체 구성 파일처럼 모든 사용자와 프로세스에서 접근 가능해야 하는 시스템 전역 구성에는 머신 범위를 사용하세요.

변수 문서화하기

각 환경 변수의 목적, 사용 방법, 그리고 관련 의존성을 설명하는 문서 파일 또는 스크립트 내 주석을 유지하세요. 이렇게 하면 다른 사람이나(그리고) 미래의 당신이 현재 설정을 이해하는 데 도움이 됩니다.

민감한 데이터의 하드코딩을 피하세요

API 키, 비밀번호 또는 값 같은 민감한 정보를 스크립트에 하드코딩하기보다는 환경 변수를 사용해 스크립트를 더 유연하고 이식 가능하게 만드세요. 이렇게 하면 동일한 스크립트를 서로 다른 구성의 서로 다른 컴퓨터에서 실행할 수 있습니다.

기존 변수 확인

새 환경 변수를 만들기 전에 해당 변수가 이미 존재하는지 확인해 의도치 않은 덮어쓰기를 방지하세요. 이렇게 하면 환경 변수가 누락되어 스크립트나 애플리케이션이 실패하는 일을 막을 수 있습니다.

지속성을 위해 프로필 스크립트를 사용하세요

세션 전반에 걸쳐 유지되기를 원하는 환경 변수는 PowerShell 프로필에 넣는 것을 고려하세요. 이렇게 하면 새 PowerShell 세션을 열 때마다 해당 변수가 설정됩니다.

사용하지 않는 환경 변수 정리하기

사용하지 않는 환경 변수는 특히 장시간 실행되는 세션이나 대규모 시스템에서 복잡함과 잠재적 충돌을 방지하기 위해 제거하세요. PowerShell의 Remove-Item cmdlet을 사용하여 환경 변수를 제거할 수 있습니다. 이렇게 하면 환경을 깔끔하게 유지하고, 오래되었거나 관련 없는 변수를 실수로 사용하는 일을 피할 수 있습니다.

안전한 환경에서 테스트하기

핵심 환경 변수에 변경을 하기 전에, 특히 운영 환경에서는 개발 또는 스테이징 환경에서 테스트하여 장애가 발생하지 않도록 하세요.

PATH(경로) 수정을 주의하세요

PATH 변수를 수정할 때, 중요한 경로를 실수로 제거하지 않도록 확인하세요. 항상 덮어쓰기 (=) 대신 추가(+=)하고, 필요하면 기존 PATH를 백업해 두세요.

크로스 플랫폼 호환성 고려하기

스크립트가 서로 다른 환경(Windows, Linux, macOS)에서 실행될 예정이라면, Linux와 macOS에서 환경 변수 이름의 대/소문자 구분을 고려하세요. Windows의 환경 변수는 대/소문자를 구분하지 않지만, Linux/macOS의 환경 변수는 대/소문자를 구분합니다. 환경 변수가 올바르게 작동하는지 확인하기 위해 모든 대상 플랫폼에서 스크립트를 테스트하고, 그에 맞춰 접근 방식을 조정하세요.

Active Directory 보안 모범 사례

FAQ

공유하기

더 알아보기

저자 소개

Asset Not Found

Jonathan Blackwell

소프트웨어 개발 책임자

2012년부터 엔지니어이자 혁신가인 Jonathan Blackwell은 엔지니어링 리더십을 제공해 Netwrix GroupID를 Active Directory 및 Azure AD 환경에서 그룹 및 사용자 관리 분야의 최전선에 올려놓았습니다. 개발, 마케팅, 영업에서의 그의 경험을 통해 Jonathan은 Identity 시장과 구매자가 생각하는 방식까지 완전히 이해할 수 있습니다.