※ 따라하실 분들을 위한 사전 정보 공유
저는 아래와 같은 상황에서 실습을 시작했음을 알려드립니다!
리눅스 : 정보처리기사, 네트워크관리사 취득하였으며 리눅스 환경에서QA를 약 1년간 한 경험이 있어서 VM으로 리눅스 환경 세팅하기나 아주 기본이되는 명령어 그리고 어느정도의 UI는 익숙한 베이스로 실습 진행했습니다
네트워크 : 컴공은 아니지만 공대 출신이라 기초적인 CS지식이 있는 상태임
1. 실습 목적
시스템 엔지니어 직무를 준비하면서 Ubuntu Linux 가상머신 환경에서 Nginx 웹 서버를 설치하고 운영하는 실습을 진행했다.
단순히 웹 서버를 설치하는 것에 그치지 않고, 서비스 상태와 포트, HTTP 응답을 확인하고 서비스를 중지·복구하면서 각각의 변화가 어떻게 나타나는지 확인했다.
또한 HTML 파일을 수정해 웹 서버가 제공하는 페이지의 일부를 변경하고, 서비스 로그와 설정 파일 검사 명령어를 사용해 서버 운영에 필요한 기초 작업을 익혔다.
이번 실습의 주요 목표는 다음과 같다.
- Ubuntu에서 Nginx 웹 서버 설치 및 실행
- Linux 서비스 상태 확인과 중지·복구
- 포트 80과 HTTP 응답의 관계 이해
- 서비스 로그 확인 및 Nginx 설정 검증
2. 실습 환경
| 운영체제 | Ubuntu Linux |
| 가상머신 | 가상머신 UTM(QEMU) |
| 호스트 환경 | macOS |
| 웹 서버 | Nginx |
3. Nginx 설치 및 실행
먼저 Ubuntu 패키지 관리자를 이용해 패키지 목록을 갱신하고 Nginx를 설치했다.
sudo apt update
sudo apt install nginx -y
✔️ 참고 : install 할 때 -y옵션 해두면 y안눌러도되고 편함
설치 후 Nginx 서비스를 실행하고, 시스템 부팅 시 자동으로 시작하도록 설정했다.
sudo systemctl enable --now nginx
명령어 정리
- apt update: 패키지 저장소의 패키지 목록 갱신
- apt install nginx: Nginx 패키지 설치
- systemctl enable: 부팅 시 서비스 자동 시작 설정
- systemctl --now: 서비스 자동 시작 설정과 현재 실행을 함께 수행
실습 도중 가상머신을 다시 시작한 뒤 Nginx 서비스와 패키지가 없는 상태를 확인해 재설치 과정을 진행했다. (아직도 어리둥절함) 이를 통해 가상머신의 상태가 예상과 다를 때 설치 여부부터 점검해야 한다는 점도 경험했다.
트러블슈팅: 재부팅 후 설치한 Nginx가 사라진 문제 (실습 따라하시는 분들은 스킵하셔도 됩니다)
증상
`mj` 계정으로 Ubuntu에 Nginx를 설치하고 실습을 진행하던 중, 가상머신을 재부팅하자 설치했던 Nginx와 작업 내용이 모두 사라져 있었다.
재부팅 후에는 `mj` 계정으로 로그인되었고, 시스템은 막 설치를 끝낸 초기 상태처럼 보였다.
이상했던 점
내가 만든 계정은 `mj`인데, 작업 중 터미널의 호스트네임은 `ubuntu`였다.
- 호스트네임이 기본값일 수도 있다는 설명을 보고 그냥 넘어가며 실습을 이어갔다.
- 재부팅한 뒤에야 실습 때의 시스템과 재부팅 후의 시스템이 다른 환경이라는 걸 알게 되었다.
확인한 내용
- 계정이 두 개 존재하는지 확인했다. 계정 문제는 아니었다.
- `mj` 계정의 홈 디렉터리와 설치된 패키지를 확인했지만, 이전 작업 흔적은 없었다.
- 결과적으로 시스템 전체가 초기화된 상태와 같았다.
추정 원인
설치 ISO의 라이브(Live) 환경에서 작업했을 가능성이 높다.
- 라이브 환경은 디스크가 아니라 메모리(RAM) 위에서 동작하므로, 설치한 패키지와 바꾼 설정이 재부팅하면 모두 사라진다.
- 이때 호스트네임이 `ubuntu` 같은 기본값으로 보이는 경우가 많다.
- 재부팅 후 `mj`로 로그인된 시스템은 설치 과정에서 새로 만들어진 실제 시스템이었고, 그곳에는 내가 설치한 Nginx가 없었다.
호스트네임이 `ubuntu`인 것만으로는 라이브 환경이라고 단정할 수 없으므로, 어디까지나 정황상 가장 유력한 추정이다.
조치
- 실제로 설치된 시스템에서 Nginx를 처음부터 다시 설치하고 이후 실습을 진행했다.
- 가상머신에 연결된 설치 ISO를 해제했다.
배운 점
1. 작업을 시작하기 전에 지금 어떤 환경에서 작업하는지`whoami`, `hostnamectl`, `findmnt /`로 먼저 확인해야 한다.
접속한 서버가 맞는지 확인하는 습관은 실제 운영 환경에서도 중요하다.
2. 상태가 예상과 다르면 설정을 의심하기 전에 환경 자체(어디에 설치했는지, 재부팅 후에도 유지되는지)부터 확인해야 한다.
3. 설치한 뒤에는 한 번 재부팅해서 서비스가 부팅 후에도 올라오는지 검증하는 것이 좋다.
이번 실습에서 `enable`로 자동 시작을 설정하는 이유도 이것과 연결된다.
4. 실습 환경이 망가질 때를 대비해 가상머신 복제본(스냅샷)을 만들어 두는 것이 좋다.
4. Nginx 서비스 상태 확인
Nginx가 정상적으로 실행되고 있는지 확인했다.
sudo systemctl status nginx
서비스 상태를 간단히 확인할 때는 다음 명령어도 사용할 수 있다.
systemctl is-active nginx
systemctl is-enabled nginx
실습에서 확인한 상태는 다음과 같았다.
- active: 서비스가 실행 중인 상태
- enabled: 시스템 부팅 시 서비스가 자동으로 시작되도록 설정된 상태
두 상태는 서로 다른 의미를 가진다. 서비스가 현재 실행 중이더라도 부팅 시 자동 시작이 설정되어 있지 않을 수 있으므로 각각 확인하는 것이 중요하다.
5. 포트 80 리스닝 상태 확인
Nginx가 실행 중일 때 어떤 포트에서 요청을 기다리고 있는지 확인했다.
sudo ss -lntp
주요 옵션의 의미는 다음과 같다.
- -l: 리스닝 중인 소켓 표시
- -n: 포트와 주소를 숫자로 표시
- -t: TCP 소켓 표시
- -p: 관련 프로세스 정보 표시
실습에서는 Nginx가 다음 주소에서 요청을 기다리는 것을 확인했다.
0.0.0.0:80
[::]:80
각 주소의 의미는 다음과 같다.
- 0.0.0.0:80: 모든 IPv4 네트워크 인터페이스의 포트 80에서 수신
- [::]:80: IPv6 와일드카드 주소의 포트 80에서 수신
이를 통해 Nginx 프로세스가 실행 중인지 확인하는 것뿐 아니라, 실제로 네트워크 연결을 받을 준비가 되어 있는지도 점검할 수 있다는 점을 배웠다.
6. HTML 파일 수정
Nginx 설치 후 기본 웹 페이지를 구성하는 HTML 파일을 확인하고 수정했다.
실습에서 확인한 파일 경로는 다음과 같다.
/var/www/html/index.nginx-debian.html
해당 파일의 내용을 변경했다.
실습 과정을 따라하는중이시라면 이부분은 스킵해도 괜찮음, 그냥 해보고싶어서 했음

