Environment 클래스는 운영체제, 프로세스, 사용자, 경로 같은 런타임 정보를 손쉽게 가져올 수 있는 표준 API입니다. 크로스 플랫폼(.NET)에서 안전하게 시스템 정보를 얻고, 설정을 환경 변수로 관리할 때 유용합니다.
1. 핵심 시스템 정보 한 번에 출력하기
대표 속성만으로도 실무에서 필요한 기본 정보를 빠르게 확인할 수 있습니다.
using System;
using System.Collections;
class Program
{
static void Main()
{
Console.WriteLine("=== 시스템/프로세스 정보 ===");
Console.WriteLine($"OS: {Environment.OSVersion}");
Console.WriteLine($".NET CLR: {Environment.Version}");
Console.WriteLine($"머신 이름: {Environment.MachineName}");
Console.WriteLine($"사용자: {Environment.UserDomainName}\\{Environment.UserName}");
Console.WriteLine($"64비트 OS: {Environment.Is64BitOperatingSystem}");
Console.WriteLine($"64비트 프로세스: {Environment.Is64BitProcess}");
Console.WriteLine($"CPU 논리 코어: {Environment.ProcessorCount}");
Console.WriteLine($"현재 디렉터리: {Environment.CurrentDirectory}");
Console.WriteLine($"System 폴더: {Environment.GetFolderPath(Environment.SpecialFolder.System)}");
Console.WriteLine($"ProgramFiles: {Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)}");
Console.WriteLine($"Desktop: {Environment.GetFolderPath(Environment.SpecialFolder.Desktop)}");
Console.WriteLine($"TEMP: {Environment.GetEnvironmentVariable("TEMP") ?? Environment.GetEnvironmentVariable("TMP")}");
Console.WriteLine($"작업 셋(메모리): {Environment.WorkingSet:n0} bytes");
var uptime = TimeSpan.FromMilliseconds(Environment.TickCount);
Console.WriteLine($"업타임: {uptime}");
Console.WriteLine("\n=== 대표 환경 변수 일부 ===");
foreach (DictionaryEntry item in Environment.GetEnvironmentVariables())
{
var key = item.Key?.ToString();
if (key == "PATH" || key == "HOME" || key == "USERPROFILE" || key == "SHELL")
{
Console.WriteLine($"{key} = {item.Value}");
}
}
}
}
2. 폴더/경로는 SpecialFolder로 가져오기
하드코딩 대신 SpecialFolder를 사용하면 OS별 차이를 안전하게 처리합니다.
string system = Environment.GetFolderPath(Environment.SpecialFolder.System);
string desktop = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
string temp = Environment.GetEnvironmentVariable("TEMP")
?? Environment.GetEnvironmentVariable("TMP")
?? System.IO.Path.GetTempPath();
Console.WriteLine(system);
Console.WriteLine(desktop);
Console.WriteLine(temp);
3. 환경 변수 읽기/설정 팁
배포 환경에 따라 설정을 다르게 가져오려면 환경 변수를 활용합니다. 머신/사용자/프로세스 단위로 제어할 수 있습니다.
// 읽기
string path = Environment.GetEnvironmentVariable("PATH");
foreach (System.Collections.DictionaryEntry kv in Environment.GetEnvironmentVariables())
{
Console.WriteLine($"{kv.Key} = {kv.Value}");
}
// 설정 (프로세스 범위 권장: 외부 시스템 영향 최소화)
Environment.SetEnvironmentVariable("MY_APP_MODE", "dev", EnvironmentVariableTarget.Process);
4. 크로스 플랫폼/성능 체크포인트
- OSVersion은 운영체제 정보를 제공합니다. 세부 아키텍처가 필요하면 RuntimeInformation을 병행하는 것이 좋습니다.
- SpecialFolder는 Windows/Linux/macOS에서 각자의 표준 위치로 매핑됩니다. 하드코딩 경로는 지양합니다.
- TickCount는 25일 후 음수로 롤오버될 수 있습니다. 최신 런타임에서는 TickCount64 사용을 고려합니다.
- 환경 변수는 존재하지 않을 수 있으니 null 체크와 기본값을 준비합니다.
- 보안 환경(서비스, 컨테이너)에서는 사용자/도메인 정보가 제한될 수 있습니다. 예외 대비 로깅을 최소화하고 민감 정보 출력에 주의합니다.
5. 활용 시나리오
- 시작 시 시스템 진단 로그 출력, 버그 리포트에 첨부합니다.
- Temp/데스크톱/프로그램 폴더 경로를 안전하게 탐색합니다.
- 환경 변수로 운영 모드(dev/stage/prod)와 엔드포인트를 주입합니다.
'C#' 카테고리의 다른 글
| C# 리플렉션으로 애셈블리 의존성 분석하기 (0) | 2026.07.15 |
|---|---|
| C# 고정(Fixed) 키워드로 네이티브 메모리 접근 (0) | 2026.07.15 |
| C# 동적 메서드 호출(DynamicMethod)으로 런타임 성능 개선 (0) | 2026.07.14 |
| C# 유니코드 문자열 처리와 인코딩 변환 (0) | 2026.07.13 |
| C# CollectionView를 이용한 데이터 필터링 및 정렬 (0) | 2026.07.13 |