Step 5. 시스템 정보 수집 — 내 컴퓨터의 건강검진표

Step 5. 시스템 정보 수집 — 내 컴퓨터의 건강검진표

Level 0 — 컴퓨터 조작과 구조의 이해 | 난이도 ★★☆☆☆ | 예상 소요 시간 2~3시간

전제: Step 4 완료. 윈도우 파워쉘에서 진행합니다.

  • 준비물: 윈도우 PC, 파워쉘.
  • 안전: 오늘은 "조사하는 날"입니다. 읽기 명령뿐이라 안전합니다.
  • 주의: 정보가 홍수처럼 쏟아집니다. 전부 이해하는 게 목표가 아닙니다. "어떤 명령이 어떤 정보를 주는가"라는 지도를 만드는 게 목표입니다.

해커가 서버 침투에 성공하면 영화처럼 바로 자료를 빼돌리지 않습니다. 대부분 정찰(enumeration)부터 합니다 — 이 컴퓨터는 뭐 하는 곳인지, 지금 뭐가 돌고 있는지, 디스크에 여유가 있는지. 즉 공격자의 첫 스킬이 "시스템 정보 수집"입니다. 그리고 방어자도 침해 조사의 첫 단계로 똑같은 명령을 씁니다. 오늘 만드는 보고서는 버리지 마세요 — "내 컴퓨터의 정상 상태 기록"으로, 나중에 이상이 생겼을 때의 비교 기준이 됩니다.


1. 학습 목표

이 챕터를 끝내면 다음을 할 수 있습니다:

  • Get-ComputerInfo로 OS와 하드웨어 정보를 수집하고 필요한 항목만 골라 본다
  • 실행 중 프로세스·서비스 목록을 뽑고 필터링한다
  • Get-PSDrive로 디스크 여유 공간을 확인한다
  • 수집한 정보를 Out-File -Append로 한 파일에 쌓아 보고서를 만든다

2. 배경 지식 — 오늘의 도구와 개념

오늘의 도구 한눈에 보기

구분 내용
언어·환경 파워쉘 5.1, 윈도우 시스템 정보 수집 (읽기 전용)
오늘의 명령어 Get-ComputerInfo(OS·하드웨어), Get-Process(프로세스), Get-Service(서비스), Get-PSDrive(디스크), Get-Date(시각)
복습·활용 Select-Object(열 고르기·자르기), Where-Object(필터), Measure-Object(개수), Out-File -Append(이어붙이기)
필요한 개념 4대 자원(CPU/메모리/디스크/네트워크), 프로세스와 서비스의 차이, 베이스라인(정상 상태 기록)

2-1. 컴퓨터의 4대 자원

"시스템 상태"라고 하면 보통 이 넷을 봅니다:

자원 하는 일 부족하면
CPU 계산/실행 모든 게 느려짐
메모리(RAM) 작업 공간 프로그램이 죽거나 느려짐
디스크 저장 공간 저장 불가, 로그 중단
네트워크 외부 통신 (Step 6에서 정식으로)

오늘 수집하는 정보는 이 넷의 "현재 상태"입니다.

2-2. 프로세스 vs 서비스 — 출근부와 상주직

  • 프로세스: 지금 실행 중인 프로그램. 사용자가 켜면 생기고, 닫으면 사라집니다. (크롬, 메모장…)
  • 서비스(Service): 화면 없이 백그라운드에서 상주하는 프로그램. 부팅 때 자동으로 켜져서 조용히 일합니다. (백신, 인쇄 관리자, 윈도우 업데이트…)

서비스가 보안에서 특히 중요한 이유: "보이지 않는 곳에서 계속 돈다"는 점입니다. 공격자가 지속성(persistence)을 확보하는 대표 수법이 자기 악성 프로그램을 서비스로 등록하는 것 — 재부팅해도 자동으로 살아나니까요. 그래서 침해 조사 때는 "모르는 서비스가 등록되어 있나"를 반드시 봅니다. 오늘 그 목록을 보는 법을 배웁니다.

2-3. 베이스라인 — 정상을 기록해 두는 습관

수비 쪽은 두 가지를 합니다. 첫째, 이 정보들을 평소에 기록해 둡니다(베이스라인). 둘째, "모르는 프로세스가 떴다", "여유 공간이 갑자기 줄었다" 같은 변화를 이 기록과 비교해 알아챕니다. 대기업은 이걸 자동화된 시스템으로 하지만, 원리는 오늘 만들 보고서와 같습니다.


3. 따라 하기

3-1. 종합 검진 — Get-ComputerInfo

Get-ComputerInfo

몇 초 생각한 뒤, 수십 줄의 정보가 쏟아집니다:

