카테고리 없음

리눅스 서버 완벽 가이드: 초보자를 위한 구축부터 운영·보안·장애 대응까지

14722 2026. 8. 16. 19:22

 

리눅스 서버는 웹사이트, 쇼핑몰, API 서버, 데이터베이스, 클라우드 서비스 등 다양한 IT 환경에서 사용되고 있습니다. 특히 AWS EC2와 같은 클라우드 환경에서는 리눅스 서버를 직접 생성하고 SSH로 접속하여 웹 서버와 데이터베이스를 구성하는 경우가 많습니다.

하지만 처음 리눅스 서버를 접하는 사람에게는 SSH 접속, 사용자 권한, 파일 관리, 서비스 실행, 방화벽, 로그 확인 등 여러 가지 개념이 어렵게 느껴질 수 있습니다.

이번 글에서는 리눅스 서버를 처음 구축하는 단계부터 기본적인 운영과 보안, 장애 발생 시 점검해야 할 항목까지 하나의 흐름으로 정리해보겠습니다.


1. 리눅스 서버란 무엇인가?

리눅스 서버는 Linux 운영체제를 기반으로 네트워크 서비스를 제공하는 서버입니다.

웹 서버에서는 Nginx나 Apache를 실행하고, 데이터베이스 서버에서는 MySQL이나 MariaDB를 실행할 수 있습니다. 또한 Docker를 설치하여 여러 애플리케이션을 컨테이너 환경에서 운영하는 것도 가능합니다.

대표적인 리눅스 배포판은 다음과 같습니다.

  • Ubuntu
  • Debian
  • Rocky Linux
  • AlmaLinux
  • Red Hat Enterprise Linux
  • Fedora

실무와 클라우드 환경에서는 Ubuntu 계열의 리눅스 서버도 많이 사용되기 때문에 서버를 처음 공부한다면 Ubuntu를 기준으로 기본적인 명령어와 서버 관리 방법을 익혀두는 것이 좋습니다.


2. 리눅스 서버의 기본 구조 이해하기

리눅스 서버를 제대로 관리하려면 먼저 파일 시스템 구조를 이해해야 합니다.

대표적인 디렉터리는 다음과 같습니다.

/etc

운영체제와 각종 프로그램의 설정 파일이 저장되는 디렉터리입니다.

Nginx, SSH 등의 설정 파일을 수정할 때 자주 접근하게 됩니다.

/var

로그와 캐시, 웹 서버 데이터 등 지속적으로 변경되는 파일이 저장되는 공간입니다.

서버 장애를 분석할 때 /var/log 아래의 로그를 자주 확인합니다.

/home

일반 사용자 계정의 홈 디렉터리입니다.

/root

root 사용자의 홈 디렉터리입니다.

/tmp

프로그램에서 사용하는 임시 파일이 저장되는 공간입니다.

/usr

시스템에서 사용하는 프로그램과 라이브러리 등이 저장됩니다.

리눅스 서버를 관리하다 보면 /etc, /var, /home 디렉터리를 특히 자주 사용하게 됩니다.


3. SSH를 이용해 리눅스 서버 접속하기

원격 서버를 관리할 때 가장 기본적으로 사용하는 방법이 SSH입니다.

SSH를 사용하면 자신의 컴퓨터에서 원격 리눅스 서버에 접속하여 명령어를 실행할 수 있습니다.

일반적인 접속 형식은 다음과 같습니다.

ssh 사용자명@서버IP

예를 들어 Ubuntu 서버에 접속한다면 다음과 같은 형태가 됩니다.

ssh ubuntu@203.0.113.10

실제 사용할 때는 자신의 서버 IP 주소와 사용자 계정을 입력해야 합니다.

AWS EC2를 사용하는 경우에는 인스턴스 생성 과정에서 설정한 키 페어를 이용해 SSH 인증을 진행하는 경우가 일반적입니다.

SSH 접속이 되지 않는다면 다음 항목부터 확인해야 합니다.

  • 서버가 실행 중인지 확인
  • 서버 IP 주소 확인
  • SSH 포트 확인
  • AWS 보안 그룹 확인
  • 리눅스 방화벽 확인
  • SSH 키 파일 권한 확인
  • 사용자 계정 확인

