PHP 서버 배포 개요 및 전통적 FTP 방식
로컬 개발 환경(Host PC)에서 코드 수정과 테스트가 모두 완료되면, 최종적으로 불특정 다수의 일반 사용자가 공용 웹 주소(Domain)를 통해 정상 접속하여 서비스를 이용할 수 있도록 실서버 환경(Production)으로 파일들을 안전하게 전송 및 이관해 기동해야 합니다. 이를 배포(Deployment)라고 합니다.
안전하고 정밀한 배포 환경을 수립하지 않으면, 배포 진행 과정 도중에 일시적으로 사이트 접속 장애(Downtime)가 발생하거나 데이터베이스 비밀번호가 유출되는 심각한 사고로 연결됩니다.
이 장에서는 전통적인 전송 기법의 보안 문제점과 현대적인 파일 전송 관리법에 대해 상세히 학습합니다.
1. 전형적인 FTP/SFTP 전송 방식의 이해
가장 오랜 역사를 지녔으며 설정 방식이 간편하여 흔히 사용되는 방식입니다. 로컬 디스크의 코드를 FTP/SFTP 클라이언트 프로그램(예: FileZilla)을 사용하여 원격 운영 서버의 특정 폴더(예: /var/www/html/)로 덮어쓰는 구조입니다.
[로컬 개발 PC] 💻 ━━ (FileZilla / FTP 프로토콜) ━━▶ [웹 서버 (/var/www/html)] ☁️
⚠️ FTP(File Transfer Protocol) 사용 지양 (평문 전송의 위험)
- 보안 취약점: FTP는 기본적으로 사용자 아이디(ID), 비밀번호(PW), 파일 내용을 네트워크 카드 상에 아무런 암호화가 되지 않은 평문(Plaintext) 상태로 전송합니다. 만약 해커가 네트워크 패킷을 탈취(Sniffing)하면 즉각 서버 권한이 유출되므로 상용 서비스망에서는 절대 사용해서는 안 됩니다.
- 대책: 암호화 터널링인 SSH 프로토콜 기반의 SFTP(Secure FTP) 방식을 강제로 사용해야 합니다.
2. Rsync 터널링 전송 (파일 업로드 성능 개선)
전체 파일을 단순 덮어쓰는 FTP 방식은 매 배포마다 기가바이트 단위의 벤더 디렉터리(vendor/ 등)를 전부 전송하여 상당한 네트워크 병목과 다운타임을 유발합니다.
이를 해결하기 위해 파일의 변경 사항(Diff)과 용량을 비교해 오직 차이점이 존재하는 블록(Delta)만 실시간 암호화 압축 전송하는 Rsync(Remote Sync) 유틸리티를 활용하는 것이 유용합니다.
🔗 Rsync를 통한 고속 원격 전송 명령어 예제
# 로컬 소스코드를 서버의 대상 경로로 증분 전송 및 불필요 파일 자동 제거(--delete)
rsync -avz --delete -e "ssh -i ~/.ssh/my_key.pem" \
./src/ \
ubuntu@13.125.10.20:/var/www/html/
-a(Archive): 파일의 속성(권한, 타임스탬프, 소유주 등)을 변조 없이 그대로 유지하여 서버로 전송합니다.-v(Verbose): 전송되는 파일 진행 사항 로그를 화면에 상세히 표시합니다.-z(Compress): 데이터를 네트워크로 보낼 때 실시간 압축하여 물리 대역폭을 최적화합니다.--delete: 로컬에서 지운 파일이 원격 서버에도 존재할 경우, 서버 디스크 상에서도 동일하게 지워주어 양측 폴더를 완벽히 100% 동일하게 동기화합니다.-e "ssh ...": 전송 통로로 안전한 SSH 암호화 개인 키 경로를 주입하여 통신 보안을 수립합니다.
3. 전통적 업로드 전송 방식의 실무적 한계
단순 SFTP나 Rsync를 사용해 서버에 파일을 직결하는 것은 소규모 개인 사이트에는 편리할 수 있으나, 규모가 있는 실서비스 운영 환경에서는 치명적인 몇 가지 한계를 지닙니다.
- 원자성(Atomicity) 결여: 파일 개수가 수백 개일 때, 업로드가 진행되는 몇 초~몇 분의 찰나 동안 서버에는 이전 버전의 파일과 새 버전의 파일이 일시적으로 혼재하게 됩니다. 이때 사용자가 웹 페이지를 요청하면 클래스 미호출 오류나 심각한 구문 오류(Internal Server Error)가 스크린에 그대로 표출됩니다.
- 배포 추적 불가: 현재 서버에 구동 중인 소스코드가 정확히 언제 배포되었고 어떤 개발자가 수정한 소스코드인지 물리 이력 추적이 불가능합니다.
- 롤백(Rollback) 불가능: 배포 완료 직후 치명적인 버그가 발견되었을 때, 이전의 안정적인 코드로 즉각 되돌릴 수 있는 방법이 부재하여 직접 수동으로 원복 파일을 일일이 찾아서 재업로드해야 하므로 대규모 장애 다운타임으로 이어집니다.
이러한 한계를 극복하고 배포의 일관성 및 초고속 복구를 확보하기 위해 현대 PHP 인프라 환경에서 주로 활용하는 Git 기반 버전 관리 및 롤백 시스템을 다음 장에서 학습합니다.
- 다음 학습: Git 소스 제어를 활용한 코드 이력 배포 및 롤백