Post

Ubuntu 서비스와 패키지의 이해

서비스(데몬)는 웹 서버, 데이터베이스 서버 등을 운영하기 위한 백그라운드 프로세스입니다. systemd를 통해 관리되며, 서버 운영의 핵심 요소입니다. 패키지는 소프트웨어를 설치 가능한 형태로 압축한 것으로, Ubuntu에서는 apt 패키지 매니저를 통해 관리합니다. 2025년 기준 최신 systemd와 apt 사용법을 다룹니다.

Ubuntu 서비스와 패키지의 이해

Ubuntu 서비스와 패키지의 이해

#01. 서비스 (Service)

1. 서비스 = 데몬(Daemon) = 백그라운드 프로세스

서비스는 시스템이 부팅될 때 자동으로 시작되어 백그라운드에서 지속적으로 실행되는 프로그램입니다.

용어설명예시
서비스(Service)systemd에서 관리하는 시스템 구성 요소apache2.service, mysql.service
데몬(Daemon)백그라운드에서 실행되는 프로세스httpd, mysqld, sshd
유닛(Unit)systemd가 관리하는 모든 리소스의 단위.service, .socket, .timer

2. 서비스의 특징

  • 자동 시작: 시스템 부팅 시 자동으로 시작
  • 백그라운드 실행: 사용자 개입 없이 지속 실행
  • 네트워크 서비스: 외부 요청을 대기하고 처리
  • 시스템 리소스 관리: CPU, 메모리, 파일 핸들러 관리

3. 주요 서비스 유형

카테고리서비스 예시설명
웹 서버apache2, nginxHTTP/HTTPS 요청 처리
데이터베이스mysql, postgresql, mongodb데이터 저장 및 관리
네트워크ssh, ftp, dhcp네트워크 통신 서비스
시스템systemd, cron, rsyslog시스템 관리 및 로깅

4. systemd

우분투(Ubuntu)를 포함한 대부분의 현대 리눅스 배포판에서 사용하는 시스템 및 서비스 관리자(System and Service Manager)

쉽게 말해서, 부팅부터 종료까지 운영체제의 모든 프로세스를 관리하는 “init 시스템”

Ubuntu 15.04 이후부터 systemd가 기본 init 시스템으로 사용된다.

graph TD
    A[systemd PID 1] --> B[System Services]
    A --> C[User Services]
    A --> D[Socket Services]
    A --> E[Timer Services]
    B --> F[apache2.service]
    B --> G[mysql.service]
    B --> H[ssh.service]

5. systemctl 명령어

systemctlsystemd를 제어하는 명령어 도구(command line tool)

중요: 서비스 관리는 root 권한이 필요하므로 명령어 앞에 sudo를 붙여야 한다.

sudo는 일반 사용자가 관리자 권한을 빌려서 명령어를 실행하려고 할 때 사용하는 옵션

기본 서비스 제어 명령

명령어설명예시
sudo systemctl start 서비스명서비스 시작sudo systemctl start apache2
sudo systemctl stop 서비스명서비스 중지sudo systemctl stop apache2
sudo systemctl restart 서비스명서비스 재시작sudo systemctl restart apache2
sudo systemctl reload 서비스명설정만 다시 로드sudo systemctl reload apache2

서비스 상태 관리

1
2
3
4
5
6
7
8
# 서비스 상태 확인
sudo systemctl status apache2

# 서비스 활성화 (부팅시 자동 시작)
sudo systemctl enable apache2

# 서비스 비활성화 (부팅시 자동 시작 해제)
sudo systemctl disable apache2

고급 조회 명령

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 모든 서비스 목록 보기
sudo systemctl list-units --type=service

# 활성화된 서비스만 보기
sudo systemctl list-units --type=service --state=active

# 실패한 서비스 보기
sudo systemctl list-units --type=service --state=failed

# 부팅시 자동 시작 서비스 목록
sudo systemctl list-unit-files --type=service --state=enabled

# 특정 서비스 검색
sudo systemctl list-unit-files | grep mysql

6. 서비스 로그 확인 (journalctl)

journalctlsystemd의 로그 관리 도구

1
2
3
4
5
6
7
8
9
10
11
# 특정 서비스 로그 보기
sudo journalctl -u apache2

# 실시간 로그 모니터링
sudo journalctl -u apache2 -f

# 최근 100줄만 보기
sudo journalctl -u apache2 -n 100

# 특정 시간 이후 로그 보기
sudo journalctl -u apache2 --since "2025-01-01 00:00:00"