WindowsBuildLabEx      : 26100.1.amd64fre...
OsName                 : Microsoft Windows 11 Pro
OsVersion              : 10.0.26200
CsManufacturer         : ...
CsTotalPhysicalMemory  : 16576139264
...

홍수 같지만, 읽는 요령이 있습니다. 이 결과는 전부 이름 : 값 형태의 표입니다. 지금 필요한 것만 찾으면 됩니다:

  • OsName — 운영체제 이름과 에디션
  • OsVersion — 버전 번호
  • CsTotalPhysicalMemory — 실제 메모리 용량 (바이트 단위라 숫자가 큼. 16576139264바이트 ≈ 16GB)

필요한 것만 보는 법 (이게 오늘의 핵심 기술):

Get-ComputerInfo | Select-Object OsName, OsVersion, CsTotalPhysicalMemory
OsName                    OsVersion   CsTotalPhysicalMemory
------                    ---------   ---------------------
Microsoft Windows 11 Pro  10.0.26200            16576139264

Step 3에서 배운 Select-Object의 또 다른 재주 — "보고 싶은 꼬리표(컬럼)만 골라라"입니다. 수십 줄의 홍수가 한 줄의 표로 정리됐습니다. 정보 과잉 시대의 조사 원칙: 처음부터 필요한 열만 뽑아라.

3-2. 지금 뭐가 돌고 있나 — 프로세스 상위권

Step 3에서 배운 조합입니다:

Get-Process | Sort-Object WorkingSet -Descending | Select-Object -First 5 ProcessName, WorkingSet
ProcessName                                     WorkingSet
-----------                                     ----------
chrome                                            892345600
explorer                                          234567890
...

"메모리를 가장 많이 먹는 프로그램 5개." 읽는 법:

  • WorkingSet은 바이트 단위입니다. 892345600바이트 ≈ 850MB
  • 보통 1위는 브라우저(수십 개 탭이 각각 프로세스)입니다. 이상한 게 아니라 정상입니다

보안 감각: 이 목록에서 모르는 이름이 상위에 있으면 눈여겨볼 가치가 있습니다. "정상의 풍경"을 알아야 "이상"이 보입니다. 오늘 이 목록이 당신의 기준선입니다. 모르는 이름이 보이면 "프로세스 이름 + what is"로 검색해 보는 습관을 들이세요 — 정체가 나옵니다.

3-3. 상주직 명단 — Get-Service

Get-Service
Status   Name                DisplayName
------   ----                -----------
Running  AudioEndpointBuilder Windows Audio Endpoint Builder
Stopped  AJRouter            AllJoyn Router Service
Running  BFE                 Base Filtering Engine
...

읽는 법:

  • Status — Running(상주 중) / Stopped(멈춤)
  • Name — 짧은 내부 이름
  • DisplayName — 사람용 긴 이름

전체는 수백 개입니다. 지금 돌고 있는 것만 골라 봅시다 — Step 3의 필터 기계:

Get-Service | Where-Object {$_.Status -eq "Running"}

Running인 것만 남았습니다. 이 목록이 "지금 이 컴퓨터의 상주직 전원"입니다.

예측해 보기: Get-Service | Where-Object {$_.Status -eq "Running"} | Measure-Object는 뭘 알려 줄까요? 예측하고 실행하세요.
(정답: 현재 실행 중인 서비스의 개수. 필자의 PC에서는 148개가 나왔습니다 — 설치된 프로그램에 따라 100~200개 사이가 정상 범위입니다. 이 숫자도 기준선입니다 — 어느 날 갑자기 확 늘었다면 "새로 등록된 게 있다"는 신호입니다.)

3-4. 디스크 상태 — Get-PSDrive

Get-PSDrive
Name     Used (GB) Free (GB) Provider    Root
----     --------- --------- --------    ----
Alias                        Alias
C           547.69    376.91 FileSystem  C:\
Cert                         Certificate \
Env                          Environment
HKCU                         Registry    HKEY_CURRENT_USER
...

드라이브별 사용량/여유량이 나옵니다. (FileSystem 외에 레지스트리 등도 "드라이브처럼" 보이는 게 파워쉘의 설계입니다 — 지금은 C: 줄만 보면 됩니다.) Free가 중요합니다 — 여유가 바닥나면 로그가 안 쌓이고, 업데이트가 실패하고, 프로그램이 죽습니다. 실무에서는 "디스크 여유 20% 미만이면 경고" 같은 기준을 둡니다.

3-5. 종합 — 보고서 파일 만들기

이제 수집한 것들을 하나의 파일로 모읍니다. Step 2와 Step 4에서 배운 것들의 종합입니다:

