기술 가이드

Rex로 데이터베이스와 웹서버 설정하기

4 min read DevOps 업데이트됨 18 Sep 2025
Rex로 DB·웹 서버 설정 가이드
Rex로 DB·웹 서버 설정 가이드

요약

이 가이드는 Subversion 외부 저장소(svn:externals)를 설정하고 Rex를 이용해 MySQL 데이터베이스 서버와 Apache 웹서버를 자동으로 설치·구성·시작하는 단계별 예제를 제공합니다. 예제 Rexfile, 배포 작업, 역할별 체크리스트와 치트시트를 포함합니다.

소개

이 문서는 두 개의 프로젝트(repository) — database와 website — 에 대해 외부 라이브러리(lib/Common, lib/Service)를 추가하고, Rexfile을 작성하여 서버 그룹에 대해 준비 작업(prepare)과 배포(deploy)를 수행하는 전체 흐름을 다룹니다. 주요 목표는 다음과 같습니다:

  • Subversion externals 설정 방법
  • Rexfile 작성 패턴(사용자/비밀번호, include, set group, task)
  • MySQL과 Apache 설치/구성/재시작 예제
  • 간단한 애플리케이션 배포 예제

Important: 실제 운영 환경에서는 평문 비밀번호 사용을 피하고, SSH 키나 시크릿 매니저를 이용하세요.

준비: 데이터베이스 리포지토리로 이동

원본 명령을 그대로 사용하여 데이터베이스 저장소로 이동하고 Rexfile을 생성합니다.

wks01 Service# cd ../database  
wks01 database# touch Rexfile

다음으로 공통 라이브러리를 외부 저장소로 추가합니다.

wks01 database# svn propedit svn:externals .

에디터에 다음 줄을 추가하고 저장한 뒤 종료합니다.

lib/Common  http://svn01/svn/common
lib/Service http://svn01/svn/service

externals 설정 후 업데이트와 커밋을 수행합니다.

wks01 database# svn up  
wks01 database# svn ci -m "added external repositories"

svn up 명령은 이제 외부 저장소들도 검사하므로, 외부 저장소에 새로운 서비스가 추가되면 svn up으로 반영됩니다.

데이터베이스용 Rexfile 예제

다음은 데이터베이스 서버(db01)를 준비하는 Rexfile 예제입니다. 코드 블록은 원본 그대로 유지됩니다.

set user => "root";
set password => "f00b4r";
include qw/
   Common::NTP
   Service::MySQL
/;
set group => srvdb => "db01";
task "prepare", group => "srvdb", sub {
   
   # run the common ntp task "prepare"
   Common::NTP::prepare();
   # install mysql
   Service::MySQL::prepare();
   # configure mysql
   Service::MySQL::configure({
      key_buffer         => "32M",
      max_allowed_packet => "32M",
   });
   # restart mysql
   service mysql => "restart";
};

설명 요약:

  • 1~2행: 대상 서버에 접근할 사용자 및 인증 방법을 설정합니다. (운영환경에서는 SSH 키 인증 권장)
  • include: Common::NTP와 Service::MySQL 모듈을 포함하여 모듈의 task를 불러옵니다. 각 task는 Perl 함수로도 호출 가능합니다.
  • set group: srvdb 그룹을 정의하고 db01 호스트를 추가합니다. 여러 호스트를 추가하려면 다음처럼 씁니다.
set group => srvdb => "db01", "db02", "db03";
set group => srvdb => "db[01..03]";
  • task “prepare”: 그룹 srvdb의 모든 서버에서 실행됩니다. NTP 준비, MySQL 설치, 설정 적용, MySQL 재시작을 순서대로 수행합니다.

작업을 리포지토리에 커밋합니다.

wks01 database# svn add Rexfile  
wks01 database# svn ci -m "inital commit of Rexfile"

서버를 준비하려면:

wks01 database# rex prepare

작성한 Rexfile의 task 목록을 확인하려면:

wks01 database# rex -T

웹사이트 프로젝트용 작업 생성

website 디렉터리로 이동하여 유사한 절차로 Rexfile을 생성하고 externals를 설정합니다.

wks01 database# cd ../website  
wks01 website# touch Rexfile

externals 설정:

wks01 website# svn propedit svn:externals .

에디터에 다음 줄을 추가하고 저장합니다.

lib/Common  http://svn01/svn/common
lib/Service http://svn01/svn/service

설정 후 업데이트와 커밋:

wks01 database# svn up  
wks01 database# svn ci -m "added external repositories"

웹서버 준비를 위한 Rexfile 예제:

# Rexfile
set user => "root";
set password => "test";
include qw/
   Common::NTP
   Service::Apache
/;
set group => srvweb => "web01";
task "prepare", group => "srvweb", sub {
   
   # run the common ntp task "prepare"
   Common::NTP::prepare();
   # install apache
   Service::Apache::prepare();
   # configure apache
   Service::Apache::configure({
      timeout => 60,
   });
   # restart apache
   service apache2 => "restart";
};

파일을 저장하고 리포지토리에 추가합니다.

