내 PC와 실습 VM 구분하기
65분 안팎
학습 목표
systemd가 PID 1인 Linux VM과 실습망을 준비하고 CPU·메모리·디스크 역할을 구성도에 표시합니다.
개념
운영 실습실을 먼저 그립니다
시스템 담당자는 명령을 빨리 입력하는 사람보다 명령이 어느 장비에 영향을 주는지 설명하는 사람이어야 합니다. 이번 프로젝트는 Python 웹 앱을 운영할 작은 Linux 실습실입니다. 아직 앱이나 서비스를 설치하지 않습니다. 먼저 개인 PC와 실습 가상 머신의 경계를 그리고, 일반 사용자가 자료를 쌓을 공간을 확보합니다. 다음 모듈에서는 이 공간의 계정과 접근 권한을 나눕니다.
호스트는 가상화 프로그램을 실행하는 개인 PC이며 게스트는 그 프로그램 안에서 실행되는 Linux 운영체제입니다. 터미널 창의 모양이 같아도 두 셸은 서로 다른 파일과 프로세스를 봅니다. 호스트의 홈 디렉터리와 게스트의 홈 디렉터리가 같은 위치라는 보장도 없습니다. 명령을 실행하기 전에 창 제목이나 프롬프트만 믿지 말고 uname -s, id -u와 현재 위치를 함께 확인합니다.
이 모듈의 다운로드 실습은 ZIP을 각기 새 폴더에 풀고 그 폴더에서 bash check.sh로 검사합니다. task.sh가 수정 대상이고 check.sh는 제출 기준입니다. starter는 일부 준비만 되어 결과 검사가 실패합니다. solution은 구현을 비교하는 자료입니다. 셸 파일은 Bash로 실행하며 공백 경로를 포함합니다. VM 확인 실습과 미션은 Linux 게스트에서 검사하고, 나머지 파일 실습은 Bash와 Python 3가 있는 환경에서도 연습할 수 있습니다.
VM이 제공하는 자원을 구분합니다
가상 머신은 가상 CPU, 메모리, 디스크와 네트워크 인터페이스를 게스트에 제공합니다. vCPU는 게스트 명령을 실행하는 자원이며 호스트의 실행 자원을 사용합니다. 표시된 vCPU 개수가 물리 코어 개수나 성능 배수를 보장하지 않습니다. 처음에는 작은 할당으로 시작하고 호스트에 다른 작업을 위한 여유를 남깁니다. 실제 할당량은 가상화 도구 설정 화면에서 기록합니다.
메모리는 실행 중인 코드와 데이터에 필요한 공간입니다. 게스트 RAM을 과하게 할당하면 호스트도 메모리가 부족해져 실습 전체가 느려질 수 있습니다. 가상 디스크는 파일과 설정을 저장하며 일반적인 전원 종료 후에도 자료가 남습니다. RAM 용량과 디스크 용량은 서로 대체하지 못합니다. 디스크를 늘렸다는 사실만으로 실행 중 메모리 부족 문제가 해결되지는 않습니다.
구성도에는 수치뿐 아니라 역할을 적습니다. 예를 들어 vCPU는 명령 실행, RAM은 실행 중 데이터, 가상 디스크는 설정과 증거 보관이라고 씁니다. 가상 디스크의 최대 크기와 호스트에서 지금 차지하는 크기는 이미지 형식에 따라 다를 수 있습니다. 둘을 섞지 말고 측정 위치를 표시합니다. 이번 자동 검사는 구성도 필드 누락을 잡으며 실제 자원 할당의 정확성은 설정 화면과 사람이 대조합니다.
실습망과 접속 경계를 정합니다
개인 PC의 가상화 도구에서 systemd를 초기 프로세스로 사용하는 Linux 배포판 VM을 준비합니다. 도구별 생성 화면은 달라 이 레슨은 버튼 이름을 고정하지 않습니다. 설치 뒤 게스트 콘솔에서 일반 사용자로 로그인하고 PID 1 이름을 확인합니다. Docker 컨테이너에서 Linux라는 결과만 얻었다고 VM 준비가 끝난 것은 아닙니다. 이 트랙은 뒤에서 systemd 서비스를 관리하기 때문에 PID 1 조건이 필요합니다.
호스트 전용망은 호스트와 실습 게스트 사이의 연습 연결을 구성하는 선택지입니다. 외부에서 들어오는 포트 전달은 설정하지 않습니다. 패키지 내려받기에 별도 NAT 인터페이스가 필요하다면 그 역할도 구성도에 따로 적습니다. NAT는 모든 격리를 보장하는 보안 장치가 아니므로 주소와 연결 범위를 직접 확인합니다. VM을 운영망에 붙이거나 공유기의 공개 포트를 열 필요가 없습니다.
게스트의 ip -brief address에서 인터페이스 이름과 주소를 확인합니다. 127.0.0.1은 게스트 자신의 루프백 주소이며 호스트에서 그 주소를 사용하면 호스트 자신을 가리킵니다. 호스트에서 접속할 주소는 실습 인터페이스에 부여된 게스트 주소입니다. 여러 주소가 있으면 어느 인터페이스를 통해 실습할지 기록합니다. 이 레슨에서는 SSH 설정이나 방화벽 변경까지 진행하지 않습니다.
관측과 계획을 다른 칸에 남깁니다
계획한 VM 구성과 지금 관측한 결과는 다를 수 있습니다. evidence에는 확인한 커널, UID, PID 1과 구성도를 남깁니다. UID 0은 root이므로 일반 사용자 조건에 맞지 않습니다. sudo로 모든 명령을 감싸면 파일 소유자까지 바뀌어 다음 모듈 실습을 흐릴 수 있습니다. VM 설치에 필요한 관리자 작업과 설치 후 일반 사용자 파일 작업을 구분합니다.
PID 1 확인은 cat /proc/1/comm으로 합니다. 이 파일은 Linux에서 현재 보이는 초기 프로세스 이름을 제공합니다. systemd가 나오면 이번 트랙의 서비스 관리 전제를 충족하는 한 항목을 확인한 것입니다. 이것만으로 네트워크 연결이나 서비스 상태까지 검증했다고 쓰지 않습니다. uname -s가 Darwin이면 현재 창은 macOS이므로 VM 콘솔로 돌아가야 합니다.
구성도는 다른 담당자가 경계를 재현할 수 있어야 합니다. 호스트와 게스트의 구분, 게스트 주소, 실습망 종류, 자원 역할, 운영망에 연결하지 않는 범위를 적습니다. 템플릿에 있는 문장을 실제 확인 없이 완료 기록으로 복사하지 않습니다. 설치나 명령을 실행하지 못한 부분은 미확인이라고 남깁니다. vm.txt의 관측값과 topology.json의 설명을 맞추고 topology.md에는 사람이 읽을 그림과 근거를 씁니다.
오류를 환경 안내로 읽습니다
check.sh가 Linux VM 안에서 실행하라는 메시지를 내면 코드부터 고칠 문제가 아닙니다. 커널이 다른 환경에서 검사했는지 확인합니다. PID 1은 systemd여야 한다는 메시지는 컨테이너나 다른 초기 시스템일 수 있다는 신호입니다. 일반 사용자로 실행하라는 메시지에는 현재 UID를 확인한 뒤 게스트의 일반 계정으로 로그인합니다. 테스트를 통과시키려고 검사 조건을 지우면 이후 서비스 실습의 전제가 사라집니다.
No such file or directory가 /proc/1/comm에 대해 나오면 Linux 게스트 여부와 해당 경로를 먼저 확인합니다. Permission denied가 작업 파일에 대해 나오면 쓰려는 경로와 소유자를 확인하고 홈 아래 새 실습 폴더로 시작합니다. 가상 머신을 새로 만들기 전에 어느 조건이 어긋났는지 좁힙니다. VM 검사 결과는 이 맥에서 실행 검증하지 않으며 출력 예시를 성공 기록으로 싣지 않습니다.
다음 작업으로 연결합니다
완료 기준은 Linux를 설치했다는 한 문장이 아니라 경계와 실행 주체를 증거로 설명하는 것입니다. 외부 연결이 필요 없는 실습망에서 일반 사용자 작업이 가능하고, CPU·메모리·디스크의 역할을 구분한 자료를 남깁니다. 더 읽기의 CPU 장은 실행 자원 해석을 확장합니다. 이번에는 명령 파이프라인이나 분기 예측을 다시 설명하지 않고 VM 자원 기록에 필요한 경계만 사용합니다.
따라하기
호스트와 게스트 확인
VM 콘솔에서 실행합니다. 이 맥에서 실행하지 않은 명령이므로 출력은 싣지 않습니다. Linux인지, UID가 0이 아닌지, PID 1이 systemd인지 직접 확인합니다.
uname -s
id -u
cat /proc/1/comm실습 인터페이스와 자원 기록
Linux VM에서 실행하고 결과를 구성도와 대조합니다. 주소·RAM·디스크 표시는 환경마다 다릅니다. 가상화 관리자에서 할당량도 확인합니다.
ip -brief address
getconf _NPROCESSORS_ONLN
free -m
df -h .관측할 항목 분류
파일에 남길 자원 역할 목록을 만듭니다. 이 단계는 Bash 파일 작업만 실행한 결과입니다.
mkdir -p evidence
printf "cpu=명령 실행
memory=실행 중 데이터
disk=파일 보존
" > evidence/roles.txt
cat evidence/roles.txt실행 결과
cpu=명령 실행 memory=실행 중 데이터 disk=파일 보존
VM 검사 실행
다운로드한 starter 폴더를 VM으로 옮기고 task.sh를 완성한 후 실행합니다. VM 조건 오류와 구성도 누락 오류를 구분하고 실제 주소는 수동 대조합니다.
bash check.sh확인 문제
실습
Linux 게스트에서 VM 관측값과 구성도를 완성합니다. README의 VM 준비 안내를 먼저 읽고 task.sh를 구현합니다. 구성도의 주소·자원은 실측값으로 바꾸며 external 검증은 VM에서 수행합니다.
실행 명령
bash check.sh
기대 결과
VM에서 PASS vm 출력과 구성도 수동 대조 완료
모범 답안
모범 답안 내려받기더 읽기
면접 질문
- 점검 스크립트가 실패를 알리는 방식을 설명합니다.