티스토리 뷰
맥에서 PHP 개발을 하다 보면 프로젝트마다 요구 버전이 달라서 곤란할 때가 있다. 레거시 프로젝트는 PHP 7.x를 요구하는데 신규 프로젝트는 8.3을 쓰는 식이다.
이 글은 원래 인텔 맥 시절에 brew-php-switcher로 PHP 7.1을 설치하던 방법을 정리한 것이었다. 지금은 상황이 많이 달라져서 당시 방법과 현재 방법을 나눠서 정리한다.
당시 방법 (인텔 맥, Homebrew 구버전)
# PHP 스위쳐 설치
$ brew install brew-php-switcher
# 옵션 설치
$ brew install openldap libiconv
# 구버전 저장소(tap) 추가
$ brew tap exolnet/homebrew-deprecated
# php7.1 설치
$ brew install php@7.1
# 버전 전환
$ brew-php-switcher 5.6
$ brew-php-switcher 7.0
당시에는 이걸로 잘 됐다. 그런데 지금 이 명령을 그대로 실행하면 대부분 실패한다.
지금은 왜 안 되나
- Homebrew 경로가 바뀌었다. 애플 실리콘 맥은
/usr/local이 아니라/opt/homebrew를 쓴다. 경로를 하드코딩한 스크립트는 동작하지 않는다. - PHP 7.x는 공식 지원이 끝났다. 7.4조차 2022년 11월에 보안 지원이 종료됐다.
homebrew/core에서 빠졌고,exolnet/homebrew-deprecated같은 비공식 tap도 관리가 중단되거나 애플 실리콘 빌드를 제공하지 않는 경우가 많다. - 구버전 PHP는 arm64 바이너리가 없다. 소스 빌드를 시도해도 최신 macOS SDK와 충돌해서 실패하는 경우가 흔하다.
현재 권장 방법 1: shivammathur/php tap
여러 PHP 버전을 병행해서 쓰려면 지금은 이 tap이 사실상 표준이다. 애플 실리콘 빌드를 제공하고, 구버전도 상당 기간 유지해준다.
brew tap shivammathur/php
# 원하는 버전 설치
brew install shivammathur/php/php@8.3
brew install shivammathur/php/php@8.1
# 전환
brew unlink php && brew link --overwrite --force php@8.1
php -v
전환 명령이 길어서 셸 함수로 만들어두면 편하다.
# ~/.zshrc
phpv() {
brew unlink php@8.1 php@8.2 php@8.3 2>/dev/null
brew link --overwrite --force php@$1
php -v
}
# 사용
$ phpv 8.1
현재 권장 방법 2: 프로젝트별 자동 전환 (PHP Monitor / phpenv)
버전을 수동으로 바꾸는 건 결국 잊어버린다. 프로젝트 디렉터리에 들어가면 자동으로 맞춰지는 방식이 훨씬 낫다.
- PHP Monitor: 맥 메뉴바 앱. 클릭 한 번으로 버전 전환이 되고, Valet 연동과 프로젝트별 자동 감지를 지원한다. GUI를 선호하면 이쪽.
- phpenv: rbenv 방식.
.php-version파일을 프로젝트 루트에 두면 해당 디렉터리에서 자동 적용된다. CLI 중심이면 이쪽.
현재 권장 방법 3: 아예 Docker로 격리
솔직히 레거시 PHP를 만져야 한다면 이게 가장 현실적이다. 호스트 맥에 구버전을 설치하려고 씨름하는 것보다 컨테이너 안에서 도는 게 낫다.
# docker-compose.yml
services:
app:
image: php:7.4-fpm
volumes:
- .:/var/www/html
working_dir: /var/www/html
장점이 명확하다.
- 호스트 환경을 오염시키지 않는다
- 팀원 전원이 완전히 동일한 버전과 확장을 쓴다
- 운영 서버와 같은 이미지를 쓸 수 있다
- 애플 실리콘에서도
platform: linux/amd64로 구버전 이미지를 돌릴 수 있다
EOL 버전을 로컬에 직접 설치하는 건 보안 측면에서도 권장되지 않는다. 지원이 끝난 PHP는 취약점이 나와도 패치가 안 나온다.
그래서 어떻게 할까
| 상황 | 선택 |
| 현행 버전(8.1~8.4) 여러 개 병행 | shivammathur/php + PHP Monitor |
| EOL 버전(7.x 이하) 유지보수 | Docker |
| 프로젝트마다 자동 전환 | phpenv + .php-version |
정리
brew-php-switcher+exolnet/homebrew-deprecated조합은 지금은 대부분 동작하지 않는다- 애플 실리콘 Homebrew 경로는
/opt/homebrew - 현행 버전 병행은 shivammathur/php tap
- EOL 버전은 로컬 설치보다 Docker 격리가 낫다
- 수동 전환은 결국 잊어버린다. PHP Monitor나 phpenv로 자동화할 것
'개발' 카테고리의 다른 글
| nGrinder 란 무엇인가 ? (사용 후기) (0) | 2020.12.29 |
|---|---|
| 초기설정 (0) | 2020.12.07 |
| 코딩, 어떤 언어로 시작하지? (0) | 2020.11.09 |
| MBTI 검사를 해보다 (ENTJ), 개발자와 성격 유형 이야기 (0) | 2020.06.28 |
| PhpStorm 제대로 쓰기, 생산성을 실제로 바꾸는 기능들 (0) | 2018.09.04 |
댓글
