포럼

XE의 PHP 버전 지원정책 변경에 관한 시리즈 제 3편입니다.

 

1편: PHP 5.3 지원 중단의 허와 실

2편: PHP 버전에 따른 XE 성능 비교

 

2015년 6월 12일 현재 PHP 최신 버전은 5.6.10이고, 아직 안정화되지 않은 7.0.0-alpha 버전도 배포되고 있습니다. 나중에 이 글을 읽으시는 분은 PHP 공식 홈페이지에서 최신 버전을 확인하실 수 있습니다.

 

 

유의적 버전의 이해

 

일단 버전 번호를 구성하는 세 개의 숫자가 갖는 의미부터 살펴보도록 하겠습니다. 이걸 제대로 이해하지 못하시는 분들이 은근히 많더라구요. 버전 번호는 소수가 아닙니다. 소숫점이 2개나 있는 소수 보셨어요? 5.6.10은 5.6.1과 다릅니다.

 

XE, PHP, 아파치, nginx, MySQL 등 대부분의 오픈소스 프로그램들은 유의적 버전(semantic versioning)이라고 하는 체계를 따릅니다. 버전 번호가 단순한 숫자가 아니라 나름 의미를 갖는다는 뜻인데요...

 

PHP 5.6.10의 경우

5 = 주 버전 (major version)

6 = 부 버전 (minor version)

10 = 패치 버전 (patch version)

이렇게 구분이 됩니다.

 

XE 1.8.3의 경우

1 = 주 버전 (major version)

8 = 부 버전 (minor version)

3 = 패치 버전 (patch version)

이렇게 구분이 되고요.

 

주 버전은 자주 바뀌지 않습니다. PHP처럼 안정적인 생태계를 유지하고 있는 경우에는 10년에 한 번 바뀔까 말까 해요. XE도 1.x를 발표한 지 벌써 7~8년 되었죠? 반면, 라라벨처럼 빠른 속도로 발전하는 프로그램은 주 버전을 자주 갈아치우게 됩니다. 나온 지 몇 년 되지도 않았는데 벌써 5.x가 나오더라고요.

 

주 버전이 변경된다는 것은 예전 버전과의 어떠한 호환성도 보장할 수 없다는 의미입니다. 호환되면 다행이지만, 호환되지 않더라도 책임질 수 없다는 거죠. 대개 이런 경우에는 상당히 많은 부분을 고치지 않으면 호환성을 유지하기가 힘듭니다. PHP 4.x에서 5.x로 넘어오면서 클래스 관련 문법이 왕창 바뀐 것이 그 예입니다. 마찬가지로, PHP 5.x에서 7.x로 넘어갈 때는 기존의 mysql 모듈, ereg 함수 등이 완전히 제거될 예정입니다. (6.x를 건너뛰는 이유는 아래에서 설명드릴게요.)

 

부 버전의 변경은 대개 새로운 기능이 추가되었다는 의미입니다. 물론 주 버전을 변경하면서 새로운 기능을 추가하기도 하지만, 이것과는 차이가 있습니다. 주 버전에서 새로운 기능을 추가할 때는 어떠한 호환성도 보장할 수 없지만, 부 버전에서 새로운 기능을 추가할 때는 새로 추가된 기능을 제외하면 대체로 호환성이 유지됩니다. 즉, 새로 추가된 기능을 사용하지 않으면 딱히 호환성을 걱정할 필요가 없다는 거죠.

 

패치 버전의 변경은 호환성에 전혀 영향을 미치지 않는 것이 원칙입니다. 버그수정과 보안패치 외에는 아무 것도 건드리지 않습니다. 새로운 패치버전이 발표되었다면 반드시 업그레이드해야 하며, 5.6.9에서 5.6.10으로 업그레이드했다고 기존에 잘 돌아가던 프로그램이 갑자기 고장나는 일은 있을 수 없습니다.

 

그러나 이런 규칙이 항상 지켜지는 것은 아닙니다. 우선, 기능을 추가하면서 해당 기능과 관련된 함수나 클래스명을 더이상 사용하지 못하게 될 수도 있죠. PHP 5.3에 네임스페이스 기능이 추가되면서 namespace라는 단어를 함부로 사용하지 못하게 된 것이나, PHP 5.4에 hex2bin() 함수가 추가되면서 동일한 이름의 함수를 선언할 수 없게 된 것이 그 예입니다. 이렇게 되면 부 버전에서 새로 추가된 기능과 무관한 코드도 변경해야 할 수 있습니다.

 

PHP의 경우, 5.2 버전 발표 후에 6.x 개발을 진행하다가 일이 잘 풀리지 않아서 취소된 일이 있습니다. (그래서 6.x는 없고, 다음 버전은 7.x가 될 예정입니다.) 그 대신, 이미 개발이 상당히 진전된 기능들이 5.3과 5.4로 나누어 발표되었죠. 그래서 5.2→5.3, 5.3→5.4는 부 버전의 변경인데도 불구하고 차이가 상당히 큽니다. 거의 주 버전을 바꿔야 할 만큼 많은 변화들을 부 버전에 구겨넣었으니까요. 많은 웹호스팅 업체들이 5.2에서 업그레이드하기를 꺼리는 이유도 여기에 있고요.

 

그러나 PHP 5.4 이후에는 유의적 버전 체계를 잘 지키고 있으므로, 5.4에서 잘 돌아가던 프로그램이 5.5에서 고장난다거나 5.5에서 잘 돌아가던 프로그램이 5.6에서 고장나는 일은 굉장히 드뭅니다. 패치 버전은 말할 것도 없고요. mysql 모듈에서 E_DEPRECATED 오류가 나온다는 것도 사실은 오류가 아니라 "다음 주 버전(7.x)에서 없어질 함수이므로 미리 대비하라"는 친절한 안내문일 뿐입니다.

 

 