서버에 접속하는 것부터 안정적으로 할 수 있어야 이후의 서버 관리 작업도 진행할 수 있습니다.


4. 리눅스 서버에서 자주 사용하는 기본 명령어

리눅스 서버는 대부분 터미널에서 명령어를 이용해 관리합니다.

현재 작업 중인 디렉터리를 확인하려면 pwd를 사용합니다.

pwd

현재 디렉터리의 파일을 확인하려면 다음 명령어를 사용합니다.

ls

숨김 파일을 포함한 상세 정보를 확인하려면 다음과 같이 입력합니다.

ls -al

디렉터리를 이동할 때는 cd를 사용합니다.

cd /etc

상위 디렉터리로 이동하려면 다음과 같습니다.

cd ..

디렉터리를 생성하려면:

mkdir project

파일을 복사하려면:

cp original.txt backup.txt

파일을 이동하거나 이름을 변경하려면:

mv old.txt new.txt

파일을 삭제할 때는:

rm file.txt

특히 rm 명령어는 삭제한 파일을 일반적인 방법으로 복구하기 어렵기 때문에 운영 서버에서는 경로를 확인한 후 사용하는 습관이 중요합니다.


5. sudo와 root 권한 이해하기

리눅스 서버에서는 모든 사용자가 동일한 권한을 갖지 않습니다.

일반 사용자는 시스템 전체에 영향을 주는 작업을 제한받으며, 시스템 관리가 필요한 경우 sudo를 사용해 관리자 권한으로 명령어를 실행할 수 있습니다.

예를 들어 패키지를 설치할 때 다음과 같이 사용할 수 있습니다.

sudo apt update

root 계정은 시스템 전체를 변경할 수 있는 강력한 권한을 가지고 있습니다.

따라서 서버 운영에서는 모든 작업을 root 계정으로 수행하기보다는 필요한 권한만 사용하는 방식으로 관리하는 것이 안전합니다.


6. 리눅스 사용자 계정 관리

서버에 여러 사용자가 접근해야 한다면 계정을 분리하는 것이 좋습니다.

Ubuntu에서는 다음과 같이 새로운 사용자를 생성할 수 있습니다.

sudo adduser serveruser

필요한 경우 관리자 권한을 가진 그룹에 사용자를 추가할 수 있습니다.

sudo usermod -aG sudo serveruser

사용자 계정을 분리하면 누가 서버에 접근하고 어떤 작업을 수행하는지 관리하기 쉬워집니다.

또한 사용하지 않는 계정이나 오래된 계정은 주기적으로 확인하는 것이 서버 보안에 도움이 됩니다.


7. 리눅스 파일 권한 관리

리눅스 서버를 운영할 때 파일 권한은 매우 중요한 개념입니다.

다음 명령어로 파일 권한을 확인할 수 있습니다.

ls -l

권한은 기본적으로 읽기, 쓰기, 실행으로 구분됩니다.

  • r : 읽기
  • w : 쓰기
  • x : 실행

예를 들어 스크립트 파일에 실행 권한을 추가하려면 다음과 같이 사용할 수 있습니다.

chmod +x backup.sh

파일의 소유자를 변경할 때는 chown 명령어를 사용할 수 있습니다.

sudo chown user:user backup.sh

웹 서버를 운영할 때 파일 권한을 잘못 설정하면 Nginx나 애플리케이션이 파일에 접근하지 못하는 문제가 발생할 수 있습니다.

반대로 중요한 파일에 지나치게 넓은 권한을 부여하면 보안 문제가 발생할 수 있으므로 필요한 권한만 부여하는 것이 좋습니다.


8. 패키지 업데이트와 설치

Ubuntu 계열에서는 apt 패키지 관리자를 이용해 프로그램을 설치하고 업데이트할 수 있습니다.

먼저 패키지 정보를 갱신합니다.

sudo apt update

설치된 패키지를 업데이트하려면 다음 명령어를 사용할 수 있습니다.

sudo apt upgrade

