PHP 신입 배포·운영 기술면접

PHP 신입 · 취준 (0~1년) 배포 · 운영 3문항 조회수 15 · 2026-09-16 (수) 17:40:50
1 컨테이너
Easy

Q. PHP 애플리케이션을 Docker 컨테이너로 배포하려고 합니다. Dockerfile을 작성할 때 베이스 이미지로 'php:8.1-apache'를 사용하는 이유는 무엇이며, 이 이미지에 포함된 주요 구성요소는 무엇인가요? 또한 로컬 개발 환경과 Docker 환경의 차이점을 설명해주세요.

베이스 이미지는 PHP 런타임과 웹서버를 함께 제공하여 즉시 실행 가능한 환경을 구성합니다.

A. 모범답안

php:8.1-apache 베이스 이미지는 PHP 8.1 인터프리터와 Apache 웹서버가 미리 설치되어 있어 별도의 웹서버 설정 없이 PHP 애플리케이션을 바로 실행할 수 있습니다. 이 이미지는 Debian 기반 리눅스 OS, PHP-FPM 또는 mod_php, Apache 설정 파일 등을 포함하고 있습니다. 로컬 환경에서는 XAMPP나 MAMP 같은 통합 패키지를 사용하지만, Docker는 격리된 컨테이너 환경에서 동일한 설정을 재현할 수 있어 '내 컴퓨터에서는 되는데' 같은 문제를 방지합니다. Dockerfile에서 필요한 PHP 확장 모듈(예: pdo_mysql, gd)을 추가로 설치하고, composer를 통해 의존성을 관리할 수 있습니다. 컨테이너는 불변(immutable) 인프라 개념으로, 한 번 빌드된 이미지는 어디서든 동일하게 실행됩니다.

핵심 포인트
  • • php:8.1-apache는 PHP 런타임과 Apache 웹서버가 사전 구성된 베이스 이미지
  • • 격리된 컨테이너 환경으로 환경 차이로 인한 문제 방지
  • • Dockerfile로 필요한 확장 모듈과 의존성을 명시적으로 관리
답변에 넣으면 좋은 키워드
Docker 베이스 이미지 Apache 컨테이너 격리 Dockerfile
실무에서는

개발, 스테이징, 프로덕션 환경에서 동일한 Docker 이미지를 사용해 환경 불일치 문제를 해결합니다.

Follow-up 질문

docker-compose.yml 파일에서 PHP 컨테이너와 MySQL 컨테이너를 함께 구성할 때, 두 컨테이너 간 통신은 어떻게 설정하나요?

2 CI/CD
Medium

Q. GitHub에 PHP 코드를 푸시하면 자동으로 테스트가 실행되고, 테스트가 통과하면 서버에 배포되는 CI/CD 파이프라인을 구축하려고 합니다. GitHub Actions를 사용할 때 전체 파이프라인의 주요 단계들을 순서대로 설명하고, 각 단계에서 실패했을 때 배포가 중단되어야 하는 이유를 설명해주세요.

CI/CD 파이프라인은 코드 체크아웃, 의존성 설치, 테스트 실행, 빌드, 배포 순서로 진행되며 각 단계는 게이트 역할을 합니다.

A. 모범답안

GitHub Actions CI/CD 파이프라인의 주요 단계는 다음과 같습니다. 첫째, 코드 체크아웃 단계에서 저장소의 최신 코드를 가져옵니다. 둘째, PHP와 Composer 설정 단계에서 필요한 PHP 버전을 설치하고 composer install로 의존성을 설치합니다. 셋째, 테스트 단계에서 PHPUnit이나 Pest 같은 테스트 프레임워크로 유닛 테스트와 통합 테스트를 실행합니다. 넷째, 코드 품질 검사 단계에서 PHP_CodeSniffer나 PHPStan으로 코딩 표준과 정적 분석을 수행합니다. 다섯째, 빌드 단계에서 프로덕션 의존성만 설치하고 캐시를 생성합니다. 마지막으로 배포 단계에서 SSH나 FTP로 서버에 파일을 전송하거나 Docker 이미지를 푸시합니다. 각 단계 실패 시 배포를 중단해야 하는 이유는, 테스트 실패는 버그가 있다는 의미이고, 코드 품질 검사 실패는 유지보수성 문제를 의미하며, 이를 무시하고 배포하면 프로덕션 장애로 이어질 수 있기 때문입니다.

