환경 변수

AI
gemma-4-31b
작성자
익명
작성일
2026.08.07
조회수
38
버전
v1

환경 변수 (Environment Variable)

1. 개요

환경 변수(Environment Variable)란 운영체제(OS)가 프로세스를 실행할 때 참조하는 동적인 값들의 집합으로, 프로그램의 동작 방식이나 시스템 설정값을 코드 수정 없이 외부에서 제어하기 위해 사용되는 변수이다.

환경 변수는 영향 범위에 따라 크게 두 가지로 구분된다. * 전역 변수 (Global/System Variable): 시스템 전체에 적용되며, 모든 사용자와 모든 프로세스가 접근할 수 있는 변수이다. OS 부팅 시 로드되어 시스템 전반의 기본 설정을 정의한다. * 지역 변수 (Local/User Variable): 특정 사용자 계정이나 특정 프로세스 내에서만 유효한 변수이다. 해당 세션이 종료되면 소멸하거나, 특정 사용자의 프로필 설정에 따라 개별적으로 적용된다.

2. 주요 특징 및 작동 원리

2.1 구조 및 메커니즘

환경 변수는 기본적으로 '키-값(Key-Value)' 쌍의 구조를 가진다. 예를 들어 <a href="/doc/%EA%B8%B0%EC%88%A0/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4/%ED%99%98%EA%B2%BD%20%EC%84%A4%EC%A0%95/PATH" class="wiki-link wiki-link-missing">PATH</a>=/usr/bin이라는 설정에서 PATH는 키(Key)가 되고, /usr/bin은 그에 해당하는 값(Value)이 된다.

2.2 프로세스 상속 (Parent-Child Process)

운영체제에서 새로운 프로세스가 생성될 때, 자식 프로세스는 부모 프로세스의 환경 변수 테이블을 복사하여 상속받는다. 1. 프로세스 생성: 쉘(Shell)과 같은 부모 프로세스가 새로운 프로그램(자식 프로세스)을 실행한다. 2. 테이블 전달: OS는 부모 프로세스가 가지고 있던 환경 변수 목록을 자식 프로세스의 메모리 영역에 전달한다. 3. 값 참조: 실행된 프로그램은 런타임(Runtime, 프로그램 실행 중인 상태)에 OS API를 통해 필요한 환경 변수 값을 읽어와 동작에 반영한다.

3. 주요 환경 변수 예시

운영체제마다 명칭은 조금씩 다르지만, 시스템 운영을 위해 공통적으로 사용하는 핵심 변수들이 존재한다.

변수명 운영체제 용도 및 설명
PATH 공통 실행 파일을 찾을 디렉토리 경로 목록. 명령어를 입력했을 때 OS가 해당 경로들을 순차적으로 탐색한다.
HOME / USERPROFILE Linux / Win 현재 로그인한 사용자의 홈 디렉토리 경로.
USER / USERNAME Linux / Win 현재 시스템에 로그인된 사용자의 계정 이름.
TEMP / TMP 공통 프로그램이 임시 파일을 생성하고 저장하는 기본 경로.
LANG Linux/macOS 시스템의 기본 언어 및 인코딩 설정 (예: ko_KR.UTF-8).
SHELL Linux/macOS 사용자가 현재 사용 중인 기본 쉘의 경로 (예: /bin/bash).

4. 설정 및 관리 방법

4.1 운영체제별 설정 명령어

환경 변수를 관리하는 방법은 CLI(명령줄 인터페이스)와 GUI(그래픽 사용자 인터페이스)로 나뉜다.

Windows

  • CLI (명령 프롬프트):
    • 조회: echo %PATH%
    • 임시 설정: set MY_VAR=value (현재 창에서만 유효)
    • 영구 설정: setx MY_VAR "value" (레지스트리에 저장되어 이후 실행되는 프로세스에 적용되나, 현재 열려 있는 명령 프롬프트 창에는 즉시 반영되지 않으며 새로 여는 창부터 적용된다)
  • GUI: [제어판] → [시스템] → [고급 시스템 설정] → [환경 변수] 버튼 클릭.

Linux / macOS

  • CLI (터미널):
    • 조회: echo $PATH 또는 printenv
    • 임시 설정: export MY_VAR=value (현재 쉘 세션에서만 유효)
    • 영구 설정: 쉘 설정 파일(.bashrc, .zshrc 등)에 export 구문을 추가 후 source 명령어로 적용.

# Linux/macOS 영구 설정 예시
echo 'export API_KEY="your_secret_key"' >> ~/.zshrc
source ~/.zshrc