Nginx를 설치하려면 다음과 같은 방식으로 진행할 수 있습니다.

sudo apt install nginx

설치 후에는 서비스가 정상적으로 실행되는지 확인해야 합니다.

sudo systemctl status nginx

운영 서버에서는 패키지를 무조건 업데이트하기보다 업데이트 전 서비스 영향과 호환성을 확인하는 것이 좋습니다.

특히 데이터베이스나 웹 애플리케이션이 운영되고 있다면 중요한 데이터와 설정 파일을 먼저 백업하는 습관이 필요합니다.


9. systemctl로 서버 서비스 관리하기

Linux 서버에서 웹 서버나 데이터베이스 같은 프로그램은 서비스 형태로 실행되는 경우가 많습니다.

systemd 기반 시스템에서는 systemctl을 이용하여 서비스를 관리할 수 있습니다.

Nginx 상태 확인:

sudo systemctl status nginx

Nginx 시작:

sudo systemctl start nginx

Nginx 재시작:

sudo systemctl restart nginx

Nginx 중지:

sudo systemctl stop nginx

서버 재부팅 후에도 자동으로 시작하도록 설정:

sudo systemctl enable nginx

설정 파일을 수정한 후에는 서비스를 재시작하기 전에 설정 문법을 먼저 확인하는 습관을 들이는 것이 좋습니다.

Nginx의 경우 다음 명령어를 사용할 수 있습니다.

sudo nginx -t

설정에 문제가 없다면 그때 서비스를 재시작하는 방식으로 작업하면 설정 오류로 인한 장애를 줄일 수 있습니다.


10. CPU와 메모리 사용량 확인하기

서버가 갑자기 느려졌다면 CPU와 메모리 사용량부터 확인하는 것이 좋습니다.

대표적인 명령어는 top입니다.

top

설치되어 있다면 htop을 이용하여 프로세스 상태를 보다 편리하게 확인할 수도 있습니다.

메모리 사용량은 다음과 같이 확인할 수 있습니다.

free -h

CPU와 메모리뿐만 아니라 디스크 공간도 확인해야 합니다.

df -h

특정 디렉터리가 많은 용량을 차지하고 있는지 확인하려면:

