PHP가 나쁜 코드와 함께 평가절하된 배경을 돌아보고, 컬리가 레거시 PHP를 현대적인 개발·운영 방식으로 전환하려던 기술 방향을 설명한다. Laravel, 테스트, CI/CD, Docker를 기본 축으로 삼고 Spring Cloud Netflix 기반 MSA에 비 Java 서비스가 참여하도록 Sidecar와 보완 라이브러리를 검토했다. PHP를 버리는 대신 오픈소스 생태계의 변화와 함께 품질 기준을 높이려는 계획이다.
핵심 포인트- PHP는 진입 장벽이 낮고 오래된 저품질 예제가 많이 퍼져 언어 자체가 나쁘다는 인상을 얻었지만, 생태계는 PSR·Composer·PHP 7로 변화했다.
- 신규 서비스는 Laravel을 기본으로 삼고 기존 레거시는 단순 복제가 아니라 테스트 가능한 클린 코드로 교체하려 했다.
- 개발·배포 기반으로 Testing, CI, CD를 구축하고 Docker 활용을 높였으며 Kubernetes도 기술 검토했다.
- Java 중심 Spring Cloud Netflix에 PHP를 연결하기 위해 Spring Cloud Sidecar를 사용해 MSA 참여 경로를 만들었다.
- 회로 차단, 분산 추적, 인증 기능의 빈틈을 phystrix, Zipkin PHP, Kafka, OAuth2 호환 라이브러리로 채우려 했다.
상세 정리- 문제 인식: 채용 시장에서는 개발 역량보다 언어가 먼저 평가되는 경우가 있고, PHP 개발자와 코드에 대한 부정적 인식도 강했다.
- 생태계 배경: PHP는 시작하기 쉬워 사용자가 빠르게 늘었다. 20년 넘게 축적된 튜토리얼과 답변에는 좋은 코드뿐 아니라 빠르고 지저분한 예제도 대량으로 남았다.
- 품질 전환: PHP 커뮤니티는 이 상태에 머물지 않았다. 코딩 규약인 PSR, 의존성 관리 도구 Composer, PHP 7 등의 등장으로 현대적 개발 방식이 자리 잡기 시작했다.
- 레거시 정책: 컬리의 초기 성장에는 PHP 쇼핑몰 솔루션이 크게 기여했다. 다만 기존 코드를 그대로 연장하지 않고 필요한 영역을 새 코드로 점진 교체하는 방향을 택했다.
- 프레임워크 선택: 새 서비스는 Full Stack Framework인 Laravel을 기본으로 한다. 목표는 프레임워크 도입 자체가 아니라 개발과 유지보수가 쉬운 코드 구조다.
- 품질 자동화: 사내에서 테스트 체계와 CI, CD를 만들고 있었다. 개발 환경과 배포 과정에는 Docker를 적극 사용해 실행 환경 차이를 줄이려 했다.
- 인프라 확장: 컨테이너 운영의 다음 단계로 Kubernetes를 검토했다. 글 시점에는 완성 사례가 아니라 기술 방향과 진행 중인 준비를 공개한 상태다.
- MSA 참여: 사내 MSA가 Spring Cloud Netflix 중심이라 PHP 같은 비 Java 서비스가 직접 결합하기 어렵다는 제약이 있었다.
- Sidecar 전략: Spring Cloud Sidecar를 통해 PHP 서비스도 서비스 디스커버리와 클라우드 구성에 참여하도록 설계했다. 관련 사례가 적지만 시도할 가치가 있다고 판단했다.
- 회로 차단: PHP에는 Spring Cloud의 Circuit Breaker와 같은 기능이 없어 Hystrix 개념을 구현한 phystrix를 적용할 계획이었다.
- 추적·모니터링: openzipkin의 zipkin-php와 Kafka를 이용해 트랜잭션 데이터를 수집하고 서비스 간 흐름을 관찰하려 했다.
- 인증 통합: Spring Cloud Security의 OAuth2 규격과 맞는 PHP 라이브러리도 제작 중이었다.
- 오픈소스 환류: 내부 구현이 완성되고 외부에서도 의미 있다고 판단되면 Spring Cloud Netflix와 PHP를 연결한 결과물을 공개할 계획을 세웠다.
- 결론: 언어를 교체하는 것만으로 품질 문제가 해결되지는 않는다. 표준·테스트·배포 자동화·관측·분산 시스템 통합을 함께 개선해야 레거시가 현대화된다.
왜 읽나PHP 레거시를 유지하면서도 프레임워크·배포·MSA·관측 체계를 현대화하려는 백엔드 팀이 전환 범위를 잡는 데 참고할 만하다.