Get-Date | Out-File report.txt
Get-ComputerInfo | Select-Object OsName, OsVersion, CsTotalPhysicalMemory | Out-File report.txt -Append
  • Get-Date — 현재 시각 (보고서의 첫 줄 = "조사 시각")
  • Out-File report.txt -Append-Append가 핵심: 붙이지 않으면 앞 내용을 덮어씁니다. "이어붙이기"입니다.

계속 쌓습니다:

"=== 메모리 상위 5개 프로세스 ===" | Out-File report.txt -Append
Get-Process | Sort-Object WorkingSet -Descending | Select-Object -First 5 ProcessName, WorkingSet | Out-File report.txt -Append

"=== 실행 중 서비스 수 ===" | Out-File report.txt -Append
(Get-Service | Where-Object {$_.Status -eq "Running"} | Measure-Object).Count | Out-File report.txt -Append

"=== 디스크 ===" | Out-File report.txt -Append
Get-PSDrive | Out-File report.txt -Append

마지막 줄의 (명령).Count는 "괄호 안 명령의 결과에서 Count 꼬리표만 꺼낸다"는 요령입니다. 지금은 통째로 따라 치면 됩니다.

검증:

Get-Content report.txt

시각, OS 정보, 프로세스 표, 서비스 수, 디스크 표가 순서대로 들어 있으면 성공입니다. 방금 당신은 1페이지짜리 시스템 보고서를 명령어만으로 만들었습니다.


4. 미션과 연습문제

미션 — 내 PC 건강검진표

report.txt를 더 좋게 다듬는 게 오늘의 미션입니다:

  1. 보고서 맨 위에 "내 PC 건강검진표 (작성자: 본인 이름)"라는 제목 줄을 넣으세요. (힌트: 새 파일로 다시 시작하되, 첫 줄부터 순서대로 쌓으면 됩니다)
  2. CPU 사용량 기준 상위 3개 프로세스 섹션을 추가하세요. (힌트: Sort-Object CPU -Descending)
  3. 중지된(Stopped) 서비스가 몇 개인지 세어서 기록하세요.
  4. 완성된 보고서를 Get-Content로 읽고, 가족이나 친구에게 "이게 뭘 보여 주는 파일인지" 설명해 보세요. 설명이 술술 나오면 진짜 이해한 겁니다.
  5. 이 파일을 어딘가에 보관해 두세요. 한 달 뒤 같은 명령으로 다시 만들어서 비교해 보는 게 미래의 과제입니다.

연습문제

문제 1. Get-ComputerInfo | Select-Object OsName, OsVersion에서 Select-Object의 역할은?

문제 2. 프로세스와 서비스의 차이, 그리고 보안에서 서비스가 특히 중요한 이유를 한 가지 말하세요.

문제 3. 보고서를 쌓다가 Out-File report.txt-Append를 빼먹으면 무슨 일이 생기나요?

문제 4. Get-PSDrive 결과에서 디스크 건강을 볼 때 가장 중요한 숫자는 무엇이며, 실무 경고 기준은?


5. 모범 답안과 완료 기준

미션 해설

# 1 — 새 파일로 다시 시작 (첫 줄은 -Append 없이)
"내 PC 건강검진표 (작성자: Lee)" | Out-File report.txt
Get-Date | Out-File report.txt -Append

# 2 — CPU 상위 3개 프로세스 섹션
"=== CPU 상위 3개 프로세스 ===" | Out-File report.txt -Append
Get-Process | Sort-Object CPU -Descending | Select-Object -First 3 ProcessName, CPU | Out-File report.txt -Append

# 3 — 중지된 서비스 수
"=== 중지된 서비스 수 ===" | Out-File report.txt -Append
(Get-Service | Where-Object {$_.Status -eq "Stopped"} | Measure-Object).Count | Out-File report.txt -Append

나머지 섹션(OS 정보, 메모리 상위, 디스크)은 3-5절의 명령을 그대로 이어붙이면 됩니다. 완성 후 Get-Content report.txt로 전체를 읽어 보세요 — 제목, 시각, 각 섹션이 순서대로 쌓여 있으면 완료입니다.

연습문제 해답

문제 1 해답. 수십 개 항목 중 보고 싶은 컬럼(속성)만 골라서 보여 줍니다. Step 3의 -First N(개수 자르기)과는 다른 재주 — "열 고르기"입니다.

문제 2 해답. 프로세스는 사용자가 켜고 끄는 프로그램, 서비스는 화면 없이 백그라운드에 상주하는 프로그램입니다. 서비스가 중요한 이유: 공격자가 악성 프로그램을 서비스로 등록하면 재부팅 후에도 자동으로 살아나기(지속성) 때문에, 침해 조사 시 "모르는 서비스"를 반드시 확인해야 합니다.