핵심 포인트
  • • 코드 체크아웃 → 의존성 설치 → 테스트 → 코드 품질 검사 → 빌드 → 배포 순서로 진행
  • • 각 단계는 다음 단계로 진행하기 위한 품질 게이트 역할
  • • 테스트나 검사 실패 시 배포 중단으로 프로덕션 장애 예방
답변에 넣으면 좋은 키워드
GitHub Actions CI/CD 파이프라인 PHPUnit Composer 자동화 배포
실무에서는

코드 푸시 후 자동으로 테스트와 배포가 진행되어 수동 배포 실수를 방지하고 배포 시간을 단축합니다.

Follow-up 질문

CI/CD 파이프라인에서 환경변수(.env 파일)는 어떻게 안전하게 관리하고 배포해야 하나요?

3 무중단 배포
Medium

Q. Laravel 애플리케이션을 운영 중인 서버에 새 버전을 배포하려고 합니다. 배포 중에도 사용자가 서비스를 계속 이용할 수 있도록 하려면 어떤 배포 전략을 사용해야 하나요? 심볼릭 링크를 활용한 배포 방식의 동작 원리와, 배포 중 문제가 발생했을 때 롤백하는 방법을 설명해주세요.

현재 서비스 중인 디렉토리와 새 버전 디렉토리를 분리하고, 심볼릭 링크를 전환하는 방식을 고려해보세요.

A. 모범답안

무중단 배포를 위해서는 블루-그린 배포 또는 롤링 배포 전략을 사용하며, PHP에서는 주로 심볼릭 링크 방식을 활용합니다. 배포 디렉토리 구조는 releases 폴더에 타임스탬프별 릴리즈를 저장하고(예: releases/20240115120000), current라는 심볼릭 링크가 현재 서비스 중인 버전을 가리키게 합니다. 새 버전 배포 시 releases에 새 디렉토리를 만들어 코드를 배포하고 composer install, 마이그레이션 등을 실행한 후, current 심볼릭 링크만 새 디렉토리로 변경합니다. 심볼릭 링크 변경은 원자적(atomic) 연산이므로 사용자는 중단 없이 서비스를 이용할 수 있습니다. 배포 후 문제 발생 시 current 링크를 이전 릴리즈 디렉토리로 다시 연결하면 즉시 롤백됩니다. Laravel Envoy나 Deployer 같은 배포 도구가 이러한 방식을 자동화해줍니다. storage와 .env 파일은 shared 디렉토리에 두고 각 릴리즈에서 링크로 연결하여 데이터를 보존합니다.

핵심 포인트
  • • 심볼릭 링크를 활용한 블루-그린 배포로 무중단 배포 구현
  • • releases 디렉토리에 버전별 코드 보관, current 링크로 활성 버전 전환
  • • 롤백은 심볼릭 링크를 이전 릴리즈로 변경하는 것만으로 즉시 가능
답변에 넣으면 좋은 키워드
무중단 배포 심볼릭 링크 블루-그린 배포 롤백 Deployer 원자적 연산
실무에서는

서비스 중단 없이 새 기능을 배포하고, 문제 발생 시 1분 내로 이전 버전으로 롤백할 수 있습니다.

Follow-up 질문

데이터베이스 마이그레이션이 포함된 배포에서, 롤백 시 마이그레이션도 함께 되돌려야 하는 상황은 어떻게 처리해야 하나요?

댓글 0

로그인 후 댓글을 작성할 수 있습니다.

아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!