7. (고급) 서비스 시작에 실패한 경우

서비스를 시작하지 못하는 원인을 파악하기 위해 서비스 시작과 함께 로그를 함께 표시해야 한다.

1
sudo systemctl restart 서비스명 && journalctl -fu 서비스명

#02. Ubuntu 패키지

패키지란 하나의 소프트웨어를 설치·업데이트·삭제할 수 있도록, 실행 파일 + 설정 파일 + 문서 + 의존성 정보 등을 모아놓은 파일 묶음.

쉽게 말하면 설치 파일

1. 패키지 시스템 개요

Ubuntu의 패키지 관리는 APT(Advanced Package Tool) 를 기반으로 합니다.

graph LR
    A[Ubuntu Repositories] --> B[APT Package Manager]
    B --> C[.deb 패키지 파일]
    C --> D[시스템 설치]
    B --> E[의존성 자동 해결]
    B --> F[보안 업데이트]

2. APT 저장소 시스템

기본 저장소 구성

1
2
# 저장소 목록 확인
cat /etc/apt/sources.list.d/ubuntu.sources

아래와 같이 출력된다.

1
2
3
4
5
6
7
8
9
10
11
Types: deb
URIs: http://kr.archive.ubuntu.com/ubuntu/
Suites: noble noble-updates noble-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

Types: deb
URIs: http://security.ubuntu.com/ubuntu/
Suites: noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

각 블록은 APT가 패키지를 가져올 저장소를 정의한다.

  • Types: 어떤 형식의 저장소인지 (보통 deb, 즉 바이너리 패키지)
  • URIs: 저장소 서버 주소(URL)
  • Suites: 어떤 배포판/버전/업데이트 채널인지
  • Components: 저장소 안의 카테고리(메인/제한/커뮤니티/비공식 등)
  • Signed-By: 저장소 패키지 서명을 검증할 때 사용할 GPG 키 파일

첫 번째 블록 해석

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 바이너리 패키지 저장소 사용
Types: deb

# 한국 미러 서버에서 패키지를 받음
URIs: http://kr.archive.ubuntu.com/ubuntu/

# noble → Ubuntu 24.04 LTS (개발 코드명: Noble Numbat) 기본 릴리스
# noble-updates → 안정성/버그 수정 업데이트
# noble-backports → 공식 지원은 아니지만 최신 패키지 백포트
#   백포트: 최신 소프트웨어를 오래된 안정 버전에 맞춰 다시 빌드해서 제공하는 저장소
Suites: noble noble-updates noble-backports

# main → Canonical이 공식 지원하는 핵심 패키지
# restricted → 드라이버 등 제한된 라이선스 패키지
# universe → 커뮤니티가 관리하는 오픈소스 패키지
# multiverse → 저작권/특허 문제로 제한된 패키지
Components: main restricted universe multiverse

# 이 저장소의 패키지는 /usr/share/keyrings/ubuntu-archive-keyring.gpg로 서명 검증
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

저장소 목록 갱신하기

새로운 패키지 설치 전에 항상 실행한다 (권장)

1
$ sudo apt-get upgrade

패키지 설치

1
$ sudo apt-get install 패키지이름

패키지 재설치

1
$ sudo apt-get --reinstall install 패키지이름

패키지 삭제 : 설정파일은 지우지 않음

1
$ sudo apt-get remove -y 패키지이름

설정파일까지 모두 지움

1
$ sudo apt-get purge -y 패키지이름

패키지 검색

1
$ sudo apt-cache search 패키지이름

패키지 정보 보기

1
$ sudo apt-cache show 패키지이름

사용하지 않는 패키지 제거

1
$ sudo apt-get autoremove

설치 완료 후 설치를 위해 내려받은 파일 제거

1
2
$ sudo apt-get clean
$ sudo apt-get autoclean

3. apt 명령어 (간소화된 버전)

Ubuntu 16.04부터 apt 명령어가 도입되어 더 간단하게 사용할 수 있습니다.

apt-get/apt-cacheapt설명
apt-get updateapt update패키지 목록 업데이트
apt-get upgradeapt upgrade패키지 업그레이드
apt-get installapt install패키지 설치
apt-get removeapt remove패키지 제거
apt-cache searchapt search패키지 검색
apt-cache showapt show패키지 정보 표시
apt-get autoremoveapt autoremove불필요한 패키지 제거
This post is licensed under CC BY 4.0 by the author.