이번 글은 멀티클라우드 수업 과정에서 진행한 리눅스 웹 서버 구축 실습을 정리한 기록이다. 단순히 Apache를 설치하고 웹 페이지를 띄우는 수준을 넘어, 네트워크 설정부터 방화벽, 서비스 제어, 보안 정책까지 서버 운영에 필요한 핵심 흐름을 직접 경험하는 것이 이번 실습의 목적이었다. 리눅스 서버 환경은 대부분 GUI 없이 운영되기 때문에 명령어 하나하나의 의미를 이해하지 못하면 문제가 발생했을 때 원인을 찾기 어렵다. 이 글에서는 nmcli를 활용한 IP 설정, firewall-cmd를 통한 포트 제어, systemctl을 이용한 서비스 관리, DocumentRoot 변경, SELinux 설정까지 실제 실습에서 다룬 내용을 순서대로 정리한다. 리눅스 기반 서버 운영의 기본 구조를 이해하고자 하는 분들에게 하나의 기준 자료가 되기를 바란다.

리눅스 웹 서버 실습의 목적과 전체 흐름
리눅스 웹 서버 구축 실습은 단순한 명령어 암기가 아니라, 서버가 실제로 외부 요청을 받아 응답하기까지 어떤 단계를 거치는지 이해하는 데 초점이 맞춰져 있었다. 서버 운영은 크게 네트워크 설정, 보안 설정, 서비스 설치 및 실행, 접근 제어라는 흐름으로 구성된다. 이 중 어느 하나라도 제대로 설정되지 않으면 웹 서버는 정상적으로 동작하지 않는다. 실습을 통해 느낀 점은 서버 문제의 상당수가 애플리케이션 자체가 아니라 네트워크나 방화벽, 보안 정책에서 발생한다는 사실이었다. 이러한 관점에서 이번 실습은 클라우드 환경에서도 그대로 적용 가능한 기본기를 다지는 과정이었다.
nmcli를 활용한 리눅스 서버 IP 설정
리눅스 서버 환경에서는 네트워크 설정을 명령줄에서 직접 다루는 경우가 많다. 이번 실습에서는 NetworkManager를 제어하는 nmcli 명령어를 사용해 IP 주소를 설정했다. nmcli는 서버 환경에서 고정 IP 설정, 게이트웨이 지정, DNS 구성 등을 일괄적으로 관리할 수 있는 도구다. 특히 중요한 점은 IP 정보를 수정한 후 네트워크 연결을 반드시 재시작해야 설정이 실제로 반영된다는 것이다. 이 과정을 놓치면 서버 자체에서는 설정이 완료된 것처럼 보이지만 외부에서는 접속이 되지 않는 문제가 발생한다. IP 설정은 모든 서버 접근의 출발점이라는 점을 다시 한 번 체감한 단계였다.
방화벽 설정과 포트 제어의 중요성
웹 서버가 정상적으로 실행 중이어도 외부에서 접속이 되지 않는 경우가 있다. 이때 가장 먼저 확인해야 할 요소가 방화벽 설정이다. 리눅스에서는 기본적으로 방화벽이 활성화되어 있으며, 명시적으로 허용된 포트만 외부 통신이 가능하다. 실습에서는 firewall-cmd 명령어를 사용해 8080 포트를 허용했다. 포트가 열려 있지 않으면 Apache가 정상 실행 중이어도 브라우저에서는 접속이 불가능하다. 이 과정을 통해 서비스 장애를 진단할 때 애플리케이션보다 먼저 보안 설정을 점검해야 한다는 원칙을 자연스럽게 이해할 수 있었다.
Apache(httpd) 설치와 systemctl 서비스 관리
웹 서버 소프트웨어로는 Apache(httpd)를 사용했다. dnf 패키지 관리자를 통해 httpd를 설치한 후, systemctl 명령어로 서비스를 제어했다. 서비스 시작, 재시작, 상태 확인, 부팅 시 자동 실행 설정은 서버 운영에서 반드시 익혀야 할 기본 명령이다. 특히 실습을 통해 명확해진 부분은 서비스 시작(start)과 부팅 시 자동 실행(enable)은 서로 다른 개념이라는 점이다. 서버를 재부팅했을 때 서비스가 자동으로 올라오지 않는 문제는 운영 환경에서 자주 발생하는 실수 중 하나이기 때문에, 이 구분은 매우 중요하다.
웹 문서 루트(DocumentRoot) 변경과 권한 개념
Apache의 기본 웹 문서 루트는 /var/www/html 경로다. 이번 실습에서는 이를 변경해 특정 사용자 홈 디렉토리 하위 경로를 웹 문서 루트로 사용하는 방식으로 구성했다. 사용자 joe의 홈 디렉토리 아래 web-home 디렉토리를 생성하고, 해당 경로를 웹 문서 루트로 지정했다. 이 과정은 단순한 경로 변경을 넘어 권한 관리와 보안 구조를 이해하는 데 중요한 실습이었다. 웹 서버가 접근할 수 있는 디렉토리와 그렇지 않은 디렉토리를 구분하는 것은 실무 환경에서 매우 중요한 요소다.
zip 도구 설치와 웹 템플릿 배포 과정
웹 서버의 정상 동작을 확인하기 위해 Bootstrap 기반의 무료 웹 템플릿을 배포했다. 리눅스 서버에는 zip 및 unzip 도구가 기본 설치되어 있지 않은 경우가 많기 때문에 dnf를 통해 관련 패키지를 설치한 후 압축 파일을 해제했다. 이 과정을 통해 웹 서버의 역할이 결국 정적인 HTML, CSS, 이미지 파일을 클라이언트에게 전달하는 것이라는 점을 다시 한 번 명확히 인식할 수 있었다. 서버 설정이 아무리 복잡해도 결과물은 브라우저에 보이는 화면이라는 점이 인상적이었다.
Apache 포트 변경과 접속 테스트
Apache의 기본 포트는 80번이지만, 이번 실습에서는 8080 포트를 사용했다. 포트 변경 후에는 Apache 설정 파일 수정, 방화벽 포트 허용, 브라우저 접속 테스트라는 세 단계를 반드시 함께 확인해야 한다. 이 중 하나라도 누락되면 접속 오류가 발생한다. 실제로 브라우저에서 IP 주소와 포트를 함께 입력해 접속 테스트를 진행하면서 서버 설정이 정상적으로 완료되었는지 최종 확인했다. 포트 개념은 클라우드 환경에서도 동일하게 적용되기 때문에 반드시 정확히 이해해야 할 부분이다.
SELinux 설정과 보안 정책의 이해
실습 과정에서 가장 주의가 필요했던 부분은 SELinux 설정이었다. 파일 권한과 Apache 설정이 모두 정상이어도 SELinux 정책이 허용되지 않으면 웹 접근이 차단될 수 있다. vi 에디터를 사용해 설정 파일을 수정하고, 웹 서버가 사용자 홈 디렉토리의 파일에 접근할 수 있도록 정책을 조정했다. SELinux는 처음 접하면 어렵게 느껴지지만, 리눅스의 보안 구조를 이해하는 데 매우 중요한 요소다. 보안을 끄는 것이 아니라, 정책을 이해하고 조정하는 방향이 바람직하다는 점을 실습을 통해 체감했다.
실습을 통해 정리한 핵심 포인트
이번 리눅스 웹 서버 구축 실습을 통해 서버 운영의 기본 원칙을 정리할 수 있었다. IP 설정은 모든 접근의 출발점이며, 방화벽 설정은 서비스 문제보다 먼저 확인해야 한다. systemctl enable 설정은 운영 환경에서 필수이며, 웹 문서 루트 변경 시 권한과 보안을 함께 고려해야 한다. 포트 변경 시에는 서비스 설정과 방화벽을 동시에 점검해야 하며, SELinux는 보안이자 동시에 주요 장애 원인이 될 수 있다. 이러한 원칙들은 클라우드 환경에서도 그대로 적용된다.
마무리하며
이번 실습은 단순한 리눅스 명령어 학습이 아니라, 실제 서버 운영 환경의 흐름을 한 번에 경험하는 과정이었다. 웹 서버는 설치보다 운영이 중요하며, 작은 설정 하나가 전체 서비스에 큰 영향을 미칠 수 있다는 점을 몸소 느낄 수 있었다. 앞으로 AWS, NCP, Azure와 같은 클라우드 환경에서도 이와 같은 기본 구조를 이해하고 있다면 서버를 훨씬 안정적으로 운영할 수 있을 것이다. 이 글이 리눅스 웹 서버를 처음 접하는 분들에게 하나의 실전 정리 자료가 되기를 바란다.
'서버 구축·실습' 카테고리의 다른 글
| Azure 부하분산기 실습 — 새로고침할 때마다 서버1, 서버2가 번갈아 나오는 구조 직접 만들어봤다 (0) | 2026.02.23 |
|---|---|
| Azure 첫 실습 — AWS만 하던 사람이 느낀 충격적인 차이점 (0) | 2026.02.19 |
| 리눅스 FTP 서버 구축 실습 정리 – 사용자 권한 설계부터 보안 사고 대응 관점까지 (0) | 2026.01.26 |
| 리눅스 NFS 서버 구축 실습 정리: exportfs 옵션 이해부터 nobody 권한 매핑까지 (0) | 2026.01.24 |
| 리눅스 웹 서버 구축 실습 기록 – 방화벽과 Apache를 직접 설정해 보며 (0) | 2026.01.24 |