📚 PHP 고급 - 8주차: 배포 및 운영 기초 (Linux 서버) - 02 Git을 이용한 코드 배포

2025. 9. 28. 13:34프로그램/PHP 고급

왜 Git을 사용해 배포해야 하는가?

📚 PHP 고급 - 8주차: 배포 및 운영 기초 (Linux 서버) - 02 Git을 이용한 코드 배포

 

과거에는 #FTP(File Transfer Protocol)를 사용하여 로컬에서 서버로 코드를 수동으로 업로드하는 방식이 흔했지만, 이는 #오류_발생_가능성 이 높고 #롤백(Rollback) 이 어렵다는 치명적인 단점이 있습니다. 현대의 #PHP_배포 환경에서는 Git을 이용한 배포가 #표준 으로 자리 잡았습니다. Git을 사용하면 코드를 버전별로 관리할 수 있고, 안정성자동화가 대폭 향상됩니다. 🚀


1. 기본 배포 전략: Pull 방식

가장 간단한 Git 기반 배포 방식은 서버에서 직접 Git 리포지토리의 변경 사항을 가져오는(Pull) 방식입니다.

단계별 설정

1. 서버에 Git 설치

대부분의 Linux 서버에는 Git이 설치되어 있지만, 설치되어 있지 않다면 패키지 관리자를 사용합니다.

Bash
 
# Ubuntu/Debian
sudo apt update
sudo apt install git

# CentOS/RHEL
sudo yum install git

2. 프로젝트 디렉터리 설정

웹 서버가 코드를 읽어 실행할 디렉터리(예: /var/www/html/my-project)로 이동하여 Git 리포지토리를 복제합니다.

Bash
 
cd /var/www/html
sudo git clone [Git_Repository_URL] my-project

3. 코드 업데이트 및 배포

개발자가 원격 리포지토리(예: GitHub, GitLab)에 코드를 #Push 한 후, 서버에 접속하여 해당 프로젝트 디렉터리에서 git pull 명령을 실행합니다.

Bash
 
cd /var/www/html/my-project
git pull origin main
  • 장점: 설정이 매우 간단합니다.
  • 단점: 매번 서버에 접속하여 수동으로 명령을 실행해야 하므로 완벽한 자동화는 어렵습니다.

 

2. 자동화된 배포 전략: Git Webhook 활용

배포 자동화의 핵심은 개발자가 코드를 원격 리포지토리에 Push 하자마자 서버가 이를 감지하고 자동으로 git pull을 실행하도록 하는 것입니다. 이를 위해 #Webhook을 사용합니다.

1. Webhook 설정

Git 호스팅 서비스(GitHub, GitLab 등)의 설정 페이지에서 Webhook을 설정합니다.

  • Payload URL: 배포를 실행할 서버의 특정 URL(예: http://my-project.com/deploy.php)을 지정합니다.
  • Secret: 보안을 위해 비밀 키를 설정합니다.

2. 배포 스크립트 작성 (deploy.php)

지정된 Payload URL에서 실행될 PHP 스크립트를 작성합니다. 이 스크립트는 Webhook 요청이 올바른 비밀 키와 함께 전송되었는지 확인한 후, Shell 명령어를 실행하여 실제 배포를 수행합니다.

PHP
 
<?php
// 보안 검증 (Secret 키 확인 로직)
// ...

// 배포 실행 (Shell 명령을 통해 git pull 실행)
$output = shell_exec('cd /var/www/html/my-project && git pull origin main 2>&1');

// 로그 기록
file_put_contents('deployment.log', date('Y-m-d H:i:s') . "\n" . $output . "\n", FILE_APPEND);
?>

3. 사용자 권한 설정

웹 서버(Nginx/Apache)를 실행하는 사용자(일반적으로 www-data 또는 nginx)가 git pull 명령을 실행할 권한이 있어야 합니다.

  • www-data 사용자에게 Git 명령어 실행 권한을 부여하고, Git 자격 증명을 설정해야 합니다.
  • 장점: 개발자가 Push만 하면 배포가 자동으로 이루어지므로 배포 속도와 안정성이 높습니다.
  • 단점: 초기 설정 시 Webhook 보안 처리 및 사용자 권한 설정이 복잡할 수 있습니다.

3. 배포 자동화 심화: Capistrano 또는 Deployer

대규모 프로젝트의 경우, git pull 방식만으로는 #데이터베이스_마이그레이션, #캐시_삭제, #심볼릭_링크_교체 등 복잡한 #배포_단계를 안전하게 처리하기 어렵습니다.

이때는 PHP 기반의 Deployer나 Ruby 기반의 Capistrano 같은 전문 #배포_도구 를 사용합니다.

  • 이 도구들은 서버에 코드를 복사하고, 새 버전에 대한 심볼릭 링크를 생성하며, 문제가 발생하면 이전 버전으로 즉시 #원자적_배포(Atomic Deployment) 및 롤백을 수행하는 구조를 제공합니다.

마치며

Git을 이용한 코드 배포는 현대적인 웹 운영의 기본입니다. 초기에는 수동 git pull로 시작하더라도, 프로젝트가 성장함에 따라 Webhook 또는 전문 배포 도구를 사용하여 배포 프로세스를 자동화하는 것이 안정적인 서비스를 위한 핵심 전략입니다. 다음 시간에는 Nginx와 PHP-FPM을 설정하여 실제 서비스를 구동하는 방법을 알아보겠습니다. 🚀

 

 

무료체험, 끊김없이 빠른VPN VPN, 국내 다량IP, 모바일가능, 본사 품질관리 신뢰할 수 있는 보안성 높은 VPN 서비스

https://vpn.luzensoft.com

 

VPN 5,500원 / IP교체 1,100원 / 유동프록시 22,000원 | LuzenVPN 루젠VPN

국내최저가 고정IP서비스,유동프록시(IP4000개이상제공),PPTP,L2TP,IPSec,OpenVPNVPN,통신사VPN,VPN프로그램,고정IP,고정아이피,PPTP,저렴한VPN,리니지MVPN,리니지VPN,아이온VPN,던파VPN,유동프록시,유동PROXY,바이

vpn.luzensoft.com