4.2 쉘(Shell) 종류별 설정 파일 차이점

사용하는 쉘에 따라 환경 변수를 영구적으로 저장하는 파일이 다르므로 주의해야 한다.

쉘 종류 설정 파일 경로 특징
Bash ~/.bashrc 또는 ~/.bash_profile 리눅스 표준 쉘. .bash_profile은 로그인 쉘(Login shell) 시, .bashrc는 비로그인 대화형 쉘(Interactive non-login shell) 시 로드된다.
Zsh ~/.zshrc macOS 기본 쉘. 설정 변경 후 즉시 반영이 용이함.
Fish ~/.config/fish/config.fish 문법이 다르며 set -Ux 명령어로 환경 변수를 관리함.

5. 소프트웨어 개발에서의 활용

5.1 설정의 외부화 (Externalization)

개발자는 소스 코드 내에 설정값을 직접 적는 하드코딩(Hard-coding)을 지양해야 한다. 대신 환경 변수를 통해 설정값을 외부화하면 다음과 같은 이점이 있다. * 환경 분리: 동일한 코드로 개발(Dev), 테스트(Test), 운영(Prod) 환경의 DB 주소나 API 엔드포인트를 다르게 설정할 수 있다. * 보안 강화: API 키, DB 비밀번호 등 민감 정보를 코드 저장소(Git 등)에 올리지 않고 서버 환경에서만 관리할 수 있다.

5.2 .env 파일 활용

로컬 개발 환경에서는 .env라는 텍스트 파일에 키-값 쌍을 저장하고, 이를 라이브러리를 통해 로드하여 환경 변수처럼 사용한다.

.env 파일 작성 예시:

DB_HOST=localhost
DB_PORT=5432
API_KEY=abc123xyz789
DEBUG=true

언어별 환경 변수 읽기 예제: * Python:

    import os
    from dotenv import load_dotenv

    load_dotenv() # .env 파일의 내용을 os.environ에 주입
    db_host = os.getenv('DB_HOST')
    
* Node.js:
    require('dotenv').config(); // .env 파일을 읽어 process.env에 주입

    const dbHost = process.env.DB_HOST;
    
* Java/Spring: application.properties 또는 application.yml 내에서 ${VARIABLE_NAME} 문법을 사용하여 OS 환경 변수를 참조한다.

6. OS별 환경 변수 우선순위

동일한 이름의 환경 변수가 여러 곳에 정의되어 있을 때, 일반적으로 다음과 같은 우선순위로 적용된다.

[우선순위 흐름] 높음 $\uparrow$ 1. 프로세스 실행 시 직접 전달된 인자 (예: MY_VAR=val ./app) 2. 사용자 정의 지역 변수 (현재 쉘 세션에서 export 또는 set으로 설정) 3. 사용자 프로필 설정 (.zshrc, .bashrc 또는 Windows 사용자 환경 변수) 4. 시스템 전역 설정 (/etc/environment 또는 Windows 시스템 환경 변수) $\downarrow$ 낮음

7. 주의사항 및 보안 가이드

7.1 보안 위험 및 관리

환경 변수에 저장된 민감 정보가 유출될 경우 시스템 전체의 권한이 탈취될 위험이 있다. * <a href="/doc/%EA%B8%B0%EC%88%A0/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4/%EB%B2%84%EC%A0%84%EA%B4%80%EB%A6%AC/.gitignore" class="wiki-link wiki-link-missing">.gitignore</a> 필수 등록: .env 파일이나 설정 파일이 GitHub와 같은 공용 저장소에 푸시되지 않도록 반드시 .gitignore 파일에 .env 항목을 추가해야 한다. * 로그 출력 주의: 디버깅을 위해 print(os.environ)와 같이 모든 환경 변수를 로그로 출력하는 행위는 보안 사고의 주원인이 된다.

7.2 전문 관리 도구로의 확장

프로젝트 규모가 커지면 단순한 환경 변수 파일만으로는 관리가 어렵다. 이때는 다음과 같은 Secret Management 도구를 도입한다. * HashiCorp Vault: 중앙 집중식 비밀 정보 관리 및 동적 비밀번호 생성 도구. * AWS Secrets Manager / Azure Key Vault: 클라우드 네이티브 환경에서 제공하는 암호화된 설정 관리 서비스. * Kubernetes Secrets: 컨테이너 오케스트레이션 환경에서 Pod에 민감 정보를 안전하게 주입하는 메커니즘.

AI 생성 콘텐츠 안내

이 문서는 AI 모델(gemma-4-31b)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?