문제 3 해답. 그 명령의 출력으로 파일 전체가 덮어써져서, 그동안 쌓은 내용이 전부 사라집니다. 보고서처럼 "쌓아 올리는" 파일에는 항상 -Append를 붙여야 합니다. 기록은 덮어쓰는 게 아니라 쌓는 것입니다.

문제 4 해답. Free (GB) — 여유 공간입니다. 여유가 바닥나면 로그 기록·업데이트·프로그램 실행이 실패합니다. 실무 기준 예: "여유 20% 미만이면 경고."

완료 기준 체크리스트

  • [ ] Get-ComputerInfo에서 필요한 항목만 골라 볼 수 있다
  • [ ] 프로세스와 서비스의 차이를 설명할 수 있다
  • [ ] 실행 중 서비스만 필터링하고 개수를 셀 수 있다
  • [ ] Get-PSDrive로 디스크 여유를 확인할 수 있다
  • [ ] Out-File -Append로 여러 정보를 한 파일에 쌓을 수 있다
  • [ ] 미션: 1페이지 건강검진표를 완성했다

6. 흔한 실수와 해결

벽 1. Get-ComputerInfo가 너무 느리다 / 오류가 난다

정보를 긁어모으느라 수 초 걸리는 게 정상입니다. 간혹 특정 항목에서 오류를 낼 수 있는데, 필요한 정보라면 Select-Object로 좁혀서 다시 시도하세요. 꼭 이 명령이 아니어도 Get-CimInstance Win32_OperatingSystem 같은 대안이 있습니다 — 지금은 "대안이 있다" 정도로만.

벽 2. Out-File을 썼더니 앞 내용이 사라졌다

-Append를 빼먹으면 덮어쓰기입니다. Set-Content와 같은 파괴성. 한 번 덮어쓰는 실수를 해보는 것도 좋은 학습입니다.

벽 3. 표가 잘려서 보인다 (이름이 … 으로)

파워쉘이 화면 너비에 맞춰 컬럼을 자른 겁니다. | Format-Table -AutoSize를 붙이거나, Out-File로 저장하면 파일에는 전체가 기록됩니다. 화면 표시 문제지 데이터 손실이 아닙니다.

벽 4. 숫자가 너무 커서 감이 안 온다 (메모리/디스크)

바이트 단위라 그렇습니다. 대략의 환산만 알아두세요: 10억 바이트 ≈ 1GB. 나중에 /1GB로 나누는 요령을 배우지만, 지금은 "0이 9개쯤이면 GB 단위"라는 감각이면 충분합니다.

벽 5. 서비스 이름이 너무 많아서 뭐가 중요한지 모르겠다

전부 알 필요 없습니다. 오늘의 포인트는 "Running 목록을 꺼내는 명령"을 아는 것과 "모르는 건 검색하면 된다"는 태도입니다. 상주직 명단의 정체 파악은 Step 15(자동 실행 조사)에서 정식으로 훈련합니다.


7. 정리

오늘 배운 명령어

명령 얻는 정보
Get-ComputerInfo OS/하드웨어 종합 | Select-Object OsName, OsVersion
Get-Process 실행 중 프로그램 메모리/CPU 상위 N개 조합
Get-Service 상주 서비스 Where Status -eq Running
Get-PSDrive 디스크 용량 그대로
Get-Date 현재 시각 보고서 첫 줄
Out-File -Append 파일에 이어붙이기 보고서 쌓기

핵심 개념

개념 한 줄 요약
프로세스 사용자가 켠 프로그램 (출퇴근)
서비스 화면 없이 상주하는 프로그램 (상주직)
4대 자원 CPU/메모리/디스크/네트워크
베이스라인 "평소의 정상" 기록 — 이상 탐지의 기준

명령어보다 중요한 감각

"정찰은 공격자와 방어자가 공유하는 첫 스킬이다." 그리고 "정보가 많을수록, 처음부터 필요한 열만 뽑아라." 오늘 만든 보고서를 버리지 마세요 — 그것이 당신 컴퓨터의 첫 번째 건강검진표이자, 미래의 비교 기준입니다.

오늘의 3단 리듬 — "목록을 얻고 → 필요한 열을 고르고 → 개수나 합계를 낸다" — 은 파워쉘에서 재사용률이 가장 높은 조합입니다. 프로세스, 서비스, 파일, 네트워크 연결 — 대상이 바뀌어도 리듬은 그대로입니다. Step 6의 네트워크 분석에서 이 리듬을 그대로 다시 씁니다.


전부 체크되면 Step 5 완료입니다. 사이드바의 체크박스를 눌러 진도를 저장하세요.