Linux 2025 핵심 변화

Linux 커널 6.x 시리즈와 systemd 258은 현대 서버 및 개발 환경 관리 방식을 크게 변화시켰습니다. cgroup v1 지원 종료, Rust 코드의 커널 도입 확대, Btrfs 성능 대폭 향상 등이 주요 변화입니다. 이 글에서는 실무 시스템 관리자와 DevOps 엔지니어가 알아야 할 최신 변경사항을 명령어 예제 중심으로 정리합니다.

1. systemd 258 주요 변경사항

cgroup v2 전면 전환

systemd 258(2025년 9월 릴리즈)에서 cgroup v1 지원이 완전히 제거되었습니다. cgroup v2('unified' hierarchy)가 표준이 됩니다.

# cgroup v2 마운트 확인
mount | grep cgroup
# cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime)

# 현재 cgroup 버전 확인
stat -fc %T /sys/fs/cgroup/
# cgroup2fs 출력 시 v2 사용 중

# 특정 서비스의 cgroup 리소스 사용량 확인
systemctl status nginx.service
# CGroup: /system.slice/nginx.service

# cgroup v2를 통한 메모리 제한 설정
systemctl set-property nginx.service MemoryMax=512M
systemctl set-property nginx.service CPUQuota=50%

# 설정 확인
cat /sys/fs/cgroup/system.slice/nginx.service/memory.max

systemd 서비스 관리 심화

# 서비스 상태 확인 (상세)
journalctl -u nginx.service -f --since "1 hour ago"

# 실패한 서비스 목록
systemctl list-units --state=failed

# 서비스 의존성 트리 확인
systemctl list-dependencies nginx.service

# 서비스 시작 시간 분석 (부팅 성능)
systemd-analyze blame | head -20
systemd-analyze critical-chain nginx.service

# 사용자 정의 서비스 유닛 파일 작성
cat /etc/systemd/system/my-app.service
[Unit]
Description=My Custom Application
After=network.target postgresql.service
Requires=postgresql.service

[Service]
Type=simple
User=myapp
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/bin/start.sh
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5

# 리소스 제한
MemoryMax=2G
CPUQuota=200%
TasksMax=1000

# 보안 강화
NoNewPrivileges=yes
PrivateTmp=yes
ProtectSystem=strict
ReadWritePaths=/opt/myapp/data

# 환경 변수
EnvironmentFile=/etc/myapp/env

[Install]
WantedBy=multi-user.target
# 유닛 파일 적용
systemctl daemon-reload
systemctl enable --now my-app.service

# systemd 258 신기능: udevadm 개선
udevadm info --name=/dev/sda
udevadm info --query=all --path=/sys/class/net/eth0

# 디바이스 ID로 직접 지정 (systemd 258 신기능)
udevadm info --device-id-of-file=/dev/sda1
udevadm trigger --verbose --device-id=/dev/disk/by-uuid/abc123

2. Linux Kernel 6.x 파일시스템 개선

Btrfs 성능 향상

# Btrfs 상태 확인
btrfs filesystem show
btrfs device stats /
btrfs filesystem df /

# 스냅샷 생성 (빠른 백업)
btrfs subvolume snapshot / /.snapshots/$(date +%Y%m%d_%H%M%S)

# 스냅샷 목록
btrfs subvolume list /

# 데이터 무결성 스크럽
btrfs scrub start /
btrfs scrub status /

# 압축 설정 (커널 6.x에서 성능 개선)
btrfs filesystem defragment -r -czstd /home

# 마운트 옵션에 압축 설정
# /etc/fstab
# UUID=... / btrfs defaults,compress=zstd:3,noatime 0 0

ext4 및 XFS 최적화

# ext4 파일시스템 상태 확인
tune2fs -l /dev/sda1 | grep -E "(Feature|Filesystem|Block|Inode)"

# 저널링 모드 최적화 (SSD 환경)
tune2fs -o journal_data_writeback /dev/sda1

# XFS 최적화 (병렬 처리 개선)
xfs_info /dev/sdb1

# XFS 조각화 확인 및 최적화
xfs_db -c frag -r /dev/sdb1
xfs_fsr /dev/sdb1

3. 현대적 CLI 도구 — 전통 명령어의 대체

# exa / eza: ls 대체 (Rust 기반)
# 설치: cargo install eza
eza -la --git --icons
eza --tree --level=2 src/