내가 쓰고 있는 버전은 안전한가?

 

앞서 설명한 것처럼 부 버전이 변경되면 약간의 호환성 문제가 발생할 수 있기 때문에, 즉시 업그레이드할 수 없는 사용자들을 위해 PHP 개발팀에서는 최신 버전뿐 아니라 그 전의 부 버전 한두 개에도 계속 버그수정과 보안패치를 제공하고 있습니다. 2015년 6월 현재 버그수정과 보안패치가 이루어지는 부 버전은 5.6, 5.5, 5.4이고, 각각의 최신 패치 버전은 5.6.10, 5.5.26, 5.4.42입니다. 제일 오랫동안 패치를 받아온 5.4 계열의 패치 버전이 제일 높은 것은 당연하고요.

 

위의 세 가지 버전은 모두 안전합니다. 단, 새로운 패치 버전이 발표될 때마다 가능한 빨리 (한 달 안에) 업그레이드해야 합니다.

 

그 밖에도 PHP 5.3 지원 중단의 허와 실 글에서 소개한 것처럼 여러 리눅스 배포판들이 자체적으로 버그수정과 보안패치를 관리해 주는 버전들이 있습니다. 흔히 사용되는 운영체제와 각각 공식 지원되는 PHP 버전은 아래와 같습니다.

 

CentOS 5.x : PHP 5.1.6 (2017년 3월까지)

CentOS 6.x : PHP 5.3.3 (2020년 11월까지)

CentOS 7.x : PHP 5.4.16 (2024년 6월까지)

 

Debian 6.x : 5.3.3 (2014년 2월까지, LTS 사용시 2016년 2월까지)

Debian 7.x : 5.4.4 (2016년 5월까지, LTS 사용시 2018년 5월까지)

Debian 8.x : 5.6.7 (2018년 5월까지, LTS 사용시 2020년 5월까지)

 

Ubuntu 10.04 LTS : 5.3.3 (2015년 4월 지원 종료)

Ubuntu 12.04 LTS : 5.3.10 (2017년 4월까지)

Ubuntu 14.04 LTS : 5.5.9 (2019년 4월까지)

 

각 리눅스 배포판의 yum 또는 apt-get 명령으로 정기적인 업데이트를 해주고 있다면 위의 버전들 모두 안전합니다. PHP 개발팀에서 공식적으로 지원을 중단했더라도 상관없고, 패치 버전이 낮아도 상관없습니다. 리눅스 배포판들은 보안패치를 제대로 적용해 놓고도 패치 버전을 변경하지 않고, 그 대신 5.5.9+dfsg-1ubuntu4.9처럼 자기네 이름 뒤에 엉뚱한 숫자를 붙이는 고약한 습성이 있거든요.

 

CentOS, Debian, Ubuntu 등 여러 리눅스 배포판이 한때 PHP 5.3.3에서 교차했기 때문에, 이 버전을 여기저기에서 흔히 볼 수 있습니다. 우분투가 아니라면 PHP 5.3.3도 안전합니다.

 

PHP 5.2에 대한 보안패치를 공식적으로 제공하는 곳은 어디에도 없습니다. 따라서 PHP 5.2.x 버전은 모두 위험합니다. CentOS에서 여전히 지원하고 있는 PHP 5.1이 차라리 낫습니다. (다른 버전의 보안패치를 5.2에서 사용할 수 있도록 변환해서 컴파일할 수는 있겠지만, 제대로 하기 힘들 겁니다.)

 

이미 오래 전에 지원이 끊긴 PHP 4.4.x, 5.0.x 버전은 말할 것도 없습니다.

 

 

실용회화 예제

 

고객: 왜 아직도 PHP 5.3.3을 사용하고 있죠? PHP 5.3은 지원이 중단되어서 위험하다는데요?

업체: CentOS 6.x이고, 정기적으로 업데이트해 주고 있습니다.

고객: 아 그런가요? 죄송.

 

고객: PHP 버전이 5.5.14네요? 이거 최신 보안패치 안 된 거 아니예요?

업체: 아 그게요... (핑계 핑계)

고객: 꼬박꼬박 업데이트 안해주면 다른데로 갈 거임!

 

보시다시피 패치 적용 여부에 따라 5.5보다 5.3이 오히려 더 안전한 경우도 있습니다.

 

 

PHP 7.0이 나오면?

 

심심하신 분은 여분의 서버에 설치해서 갖고 놀아 보세요. 반드시 여분의 서버에 설치하셔야 합니다. 실제 사이트를 운영중인 서버에는 당분간 설치하시면 안돼요. 주 버전 변경 치곤 상당히 호환성에 신경을 써주겠다고 약속하긴 했지만, 그래도 주 버전은 함부로 건드리는 거 아닙니다.

 

개인적인 예상으로는 내년 봄~초여름은 되어야 안심하고 사용할 수 있을 것 같습니다.

 

 

글쓴이 당신이 가장 선호하는 버전은 뭔데?

 

저는 Debian 빠돌이이기 때문에 ^^; Debian에서 공식 제공하는 최신 버전인 PHP 5.6.7을 사용하고 있습니다. 앞으로도 당분간은 이 버전을 쭉 사용하게 될 것 같아요. 5.6.10이 나왔다고요? apt-get update && apt-get upgrade 이것만 해주면 걱정없어요.