서버 & 리눅스 실무팁

AppStream 모듈을 활용한 PHP, Node.js 버전별 설치 전략

smartbay 2025. 6. 14. 12:03

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 계열 배포판은 리포지토리를 BaseOSAppStream으로 나눕니다.

  • 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 자동화 혁신 파트너
비즈니스 효율을 높이는 스마트한 IT 솔루션을 제공합니다.

웹사이트 : www.esmartbay.co.kr
E-mail : smartbay.svc@gmail.com
카카오톡 : 바로 상담하기