# bat: cat 대체 (구문 강조, 줄 번호)
# 설치: apt install bat 또는 cargo install bat
bat src/main.py
bat --diff file1.py file2.py

# ripgrep (rg): grep 대체 (훨씬 빠름)
# 설치: apt install ripgrep
rg 'function.*auth' src/ --type py
rg -i 'error|exception' /var/log/nginx/error.log

# fd: find 대체
# 설치: apt install fd-find
fd '*.log' /var/log --exec rm {}
fd -e py -x wc -l

# dust: du 대체 (디렉토리 용량 시각화)
# 설치: cargo install du-dust
dust /var/log

# bottom (btm): top/htop 대체
# 설치: cargo install bottom
btm

# delta: diff/git diff 시각화 개선
# ~/.gitconfig
# [core]
#   pager = delta
# [delta]
#   navigate = true
#   line-numbers = true
#   syntax-theme = Dracula

4. 메모리 관리 — Multi-Gen LRU

# MGLRU 활성화 확인 (커널 6.x에서 기본 활성화)
cat /sys/kernel/mm/lru_gen/enabled
# 0x0007 출력 시 활성화됨

# 메모리 사용량 상세 분석
smem -r -k | head -20  # 프로세스별 실제 메모리 사용량

# 메모리 압박 확인
psi-top  # Pressure Stall Information
cat /proc/pressure/memory

# 스왑 사용량 확인
swapon --show
cat /proc/swaps

# zram 설정 (메모리 압축 스왑 — SSD 없는 환경에서 효과적)
modprobe zram
zramctl --find --size=4G --algorithm=zstd
# /dev/zram0 장치 생성됨
mkswap /dev/zram0
swapon -p 100 /dev/zram0

5. 네트워크 관리 — 현대적 도구

# ip 명령어 (ifconfig 대체)
ip addr show
ip link set eth0 up
ip route show
ip route add 192.168.10.0/24 via 192.168.1.1

# ss 명령어 (netstat 대체)
ss -tulnp  # 수신 대기 포트 및 프로세스
ss -s      # 소켓 요약
ss -tp     # TCP 연결 및 프로세스

# NetworkManager 관리 (nmcli)
nmcli device status
nmcli connection show
nmcli connection add type ethernet ifname eth0 con-name "my-connection"

# 네트워크 성능 테스트
iperf3 -s  # 서버 모드
iperf3 -c 192.168.1.100 -t 30  # 클라이언트 모드

# DNS 진단
resolvectl status
resolvectl query google.com

6. 보안 강화: SELinux와 AppArmor

# SELinux 상태 확인
getenforce
# Enforcing | Permissive | Disabled

# SELinux 컨텍스트 확인
ls -Z /var/www/html/

# 거부된 작업 확인
avc_context_check /var/log/audit/audit.log
audit2allow -a | head -50

# AppArmor 프로필 관리 (Ubuntu/Debian)
aa-status
aa-genprof /usr/bin/myapp  # 새 프로필 생성
aa-complain /usr/bin/myapp  # 학습 모드
aa-enforce /usr/bin/myapp   # 강제 적용

# 파일 무결성 모니터링
apt install aide
aide --init
aide --check

7. 컨테이너와 Linux 커널 통합

# cgroup v2 기반 컨테이너 리소스 제한 (Docker)
docker run -d \
  --name myapp \
  --memory=1g \
  --cpus=2 \
  --pids-limit=100 \
  myapp:latest

# 컨테이너 리소스 사용량 실시간 모니터링
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}"

# Podman (루트리스 컨테이너)
podman run --rm -it \
  --userns=keep-id \
  --volume ./data:/data:z \
  python:3.12 python /data/script.py

# namespace 확인
lsns -p $(pgrep nginx)
ls -la /proc/$(pgrep -f 'nginx: master')/ns/

Linux 커널 6.x와 systemd 258은 현대 클라우드 네이티브 환경의 요구사항에 맞춰 성능, 보안, 관리 편의성을 대폭 향상시켰습니다. 특히 cgroup v2 전면 전환은 컨테이너 기반 워크로드의 리소스 관리를 더 정밀하게 만들었으며, Btrfs와 XFS의 성능 개선은 데이터 집약적 워크로드에서 체감 가능한 차이를 만들어냅니다. Rust 기반 CLI 도구들로의 전환도 생산성 향상에 크게 기여합니다.