wks01 website# svn add Rexfile  
wks01 website# svn ci -m "initial Rexfile"

웹서버를 준비하려면 다음을 실행합니다.

wks01 website# rex prepare

예제: 애플리케이션 배포 작업

데이터베이스와 웹서버가 준비되면 개발팀이 전달한 ZIP/TAR 아카이브를 배포하는 task를 추가할 수 있습니다.

task "deploy", group => "srvweb", sub {
   upload "your-web-application.tar.gz", "/tmp";
   extract "/tmp/your-web-application.tar.gz",
      owner => "www-data",
      group => "www-data",
      to    => "/var/www";
   rm "/tmp/your-web-application.tar.gz";
};

위 작업은 파일 업로드, 압축 해제(소유자/그룹 지정), 임시파일 삭제를 순서대로 수행합니다.

빠른 체크리스트

  • svn externals 추가: lib/Common, lib/Service
  • svn up 후 svn ci로 변경사항 커밋
  • Rexfile에서 사용자와 인증 설정(운영에서는 키 기반 인증 권장)
  • include로 공통 모듈 추가
  • set group으로 서버 그룹 정의
  • task 정의로 설치·구성·서비스 재시작 순서 구현
  • 배포 task로 업로드 → 압축해제 → 권한 설정 → 정리

Important: 비밀번호를 Rexfile에 평문으로 저장하지 마세요. 대신 환경 변수나 비밀관리 시스템을 사용하세요.

역할별 체크리스트

  • 개발자
    • 패키지(아카이브)를 CI에서 빌드하고 아카이브 형식과 경로를 문서화
    • 배포 스크립트에서 기대하는 소유자/권한을 명시
  • 운영(DevOps)
    • Rexfile에 비밀번호/키 관리 정책 적용
    • 테스트 환경에서 rex prepare/rex deploy를 검증
    • 모니터링과 SLI/SLO 연동(서비스 재시작 후 상태 확인)
  • 리포지토리 관리자
    • svn externals URL의 접근권한 확인
    • 외부 저장소 변경 시 팀에 공지

간단한 방법론(작업 흐름)

  1. externals 설정 및 커밋
  2. Rexfile 작성(prepare task 포함)
  3. 테스트 서버(rex -T, rex prepare)에서 동작 확인
  4. 필요 시 deploy task 추가 및 검증
  5. 운영서버에 적용

명령어 치트시트

  • svn propedit svn:externals . — externals 설정 편집
  • svn up — 외부 저장소 포함 전체 업데이트
  • svn ci -m “msg” — 커밋
  • rex -T — Rexfile의 task 목록 보기
  • rex prepare — prepare task 실행
  • rex deploy — deploy task(예제)의 실행

마이그레이션 팁 및 예외 상황

  • 외부 저장소 URL이 변경되면 svn propedit로 업데이트 후 모든 클라이언트에서 svn up 필요
  • 여러 호스트를 그룹에 추가할 때는 네트워크 대역폭/동시 연결 제한을 고려하여 롤아웃을 단계적으로 수행
  • 패키지 버전 충돌 가능성: Service::* 모듈이 요구하는 패키지 버전과 OS 패키지 매니저의 버전이 다르면 별도 버전 고정 전략 필요

1줄 용어집

  • externals: Subversion에서 다른 리포지토리나 경로를 현재 작업 복사본에 연결하는 기능
  • Rex: Perl 기반 원격 실행 및 배포 자동화 도구
  • Rexfile: Rex 작업을 정의하는 파일(Perl 문법 사용)

마무리 요약

이 문서에서는 Subversion externals를 설정하고 Rex를 통해 데이터베이스(MySQL)와 웹서버(Apache)를 설치·구성·시작하는 전체적인 흐름을 다루었습니다. 예제 Rexfile과 배포 스크립트, 역할별 체크리스트, 치트시트를 제공하여 현장 적용을 빠르게 할 수 있도록 구성했습니다.

요약: svn externals로 공통 모듈을 포함하고, Rexfile의 prepare와 deploy task로 서버 준비와 애플리케이션 배포를 자동화하세요.

공유하기: X/Twitter Facebook LinkedIn Telegram
저자
편집

유사한 자료

안드로이드 홈 화면별 배경화면 설정 가이드
Android 가이드

안드로이드 홈 화면별 배경화면 설정 가이드

데이터 브로커에서 내 정보 삭제하는 방법
프라이버시

데이터 브로커에서 내 정보 삭제하는 방법

안드로이드 홈 화면별 배경화면 설정 가이드
안드로이드 커스터마이징

안드로이드 홈 화면별 배경화면 설정 가이드

Apache Tomcat 모니터링 및 관리 가이드
인프라 모니터링

Apache Tomcat 모니터링 및 관리 가이드

디즈니 플러스 앱 문제 해결 가이드
스트리밍 가이드

디즈니 플러스 앱 문제 해결 가이드

Windows 작업 스케줄러로 Python 스크립트 자동 실행
자동화

Windows 작업 스케줄러로 Python 스크립트 자동 실행