์จ๋ผ์ธ ๊ฐ์
>PHP - ๊ณ ๊ธ
๐ PHP ๊ณ ๊ธ - 8์ฃผ์ฐจ: ๋ฐฐํฌ ๋ฐ ์ด์ ๊ธฐ์ด (Linux ์๋ฒ) - 02 Git์ ์ด์ฉํ ์ฝ๋ ๋ฐฐํฌ
				์ฃผ์ ํ๋ก๊ทธ๋จ ์คํ
- ํ์ : 10.0
 - ๋ผ์ด์ ์ค: free
 - ์ด์์ฒด์ :
 - ํ์ผ ํฌ๊ธฐ: 0
 
ํผ๋๋ฐฑ ๋ฐ ๋ค์ด๋ก๋
- ์ฌ์ฉ์ ํ์ : 10.0
 - ๋ค์ด๋ก๋ ์: 1
 - ์กฐํ์: 55
 
์ ์กฐ์ฌ ๋ฐ ๋ฑ๋ก ์ ๋ณด
- ์ ์์ฌ: LUZENSOFT
 - ๋ฑ๋ก์ผ: 2025-09-28 13:34:00
 
- ์ค๋ช
์ 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 ์๋น์ค