7. Nginx 서비스 중지에 따른 장애 상황 확인
이번 실습에서 중요한 부분은 Nginx 서비스를 의도적으로 중지하고, 그에 따른 변화를 확인한 것이다.
7-1. 서비스 중지
sudo systemctl stop nginx
서비스 상태를 확인했다.
systemctl is-active nginx
서비스가 중지된 상태에서는 inactive가 반환되는 것을 확인했다.
이후 포트 상태를 다시 확인했을 때 Nginx가 사용하던 포트 80의 리스너가 사라졌다.
7-2. HTTP 요청 확인
서비스 중지 상태에서 로컬 주소와 가상머신 IP 주소로 HTTP 요청을 보냈다.
curl -I http://localhost
curl -I http://192.168.64.2
두 요청 모두 실패했다.
이는 Nginx 서비스가 중지되어 HTTP 요청을 처리할 수 없는 상태였기 때문이다.
7-3. 서비스 복구
다음 명령어로 Nginx를 다시 실행했다.
sudo systemctl start nginx
이후 동일한 요청을 다시 실행했다.
curl -I http://localhost
curl -I http://192.168.64.2
두 요청에서 다음과 같은 응답을 확인했다.
HTTP/1.1 200 OK
Server: nginx/1.28.3
HTTP/1.1 200 OK는 HTTP 요청이 정상적으로 처리되었음을 의미한다.
실습 결과
확인 항목Nginx 중지Nginx 재실행
| 서비스 상태 | inactive | 실행 상태 |
| 포트 80 리스너 | 사라짐 | 다시 확인 가능 |
| curl localhost | 요청 실패 | 200 OK |
| curl 192.168.64.2 | 요청 실패 | 200 OK |
이번 실습을 통해 서비스 상태, 포트 리스닝, HTTP 응답이 서로 연결되어 있다는 점을 직접 확인했다.
단순히 서비스가 실행 중인지 확인하는 것만으로는 충분하지 않으며, 실제 요청이 정상적으로 처리되는지까지 확인하는 과정이 중요하다는 것을 배웠다.
8. 서비스 로그 확인
서비스의 실행 및 중지 기록을 확인하기 위해 journalctl 명령어를 사용했다.
sudo journalctl -u nginx -n 20
명령어의 의미는 다음과 같다.
- journalctl: systemd 저널 로그 조회
- -u nginx: Nginx 서비스 관련 로그만 조회
- -n 20: 최근 로그 20개 표시
서비스 로그를 확인하면 서비스 시작과 종료 등의 이벤트를 파악할 수 있다. 장애가 발생했을 때는 관련 시간대의 로그를 확인해 원인을 추적하는 데 활용할 수 있다.
다만 systemd 저널과 Nginx 자체 로그 파일은 서로 다른 로그 소스이므로 필요에 따라 각각 확인해야 한다.
9. Nginx 설정 파일 검증
마지막으로 Nginx 설정 파일의 문법을 검사했다.
sudo nginx -t
실제 실행 결과는 다음과 같았다.
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
위 결과를 통해 Nginx 설정 파일 검사가 정상적으로 완료되었음을 확인했다.
설정 파일을 변경한 경우 서비스를 재시작하거나 설정을 다시 적용하기 전에 nginx -t로 검증하는 습관이 중요하다.
단, 설정 검사가 성공했다고 해서 모든 네트워크 연결이나 웹 서비스 기능까지 정상이라고 단정할 수는 없다. 서비스 상태와 실제 HTTP 응답도 함께 확인해야 한다.
10. 이번 실습에서 배운 점
이번 실습을 통해 Linux 서버 운영에서 사용하는 여러 확인 방법을 직접 경험했다.
첫째, systemctl을 이용해 서비스를 실행하고 중지할 수 있으며, 현재 서비스 상태와 부팅 시 자동 시작 설정을 구분해 확인할 수 있다는 점을 배웠다.
둘째, ss로 포트 리스닝 상태를 확인하고 curl로 HTTP 응답을 검사하면서 서비스가 실제로 요청을 처리할 수 있는지 검증했다.
셋째, 서비스를 중지했을 때 발생하는 변화를 관찰하고 다시 실행해 정상 응답을 복구함으로써 서비스 장애 상황을 진단하는 기본적인 흐름을 익혔다.
넷째, journalctl로 서비스 로그를 확인하고 nginx -t로 설정 파일을 검증하면서 장애 분석과 설정 변경 시 필요한 기본 점검 방법을 익혔다.
시스템 엔지니어는 단순히 서버를 설치하고 실행하는 것에서 끝나는 것이 아니라, 서비스 상태와 로그, 포트, 응답 결과를 종합적으로 확인해 문제를 진단해야 한다는 점을 배웠다.
11. 핵심 명령어 정리
# 패키지 목록 갱신 및 Nginx 설치
sudo apt update
sudo apt install nginx -y
# Nginx 실행 및 부팅 시 자동 시작 설정
sudo systemctl enable --now nginx
# 서비스 상태 및 자동 시작 설정 확인
systemctl is-active nginx
systemctl is-enabled nginx
# 서비스 중지 및 재실행
sudo systemctl stop nginx
sudo systemctl start nginx
# 포트 리스닝 상태 확인
sudo ss -lntp
# HTTP 응답 확인
curl -I http://localhost
curl -I http://192.168.64.2
# Nginx 서비스 로그 확인
sudo journalctl -u nginx -n 20
# Nginx 설정 파일 검증
sudo nginx -t
마무리
이번 실습에서는 Ubuntu 가상머신에 Nginx 웹 서버를 설치하고, 서비스 상태와 포트 리스닝을 확인했다. 또한 서비스를 중지하고 복구하는 과정을 통해 HTTP 요청 결과가 어떻게 달라지는지 직접 확인했다.
앞으로도 명령어를 단순히 암기하는 데 그치지 않고, 실제 서버 환경에서 명령어를 실행하고 결과를 분석하면서 Linux 시스템 운영과 장애 대응 역량을 쌓아 나갈 계획이다.
'실습 따라하기 > 리눅스' 카테고리의 다른 글
| [Linux 실습 #3] Ubuntu 서버 프로세스·포트 확인부터 nginx 접속 장애 재현 및 복구하기 (0) | 2026.10.23 |
|---|---|
| [Linux/PostgreSQL] Ubuntu에서 PostgreSQL 구축 및 DBMS 제약조건, 트랜잭션 검증 (2) | 2026.10.20 |
댓글