들어가며
"Red Hat이냐, Ubuntu냐"는 리눅스 서버를 운영하는 조직이라면 반드시 마주치는 질문이다. 단순한 취향이 아니라 **라이선스 비용, 기술 지원 SLA, 보안 패치 주기, 인증/컴플라이언스, 인력 풀** 등 비즈니스에 직접 영향을 미치는 의사결정이다.
이 글에서는 RHEL(Red Hat Enterprise Linux) 계열과 Ubuntu Server를 **엔터프라이즈 운영 관점**에서 항목별로 비교하고, 워크로드별 추천 기준을 정리한다.
1. 배포판 계보와 현재 생태계
Red Hat 계열
Fedora (업스트림) → RHEL (엔터프라이즈) → CentOS Stream (중간 스트림)
→ Rocky Linux (커뮤니티 RHEL 클론)
→ AlmaLinux (커뮤니티 RHEL 클론)
- **RHEL**: Red Hat 구독 필요. 10년 이상 기술 지원.
- **CentOS Stream**: RHEL 다음 마이너 릴리스의 프리뷰. 프로덕션 직접 사용은 논쟁 중.
- **Rocky Linux / AlmaLinux**: CentOS 8 지원 종료 이후 등장한 1:1 RHEL 호환 배포판.
Debian 계열
Debian (업스트림) → Ubuntu (Canonical) → Ubuntu LTS (장기 지원)
→ Ubuntu Pro (확장 보안)
- **Ubuntu LTS**: 2년마다 릴리스, 기본 5년 + Ubuntu Pro 10년 지원.
- **Ubuntu Pro**: Canonical의 엔터프라이즈 보안·컴플라이언스 상품.
2. 핵심 비교표
| 항목 | RHEL 9 / Rocky 9 | Ubuntu 24.04 LTS |
| ------------------------ | ------------------------------------ | ----------------------- |
| **커널** | 5.14 (백포트) | 6.8 |
| **패키지 매니저** | DNF (yum 후속) | APT |
| **패키지 형식** | RPM | DEB |
| **Init 시스템** | systemd | systemd |
| **기본 파이썬** | 3.9 | 3.12 |
| **SELinux/AppArmor** | SELinux (기본 Enforcing) | AppArmor (기본 Enabled) |
| **방화벽** | firewalld | ufw / nftables |
| **기본 지원 기간** | 10년 (RHEL) / 10년 (Rocky) | 5년 (LTS) |
| **확장 지원** | ELS 최대 13년 | Ubuntu Pro 12년 |
| **라이선스 비용** | RHEL: 서버당 연간 구독 / Rocky: 무료 | 무료 (Pro 별도) |
| **인증·컴플라이언스** | FIPS 140-2/3, CC, STIG | FIPS 140-2 (Pro), CIS |
| **컨테이너 기반 이미지** | UBI (Universal Base Image) | ubuntu:24.04 |
| **클라우드 지원** | AWS, Azure, GCP 전체 | AWS, Azure, GCP 전체 |
3. 패키지 관리 비교
DNF (Red Hat 계열)
패키지 검색·설치·제거
dnf search nginx
dnf install -y nginx
dnf remove nginx
패키지 정보·파일 목록
dnf info nginx
rpm -ql nginx
보안 업데이트만 적용
dnf update --security
모듈 스트림 (RHEL 8+)
dnf module list nodejs
dnf module enable nodejs:20
dnf module install nodejs:20/common
트랜잭션 이력·롤백
dnf history
dnf history undo 15
저장소 관리
dnf repolist
dnf config-manager --add-repo https://repo.example.com/el9/
APT (Ubuntu)
패키지 검색·설치·제거
apt search nginx
apt install -y nginx
apt remove nginx
apt purge nginx # 설정 파일까지 삭제
패키지 정보·파일 목록
apt show nginx
dpkg -L nginx
보안 업데이트만 적용
apt update
apt upgrade -y -o Dpkg::Options::="--force-confold" # 기존 설정 유지
또는 unattended-upgrades 활용
자동 보안 업데이트 설정
apt install unattended-upgrades
dpkg-reconfigure -plow unattended-upgrades
PPA 관리
add-apt-repository ppa:deadsnakes/ppa
apt update
버전 고정
apt-mark hold nginx
apt-mark unhold nginx
패키지 관리 비교 요약
| 기능 | DNF (RHEL) | APT (Ubuntu) |
| -------------- | ----------------------------- | ------------------------- |
| 트랜잭션 롤백 | `dnf history undo` | 직접 지원 없음 |
| 모듈 스트림 | `dnf module` | PPA / Snap |
| 보안 패치 분리 | `--security` 플래그 | `unattended-upgrades` |
| 의존성 해결 | libsolv | apt 내장 |
| 오프라인 설치 | `dnf download` + `createrepo` | `apt-offline` / `dpkg -i` |
| 병렬 다운로드 | 기본 지원 | apt 2.0+ 기본 지원 |
4. 보안 모델 비교
SELinux (RHEL 계열)
**MAC(Mandatory Access Control)** 기반으로 프로세스가 접근할 수 있는 파일·포트·시스템 콜을 정책으로 제한한다.
상태 확인
getenforce # Enforcing / Permissive / Disabled
sestatus # 상세 상태
컨텍스트 확인
ls -Z /var/www/html
ps -eZ | grep nginx
불리언 토글
getsebool -a | grep httpd
setsebool -P httpd_can_network_connect on
문제 진단
ausearch -m avc -ts recent
sealert -a /var/log/audit/audit.log
커스텀 정책 모듈
audit2allow -a -M my_policy
semodule -i my_policy.pp
AppArmor (Ubuntu)
**경로 기반** MAC으로 프로필 파일을 통해 프로그램별 접근 권한을 정의한다.
상태 확인
aa-status
apparmor_status
프로필 모드 전환
aa-enforce /etc/apparmor.d/usr.sbin.nginx
aa-complain /etc/apparmor.d/usr.sbin.nginx
로그 기반 프로필 생성
aa-genprof /usr/sbin/myapp
aa-logprof
보안 모델 비교
| 항목 | SELinux | AppArmor |
| ----------------- | ---------------------- | ---------------- |
| 접근 제어 방식 | 레이블 기반 (inode) | 경로 기반 |
| 학습 곡선 | 높음 | 낮음 |
| 기본 정책 범위 | 매우 광범위 | 주요 서비스 위주 |
| 컨테이너 격리 | 탁월 (MCS) | 기본 수준 |
| 정책 디버깅 | `audit2why`, `sealert` | `aa-logprof` |
| 엔터프라이즈 인증 | STIG, CC, FIPS 필수 | CIS Benchmark |
> **실전 조언**: SELinux를 `Disabled`로 끄는 것은 **안티패턴**이다. 문제가 생기면 `Permissive`로 전환하고 로그를 분석하여 정책을 조정하라.
5. 시스템 관리 명령어 매핑
| 작업 | RHEL / Rocky | Ubuntu |
| --------------------- | --------------------------------------------------------------------- | ------------------------------ |
| 서비스 시작/정지 | `systemctl start nginx` | `systemctl start nginx` |
| 부팅 시 서비스 활성화 | `systemctl enable nginx` | `systemctl enable nginx` |
| 방화벽 포트 열기 | `firewall-cmd --add-port=80/tcp --permanent && firewall-cmd --reload` | `ufw allow 80/tcp` |
| 네트워크 설정 | `nmcli` / `nmtui` | `netplan apply` |
| 호스트명 변경 | `hostnamectl set-hostname` | `hostnamectl set-hostname` |
| 시간 동기화 | `chrony` | `systemd-timesyncd` / `chrony` |
| 사용자 생성 | `useradd -m -s /bin/bash user` | `adduser user` |
| 디스크 파티션 | `fdisk` / `parted` | `fdisk` / `parted` |
| LVM 관리 | `lvm` 기본 내장 | `apt install lvm2` |
| 커널 파라미터 | `sysctl -p` | `sysctl -p` |
6. 컨테이너와 클라우드 네이티브
컨테이너 베이스 이미지
| 항목 | UBI 9 (Red Hat) | ubuntu:24.04 |
| ------------- | ----------------------- | -------------------------- |
| 이미지 크기 | ~215MB | ~78MB |
| Minimal 변형 | `ubi9-minimal` (~100MB) | `ubuntu:24.04` 자체가 경량 |
| Micro 변형 | `ubi9-micro` (~35MB) | - |
| 재배포 | 자유 (UBI EULA) | 자유 |
| 보안 스캔 | Red Hat 취약점 DB | Canonical USN |
| 패키지 매니저 | microdnf / dnf | apt |
RHEL 계열 멀티스테이지
FROM registry.access.redhat.com/ubi9/ubi-minimal:latest AS builder
RUN microdnf install -y java-17-openjdk-headless && microdnf clean all
COPY target/app.jar /app.jar
FROM registry.access.redhat.com/ubi9/ubi-micro:latest
COPY --from=builder /usr/lib/jvm /usr/lib/jvm
COPY --from=builder /app.jar /app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
Ubuntu 멀티스테이지
FROM ubuntu:24.04 AS builder
RUN apt-get update && apt-get install -y --no-install-recommends \
openjdk-17-jre-headless && rm -rf /var/lib/apt/lists/*
COPY target/app.jar /app.jar
FROM gcr.io/distroless/java17-debian12
COPY --from=builder /app.jar /app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
Kubernetes 호환성
두 배포판 모두 Kubernetes를 완벽히 지원한다. 차이는 주로 **관리형 서비스 기본 OS**에서 나타난다.
| 클라우드 | 관리형 K8s 노드 기본 OS |
| ------------- | ----------------------------------------------- |
| **AWS EKS** | Amazon Linux 2023 (RHEL 계열) / Bottlerocket |
| **Azure AKS** | Ubuntu (기본) / Azure Linux (CBL-Mariner) |
| **GCP GKE** | Container-Optimized OS (Chromium 기반) / Ubuntu |
7. 라이선스·비용·지원 비교
| 항목 | RHEL | Rocky Linux | Ubuntu LTS | Ubuntu Pro |
| ------------- | ----------------------- | ---------------- | ------------- | ------------------------------ |
| 라이선스 비용 | 연 \$799~\$13,000+/서버 | 무료 | 무료 | 소규모 무료, 엔터프라이즈 유료 |
| 기술 지원 | Red Hat 24/7 | 커뮤니티 | 커뮤니티 | Canonical 24/7 |
| SLA | 1~4시간 응답 | 없음 | 없음 | 1시간 응답 |
| 보안 패치 | Red Hat Security | RHEL 동기화 | Canonical USN | 확장 보안 (12년) |
| 컴플라이언스 | FIPS, CC, STIG, HIPAA | FIPS (자체 인증) | CIS | FIPS, CIS, DISA-STIG |
| 교육·인증 | RHCSA, RHCE | - | - | CUA (Canonical) |
실제 비용 시뮬레이션 (100대 서버 기준)
| 시나리오 | 연간 비용 (추정) |
| ---------------------------- | -------------------- |
| RHEL Standard (100대) | \$80,000~\$130,000 |
| Rocky Linux + 외부 기술 지원 | \$20,000~\$50,000 |
| Ubuntu LTS (커뮤니티) | \$0 (인력 비용 별도) |
| Ubuntu Pro (100대) | \$25,000~\$50,000 |
8. 워크로드별 추천
| 워크로드 | 추천 배포판 | 근거 |
| ------------------------- | ----------------- | ---------------------------------- |
| **금융·의료 (규제 산업)** | RHEL | FIPS/CC/STIG 인증, 감사 이력 |
| **SAP / Oracle DB** | RHEL | 벤더 공식 지원 |
| **스타트업 웹 서비스** | Ubuntu LTS | 커뮤니티·최신 패키지·비용 |
| **Kubernetes 워크로드** | Ubuntu 또는 Rocky | 클라우드 네이티브 생태계 |
| **ML/AI 워크로드** | Ubuntu | NVIDIA 드라이버·CUDA 우선 지원 |
| **레거시 Java 서비스** | RHEL / Rocky | JBoss/WildFly 인증 |
| **CI/CD 러너** | Ubuntu | GitHub Actions, GitLab Runner 기본 |
| **내부 도구 서버** | Rocky / AlmaLinux | RHEL 호환 + 무료 |
9. 마이그레이션 체크리스트
CentOS → Rocky Linux / AlmaLinux
Rocky Linux 마이그레이션 (in-place)
curl -O https://raw.githubusercontent.com/rocky-linux/rocky-tools/main/migrate2rocky/migrate2rocky.sh
chmod +x migrate2rocky.sh
./migrate2rocky.sh -r # 변환 실행
검증
cat /etc/os-release
rpm -qa | grep rocky
dnf check
Ubuntu ↔ RHEL 전환 시 확인사항
| 확인 항목 | 세부 내용 |
| --------------- | ----------------------------------------------- |
| 패키지 매핑 | `apt` 패키지 → `dnf` 패키지 이름 매핑 목록 작성 |
| 서비스 설정 | systemd 유닛 파일 경로·옵션 검증 |
| 보안 정책 | AppArmor 프로필 → SELinux 정책 변환 |
| 네트워크 | netplan → NetworkManager 전환 |
| 방화벽 | ufw 룰 → firewalld 룰 전환 |
| 자동화 스크립트 | Ansible playbook의 `apt` → `dnf` 모듈 교체 |
| 모니터링 | 에이전트 패키지·로그 경로 확인 |
| 백업/복구 | 스냅샷 또는 이미지 백업 후 전환 |
10. 의사결정 플로우차트
조직에 규제 컴플라이언스(FIPS, CC, STIG) 요구사항이 있는가?
├── Yes → RHEL (또는 Ubuntu Pro FIPS)
└── No
├── 벤더 인증이 필요한 상용 소프트웨어를 운영하는가? (SAP, Oracle 등)
│ ├── Yes → RHEL
│ └── No
│ ├── 24/7 벤더 기술 지원이 필요한가?
│ │ ├── Yes + 예산 있음 → RHEL 또는 Ubuntu Pro
│ │ └── No
│ │ ├── RHEL 호환이 필요한가? (사내 RPM, 기존 인프라)
│ │ │ ├── Yes → Rocky Linux / AlmaLinux
│ │ │ └── No → Ubuntu LTS
│ │ └──
│ └──
└──
마무리
"최고의 배포판"은 없다. 조직의 **규제 요건, 기술 역량, 예산, 기존 인프라**에 맞는 배포판이 올바른 선택이다. 핵심은 다음 세 가지다.
1. **컴플라이언스가 요구되면** RHEL이 가장 안전한 선택이다.
2. **비용을 줄이면서 RHEL 호환을 원하면** Rocky/AlmaLinux를 검토하라.
3. **최신 에코시스템과 커뮤니티 활력을 원하면** Ubuntu LTS가 합리적이다.
어떤 배포판을 선택하든, 패치 관리·보안 정책·자동화는 **배포판과 무관하게** 반드시 갖춰야 할 기본기다.
현재 단락 (1/188)
"Red Hat이냐, Ubuntu냐"는 리눅스 서버를 운영하는 조직이라면 반드시 마주치는 질문이다. 단순한 취향이 아니라 **라이선스 비용, 기술 지원 SLA, 보안 패치 주기, ...