sudo du -sh /var/*

웹 서버 로그가 지나치게 많이 쌓이거나 백업 파일이 계속 누적되면 디스크 공간이 부족해질 수 있습니다.

따라서 서버 운영에서는 CPU와 RAM뿐만 아니라 디스크 사용량도 정기적으로 확인하는 것이 중요합니다.


11. 리눅스 서버 로그 확인하기

서버에 문제가 발생하면 로그를 먼저 확인하는 것이 기본적인 장애 분석 방법입니다.

systemd 기반 리눅스에서는 journalctl을 사용할 수 있습니다.

전체 시스템 로그 확인:

sudo journalctl

Nginx 서비스 로그 확인:

sudo journalctl -u nginx

실시간으로 로그를 확인하려면 다음과 같이 사용할 수 있습니다.

sudo journalctl -u nginx -f

Nginx를 사용하는 경우 액세스 로그와 오류 로그도 중요한 분석 자료입니다.

로그에서 다음과 같은 내용을 확인할 수 있습니다.

  • HTTP 오류
  • 서비스 실행 실패
  • 비정상적인 접속
  • 권한 오류
  • 애플리케이션 오류
  • 디스크 공간 부족
  • 설정 파일 오류

서버 장애가 발생했을 때 무작정 서비스를 재설치하기보다는 로그를 먼저 확인하면 문제의 원인을 더 빠르게 찾을 수 있습니다.


12. 리눅스 서버 방화벽 설정

인터넷에 연결된 서버라면 방화벽을 적절하게 설정해야 합니다.

Ubuntu에서는 UFW를 사용할 수 있습니다.

현재 상태 확인:

sudo ufw status

웹 서비스에 필요한 HTTP 포트를 허용하는 예시는 다음과 같습니다.

sudo ufw allow 80/tcp

HTTPS를 사용하는 경우:

sudo ufw allow 443/tcp

SSH 접속을 위한 포트도 서버 환경에 맞게 허용해야 합니다.

방화벽을 잘못 설정하면 원격 서버에 접속하지 못하는 상황이 발생할 수 있으므로 설정을 변경하기 전에 현재 접속 방법과 허용된 규칙을 반드시 확인해야 합니다.

AWS EC2에서는 리눅스 서버의 UFW뿐만 아니라 AWS 보안 그룹의 인바운드 규칙도 함께 확인해야 합니다.


13. SSH 서버 보안 강화하기

SSH는 원격 서버 관리에 필수적인 기능이지만 인터넷에 직접 노출된 서버라면 공격 시도가 발생할 수 있습니다.

SSH 보안을 강화하기 위해 다음과 같은 방법을 고려할 수 있습니다.

SSH 키 인증 사용

비밀번호만 사용하는 방식보다 SSH 키를 이용한 인증을 사용하는 것이 일반적인 서버 보안 방법입니다.

사용하지 않는 계정 정리

불필요한 사용자 계정이 서버에 남아 있지 않도록 주기적으로 확인합니다.

방화벽 설정

SSH 접근이 불필요하게 모든 IP에 개방되지 않도록 환경에 맞게 접근 범위를 관리합니다.

보안 업데이트

운영체제와 주요 서버 프로그램의 보안 업데이트를 확인합니다.

로그인 기록 확인

비정상적인 로그인 시도가 있는지 시스템 로그를 확인합니다.

SSH 설정 파일을 변경할 때는 현재 접속 세션을 유지하면서 별도의 터미널에서 새로운 접속이 정상적으로 되는지 확인하는 것이 안전합니다.


14. Nginx를 이용한 웹 서버 구성

리눅스 서버에 웹사이트를 운영하려면 웹 서버가 필요합니다.

대표적으로 Nginx와 Apache가 사용됩니다.

Nginx를 설치한 후 서비스가 정상적으로 실행되면 서버의 IP 주소를 통해 기본 웹 페이지에 접근할 수 있습니다.

웹 서버를 운영할 때는 이후 다음과 같은 설정을 추가할 수 있습니다.

  • 도메인 연결
  • 서버 블록 설정
  • 리버스 프록시
  • HTTPS 적용
  • SSL 인증서 설정
  • 액세스 로그 관리
  • 오류 페이지 설정

따라서 리눅스 서버를 공부한 다음 단계로 Nginx를 직접 구성해보면 서버 운영에 대한 이해를 크게 높일 수 있습니다.


15. MySQL 데이터베이스 서버 관리

웹사이트나 애플리케이션을 운영할 때 데이터 저장을 위해 데이터베이스가 필요할 수 있습니다.

MySQL은 대표적인 관계형 데이터베이스 관리 시스템입니다.

리눅스 서버에 MySQL을 설치하고 애플리케이션과 연결하면 회원정보, 게시물, 주문정보 등 다양한 데이터를 저장할 수 있습니다.

데이터베이스 서버에서는 특히 다음 항목이 중요합니다.

  • 데이터베이스 사용자 관리
  • 접근 권한 설정
  • 비밀번호 관리
  • 외부 접속 제한
  • 데이터베이스 백업
  • 로그 확인
  • 디스크 용량 관리

데이터베이스 포트를 인터넷에 무조건 공개하기보다 애플리케이션 서버와 데이터베이스 서버 간의 접근 범위를 적절하게 제한하는 것이 중요합니다.


16. Docker를 이용한 리눅스 서버 운영

최근에는 Docker를 이용해 애플리케이션을 컨테이너 형태로 배포하는 방식도 많이 사용됩니다.

Docker를 사용하면 애플리케이션 실행 환경을 컨테이너 단위로 관리할 수 있어 배포와 환경 구성이 편리해집니다.

예를 들어 다음과 같이 Docker 버전을 확인할 수 있습니다.

docker --version

실제 서버 환경에서는 Docker Compose를 이용하여 웹 서버, 애플리케이션, 데이터베이스 등 여러 컨테이너를 함께 관리하는 구성도 가능합니다.

다만 Docker를 사용한다고 해서 서버 보안과 백업 관리가 필요 없어지는 것은 아닙니다.

컨테이너와 호스트 서버의 보안, 이미지 관리, 데이터 볼륨 백업, 포트 노출 여부 등을 함께 관리해야 합니다.


17. 리눅스 서버 백업 관리

서버 운영에서 백업은 장애 대응을 위한 가장 중요한 준비 중 하나입니다.

다음과 같은 데이터는 정기적으로 백업하는 것이 좋습니다.

  • 웹사이트 파일
  • Nginx 설정 파일
  • 애플리케이션 설정
  • 데이터베이스
  • SSL 관련 설정
  • 중요한 사용자 데이터

백업 파일을 서버 한 곳에만 보관하면 서버 자체에 문제가 발생했을 때 함께 손실될 수 있습니다.

따라서 중요한 데이터는 별도의 저장 공간이나 클라우드 스토리지 등에 추가로 보관하는 방법을 고려해야 합니다.

백업에서는 단순히 파일을 복사하는 것뿐만 아니라 실제로 복구가 가능한지 테스트하는 과정도 중요합니다.


18. 서버 장애가 발생했을 때 점검 순서

서버가 정상적으로 작동하지 않는다고 해서 바로 재설치할 필요는 없습니다.

다음 순서로 점검하면 문제의 범위를 좁혀갈 수 있습니다.

1단계: 서버 상태 확인

서버 자체가 정상적으로 실행되고 있는지 확인합니다.

2단계: CPU와 메모리 확인

top

또는

free -h

3단계: 디스크 확인

df -h

4단계: 서비스 상태 확인

systemctl status nginx

5단계: 로그 확인

journalctl -u nginx

6단계: 포트 확인

웹 서버가 필요한 포트에서 정상적으로 실행되고 있는지 확인합니다.

7단계: 방화벽 확인

UFW와 클라우드 보안 그룹의 설정을 함께 확인합니다.

이처럼 시스템 → 리소스 → 서비스 → 로그 → 네트워크 순서로 확인하면 장애 원인을 체계적으로 찾을 수 있습니다.


19. 리눅스 서버 관리 체크리스트

서버를 안정적으로 운영하려면 다음 항목을 정기적으로 확인하는 것이 좋습니다.

  • CPU 사용량 확인
  • 메모리 사용량 확인
  • 디스크 사용량 확인
  • 시스템 로그 확인
  • 웹 서버 오류 로그 확인
  • 불필요한 사용자 계정 확인
  • SSH 로그인 기록 확인
  • 방화벽 규칙 확인
  • 보안 업데이트 확인
  • 백업 상태 확인
  • 데이터베이스 상태 확인
  • 실행 중인 서비스 확인

서버 관리는 한 번 설정하고 끝나는 작업이 아니라 지속적으로 상태를 확인하고 관리하는 과정입니다.


마무리

리눅스 서버 운영을 제대로 이해하려면 단순히 명령어를 외우는 것보다 서버가 어떤 구조로 작동하고 각각의 구성 요소가 어떤 역할을 하는지 이해하는 것이 중요합니다.

SSH를 이용해 서버에 접속하고, 리눅스 파일 시스템과 사용자 권한을 관리한 다음 Nginx와 MySQL 같은 서비스를 설치할 수 있습니다.

이후 Docker를 이용한 애플리케이션 배포, 방화벽과 SSH 보안 설정, 로그 분석, 서버 모니터링, 자동 백업까지 익히면 실제 서버 운영에 필요한 기본적인 능력을 갖출 수 있습니다.

특히 운영 서버에서는 백업 없이 설정을 변경하지 않고, 오류가 발생했을 때 로그를 먼저 확인하며, 필요한 권한만 사용하는 습관​이 중요합니다.

리눅스 서버는 처음에는 어렵게 느껴지지만 하나씩 직접 명령어를 실행하고 문제를 해결해보면 서버 관리의 기본 원리를 자연스럽게 익힐 수 있습니다.

앞으로 리눅스 서버를 기반으로 Nginx 웹 서버, SSL 인증서, MySQL 데이터베이스, Docker 컨테이너까지 단계적으로 구성하면 보다 실무적인 서버 환경을 구축할 수 있습니다.