AppStream 모듈을 활용한 PHP, Node.js 버전별 설치 전략
1. 글의 개요 및 도입
서버를 운영하거나 개발 환경을 구성하다 보면 PHP나 Node.js와 같은 언어의 버전 요구사항이 프로젝트마다 다릅니다. 동일한 서버에서 여러 버전의 언어를 관리하려면 복잡한 설정이 필요할 수 있습니다. 이런 문제를 해결하기 위해 등장한 것이 바로 AppStream 모듈입니다.
Rocky Linux, CentOS 8, RHEL 8 등에서 제공하는 AppStream은 dnf 명령어와 결합하여 간편하게 여러 버전의 언어와 라이브러리를 선택적으로 설치하고 관리할 수 있게 도와줍니다. 이 글에서는 AppStream의 개념부터 실제 PHP, Node.js 설치 전략까지 실무에 바로 적용할 수 있는 내용을 중심으로 설명합니다.
2. AppStream 모듈의 구조와 개념
RHEL 8 계열 배포판은 리포지토리를 BaseOS와 AppStream으로 나눕니다.
- BaseOS: 필수 시스템 구성 요소를 제공
- AppStream: 다양한 애플리케이션과 언어 런타임, 도구 제공
AppStream은 모듈(module), 스트림(stream), 프로필(profile)이라는 구조로 구성되어 있습니다.
- 모듈: PHP, Node.js, MariaDB 등 특정 소프트웨어 단위
- 스트림: 소프트웨어의 버전(예: PHP 7.2, 7.4 등)
- 프로필: 설치 옵션 집합(예: common, minimal)
한 시스템에는 특정 모듈의 하나의 스트림만 활성화할 수 있으며, 기본 스트림은 자동 활성화됩니다.
3. AppStream 모듈의 내부 구조 및 작동 방식
.repo파일:/etc/yum.repos.d/디렉토리에 저장됩니다.- 메타데이터 캐싱:
/var/cache/dnf/에 저장되며, 모듈 메타데이터도 포함됩니다. - 설치 방식: 스트림을 활성화하면 해당 스트림에 정의된
modulemd.yaml기준으로 패키지가 설치됩니다.
modulemd.yaml은 다음과 같은 구조를 가집니다:
document: modulemd
version: 2
data:
name: php
stream: 7.4
profiles:
common:
rpms:
- php
- php-cli
- php-common
4. 고급 dnf module 명령어 정리
dnf module list– 사용 가능한 모듈과 스트림 목록dnf module info [모듈명]– 상세 정보 확인dnf module enable [모듈:스트림]– 특정 스트림 활성화dnf module install [모듈:스트림/프로필]– 설치dnf module reset [모듈명]– 스트림 설정 초기화dnf module remove [모듈명]– 모듈 제거dnf history, dnf mark install– 설치 이력 및 마크
5. PHP 설치 전략
PHP의 경우, 다양한 스트림이 존재합니다. 예시:
$ sudo dnf module list php
Last metadata expiration check: 0:12:34 ago on Sat 2025-06-14 13:32:41 KST.
Rocky Linux 8 - AppStream
Name Stream Profiles Summary
php 7.2 common [d], devel, minimal PHP scripting language
php 7.3 common, devel, minimal PHP scripting language
php 7.4 common, devel, minimal PHP scripting language
php 8.0 common, devel, minimal PHP scripting language
Hint: [d]efault, [e]nabled, [x]disabled, [i]installed
전략:
- 프로젝트 요구 사항에 맞는 스트림 활성화
common또는development프로필 선택- 기존 설치와 충돌 시에는
dnf module reset php실행
$ sudo dnf module reset php -y
$ sudo dnf module enable php:7.4 -y
$ sudo dnf module install php:7.4/common -y
Dependencies resolved.
Installing:
php php-cli php-common ...
Complete!
6. Node.js 설치 전략
Node.js도 다양한 스트림을 지원합니다.
$ sudo dnf module list nodejs
Last metadata expiration check: 0:10:18 ago on Sat 2025-06-14 13:34:10 KST.
Rocky Linux 8 - AppStream
Name Stream Profiles Summary
nodejs 10 common [d], development Javascript runtime
nodejs 12 common, development Javascript runtime
nodejs 14 common, development Javascript runtime
nodejs 16 common, development Javascript runtime
Hint: [d]efault, [e]nabled, [x]disabled, [i]installed
설치:
$ sudo dnf module reset nodejs -y
$ sudo dnf module enable nodejs:14 -y
$ sudo dnf module install nodejs:14/common -y
Dependencies resolved.
Installing:
nodejs npm ...
Complete!
설치 확인:
$ node -v
v14.21.3
$ npm -v
6.14.17
$ npx --version
6.14.17
7. AppStream 모듈 운영 전략과 확장 활용
- CI/CD 환경: 버전 고정 및 테스트용 스트림 명시
- 도커와 조합: 격리된 환경에 특정 버전 명확히 구성
- 지원 언어 예시: Python, MariaDB, httpd, nginx 등
예시:
$ sudo dnf module list | grep -E 'python|mariadb|nginx'
python36 3.6 [d] ...
mariadb 10.3 [d] ...
nginx 1.14 [d] ...
8. 결론
AppStream을 활용하면 언어와 도구의 버전을 체계적으로 관리할 수 있어 운영 안정성과 유연성이 향상됩니다. 특히 다양한 프로젝트를 병렬로 운영하거나, 지속적 통합 환경에서 테스트 환경을 빠르게 구성할 때 매우 유용합니다.
스마트베이에서는 이러한 시스템 환경 최적화 전략을 실무에 적극 활용하며, 블로그를 통해 실제 사례를 계속 공유할 예정입니다.
더 깊은 학습을 원하신다면 Red Hat 공식 문서나 커뮤니티 위키, 모듈 정의 문서(modulemd.yaml)를 참고하세요.
비즈니스 효율을 높이는 스마트한 IT 솔루션을 제공합니다.
웹사이트 : www.esmartbay.co.kr
E-mail : smartbay.svc@gmail.com
카카오톡 : 바로 상담하기
'서버 & 리눅스 실무팁' 카테고리의 다른 글
| 리눅스 쉘 스크립트 실전 예제 Part 2: 자동 삭제 스크립트 (0) | 2025.06.14 |
|---|---|
| 리눅스 쉘 스크립트 실전 예제 Part 1: 파일 탐색과 정렬 (0) | 2025.06.14 |
| 리눅스 서버 자동 업데이트 설정법: dnf-automatic 으로 보안 패치 쉽게 관리하기 (4) | 2025.06.14 |
| CentOS의 변화와 Rocky Linux 등장 배경: 리눅스 서버 운영체제 이야기 (1) | 2025.06.14 |
| Rocky Linux의 dnf, yum, rpm 그리고 저장소 완벽 이해 가이드 (3) | 2025.06.11 |