웹서버구축을 위한 Git 사용 방법은 어떻게 되나요?
_____A1.
1. 로컬 개발 환경에서 코드 작성 → 커밋(commit)
2. 원격 서버의 “bare” 저장소(bare repo)로 푸시(push)
3. 서버 측 Git 훅(hook) 스크립트(post-receive 등)가 실행되어 웹 루트(예: /var/www/html)에 코드 체크아웃(checkout)
4. 웹 서버(Nginx, Apache 등)에서 최신 코드를 서비스
Q2. 서버에 Git과 SSH 키 기반 인증을 어떻게 준비하나요?
A2.
1. Git 설치(Ubuntu 예시)
- sudo apt update && sudo apt install -y git
2. 배포 전용 사용자 생성(옵션)
- sudo adduser deployer
3. SSH 키 생성 및 복사(로컬PC)
- ssh-keygen -t ed25519 (또는 rsa)
- ssh-copy-id deployer@서버_IP
4. 서버에서 키 확인
- cat ~/.ssh/authorized_keys
Q3. 서버에 “bare” 저장소는 어떻게 생성하나요?
A3.
1. 배포 전용 계정으로 접속
- ssh deployer@서버_IP
2. 저장소 디렉토리 생성
- mkdir -p ~/git/project.git
3. bare 저장소 초기화
- cd ~/git/project.git
- git init --bare
Q4. post-receive 훅으로 코드 자동 배포 설정 방법은?
A4.
1. 훅 스크립트 위치
- ~/git/project.git/hooks/post-receive
2. 실행 권한 부여
- chmod +x post-receive
3. 스크립트 예시(웹 루트가 /var/www/html/project 라는 가정)
!/bin/bash
GIT_DIR=/home/deployer/git/project.git
WORK_TREE=/var/www/html/project
1) 기존 워킹 트리 초기화(옵션)
git --work-tree="$WORK_TREE" --git-dir="$GIT_DIR" reset --hard
2) 최신 커밋 체크아웃
git --work-tree="$WORK_TREE" --git-dir="$GIT_DIR" checkout -f
3) 파일 권한 조정(옵션)
chown -R www-data:www-data "$WORK_TREE"
find "$WORK_TREE" -type d -exec chmod 755 {} \;
find "$WORK_TREE" -type f -exec chmod 644 {} \;
4) 서비스 리로드(필요시)
systemctl reload nginx
Q5. 로컬 저장소에서 원격 리포지토리 추가 및 배포 절차는?
A5.
1. 로컬 프로젝트에서 원격 추가
- git remote add production deployer@서버_IP:~/git/project.git
- git add . && git commit -m "배포용 커밋"
- git push production master (또는 main)
3. 푸시 후 서버 훅이 자동 실행되어 웹 루트에 반영됨
Q6. 배포 시 충돌(conflict)·에러 대응 및 권한 문제 해결 팁은?
A6.
• 권한 문제
- 웹 서버 사용자(www-data 등)와 파일 소유권 충돌 시 chown/chmod로 일원화
• 충돌 방지
- 서버 워킹 트리 직접 수정 지양
- 항상 로컬에서만 작업 → 푸시 후 반영
• 로그 확인
- hooks 폴더 내 post-receive 오류는 syslog 또는 stderr로 확인
- deployer 홈 디렉토리에 로그 파일을 남기도록 스크립트 수정 가능
Q7. 브랜치 전략(branching) 및 멀티 환경(dev·staging·prod) 적용 방법은?
A7.
1. 브랜치 예시
- develop: 개발 중인 기능 통합
- master/main: 안정화된 코드를 배포
2. 멀티 환경
- 서버별 bare repo 생성: project-dev.git, project-stg.git, project-prod.git
- 로컬에 remote 별도 등록
· git remote add staging deployer@서버:~/git/project-stg.git
· git remote add production deployer@서버:~/git/project-prod.git
- 각 브랜치 → 해당 remote로 푸시
Q8. 보안 및 유지보수 팁은?
A8.
• Git 저장소 접근 통제
- SSH 키 인증만 허용, 패스워드 로그인 차단
- /home/deployer/git 이하 디렉토리에 일반 사용자 접근 금지
• 백업
- bare repo와 웹 루트 정기 백업(cron 사용)
• 무중단 배포
- 롤링 업데이트, symlink 스위칭 방식(deployments/releases 디렉토리)
• CI/CD 연동
- Jenkins, GitLab CI, GitHub Actions 등으로 빌드·테스트·배포 자동화
Q9. CI/CD 없이 간단히 배포 스크립트를 작성하려면?
A9.
• deploy.sh 예시(로컬)
!/bin/bash
REMOTE=production
BRANCH=master
echo "1. 로컬 커밋 확인"
git status
echo "2. 커밋 메시지 입력"
read -p "Message: " MSG
git add . && git commit -m "$MSG"
echo "3. 원격 ${BRANCH} 브랜치에 푸시"
git push $REMOTE $BRANCH
• executable 권한 부여 후( chmod +x deploy.sh )
- ./deploy.sh 로 배포 일관화
— 끝 —
아래에는 각 단계별로 필요한 절차와 팁을 순서대로 자세히 설명해 드립니다.
1. 서버 준비 • Git 설치 먼저 웹서버(예: Ubuntu, CentOS 등)에 Git이 설치되어 있어야 합니다.
Ubuntu 기준으로 “sudo apt update && sudo apt install git” 명령어를, CentOS 계열에서는 “sudo yum install git”을 사용하세요.
• SSH 접근 설정 서버에 SSH로 접속 가능한 계정을 만들고 공개키 기반 인증을 설정해 두면, 비밀번호 입력 없이도 안전하게 push/pull 할 수 있습니다.
2. 서버에 ‘베어(bare)’ 리포지터리 생성 베어 리포지터리는 실제 작업 트리가 없고 Git 오브젝트만 저장하는 특수한 리포지터리입니다.
웹 루트와 분리된 위치(예: /home/git/repos/project.git)에 베어 리포지터리를 만들어 두면 여러 개발자가 협업하기 편리합니다.
• mkdir -p /home/git/repos/project.git • cd /home/git/repos/project.git • git init --bare 이후 이 베어 리포지터리에 개발자 로컬 리포지터리가 원격(origin)으로 연결되어 push/pull을 주고받게 됩니다.
3. 포스트 리시브(Post-receive) 훅 설정으로 자동 배포 소스를 push할 때마다 웹서버의 실제 서비스 폴더(예: /var/www/html/project)에 자동으로 배포하고 싶다면, 베어 리포지터리 안에 있는 훅 디렉토리에 post-receive 스크립트를 작성합니다.
• /home/git/repos/project.git/hooks/post-receive (이 파일이 훅 스크립트가 됩니다) • 내용 예시 !/bin/bash TARGET=/var/www/html/project GIT_DIR=/home/git/repos/project.git BRANCH=master read oldrev newrev refname if [[ $refname = refs/heads/$BRANCH ]]; then echo "Deploying branch $BRANCH to production…" git --work-tree=$TARGET --git-dir=$GIT_DIR checkout -f $BRANCH 필요하다면 npm install, composer install 등 빌드 명령 추가 echo "Deployment finished." fi • 스크립트에 실행 권한을 부여하세요: chmod +x post-receive 이렇게 하면 개발자가 master 브랜치로 push 할 때마다 자동으로 웹 루트가 최신 상태로 갱신됩니다.
4. 로컬 워크플로우 구성 • 로컬 리포지터리 생성 및 초기 커밋 개발자 로컬 환경에서 “git init”을 실행하고, .gitignore 등에 환경 설정 파일·로그 파일·node_modules 등 배포 불필요 항목을 등록한 뒤 첫 커밋을 만드세요.
• 원격 리포지터리 연결 git remote add origin git@서버주소:/home/git/repos/project.git • 코드 작업 → 커밋 → 푸시 코드 수정 후 “git add .” → “git commit -m "설명"” → “git push origin master” 순으로 배포가 이뤄집니다.
• 브랜치 전략 기능별 브랜치(feature/xyz) → 테스트 완료 후 develop 브랜치에 병합 → 최종 안정화된 코드를 master에 머지하고 push 하는 방식으로 운영하면 안정적입니다.
5. 배포 후 관리 및 롤백 • 서버에 체크아웃된 파일만 직접 수정하지 마시고 항상 Git 푸시를 통해 배포하세요.
• 문제가 생기면 “git checkout 이전커밋해시” 또는 태그(tag)로 쉽게 롤백할 수 있습니다.
• 빌드 과정이 필요한 경우 훅 스크립트에 빌드 명령(예: npm run build, composer install, migrations 등)을 함께 작성해 두면 관리가 수월합니다.
6. 고급 팁 • 권한 관리: 웹루트 폴더와 훅 스크립트 실행 유저(예: git 사용자)의 권한을 미리 조정해 두세요.
• CI/CD 연동: GitHub Actions, GitLab CI, Jenkins 등을 이용해 테스트·빌드·배포 파이프라인을 구축하면 수동 푸시 없이도 안정적인 릴리즈가 가능합니다.
• 보안: 외부에 Git URL을 노출하지 않으려면 VPN이나 사내망 전용 Git 서버를 운영하거나, GitLab CE/EE를 설치해 사설 리포지터리로 사용하세요.
• 백업: 베어 리포지터리 자체를 주기적으로 백업하고, 중요한 설정 파일(환경 변수, SSL 인증서 등)은 별도 관리하세요.
이와 같은 흐름을 따르면 Git을 통해 버전 관리뿐 아니라 웹서버 배포까지 자동화·일원화할 수 있습니다.
프로젝트 규모와 특성에 맞춰 브랜치 전략, 훅 스크립트, CI/CD 도구를 적절히 조합하여 안정적이고 확장성 있는 웹 서버 구축 환경을 만들어 보시기 바랍니다.
작성자:
김하윤 [비회원]
| 작성일자: 10개월 전
2025-07-22 08:02:04
조회수: 126 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 126 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.