처리중입니다. 잠시만 기다려주세요.
TTJ 코딩클래스
정규반 단과 자료실 테크 뉴스 코딩 퀴즈
테크 뉴스
Hacker News 2026.05.24 26

PHP의 이상한 동작들, 웃고 넘기기엔 실무에서 너무 자주 마주치는 함정

Hacker News 원문 보기
PHP의 이상한 동작들, 웃고 넘기기엔 실무에서 너무 자주 마주치는 함정

PHP가 욕먹는 진짜 이유, 들여다보면 흥미롭습니다

혹시 "PHP는 이상한 언어"라는 말 들어보신 적 있나요? 트위터나 개발자 커뮤니티에서 농담거리로 자주 등장하는 주제인데요. 막상 그게 왜 그런지, 어떤 케이스가 진짜로 문제가 되는지 구체적으로 아는 사람은 의외로 많지 않아요. 이번에 한 개발자가 PHP의 기괴한 동작들을 모아서 정리한 글이 화제인데, 단순히 PHP를 욕하려는 게 아니라 "왜 이런 동작이 나오게 됐는지" 그리고 "실무에서 이걸 어떻게 피해야 하는지"까지 깊이 들어가서 읽어볼 가치가 충분합니다.

PHP는 1995년에 라스무스 레르도르프가 자기 개인 홈페이지(Personal Home Page, 그래서 이름이 PHP죠) 관리하려고 만든 도구가 시작이에요. 처음부터 "제대로 된 프로그래밍 언어"를 설계하려던 게 아니라, 필요할 때마다 기능을 덕지덕지 붙여나간 거거든요. 그래서 함수 이름 규칙도 들쭉날쭉하고, 타입 변환 규칙도 직관과 어긋나는 경우가 많아요. 이게 25년 넘게 쌓이다 보니 지금의 "PHP 괴담"이 만들어진 거죠.

진짜 황당한 동작들

가장 유명한 예시 중 하나가 느슨한 비교(loose comparison) 문제예요. PHP에서 ==를 쓰면 타입을 자동으로 바꿔서 비교하는데, 이게 가끔 말도 안 되는 결과를 만들어요. 예를 들어 0 == "abc"가 PHP 7까지는 true로 평가됐어요. 문자열 "abc"를 숫자로 바꾸려다 0이 나오니까 결국 0 == 0이 되는 거죠. 이게 뭐가 문제냐면, 비밀번호 비교 같은 보안 코드에서 끔찍한 결과를 낳을 수 있어요. 다행히 PHP 8부터는 이 동작이 고쳐졌지만, 그동안 얼마나 많은 버그가 있었을지 상상이 가시죠?

함수 이름의 일관성 부족도 악명 높아요. 문자열 길이는 strlen()인데 배열 개수는 count()예요. str_replace는 언더스코어가 있고 strpos는 없어요. 어떤 함수는 needle(찾는 값)이 먼저고 어떤 함수는 haystack(찾을 대상)이 먼저예요. in_array($needle, $haystack)인데 strpos($haystack, $needle)이거든요. 이거 헷갈려서 버그 내본 PHP 개발자 정말 많을 거예요.

그리고 배열의 정체성 문제도 재밌어요. PHP의 배열은 사실 "순서가 있는 해시맵"이에요. 그러니까 일반 배열([1, 2, 3])도 내부적으로는 키-값 쌍으로 저장되는 거죠. 이게 편할 때도 있는데, 메모리 효율은 진짜 배열보다 훨씬 떨어져요. 큰 데이터를 다룰 때 성능 문제가 생기는 이유예요.

부동소수점 비교도 함정이에요. 0.1 + 0.2 == 0.3false인 건 다른 언어도 마찬가지지만, PHP는 여기에 더해서 문자열로 변환할 때 정밀도가 환경에 따라 달라지기도 해요. php.iniprecision 설정에 따라 같은 숫자가 다르게 출력될 수 있다는 뜻이죠.

다른 언어와 비교해보면

자바스크립트도 비슷한 욕을 먹는 언어죠. [] + []가 빈 문자열이 되고 [] + {}"[object Object]"가 되는 그 유명한 예시처럼요. 그런데 자바스크립트는 브라우저라는 한 환경에서 출발해서 ECMAScript라는 표준으로 정리되면서 점점 일관성을 갖춰가고 있어요. TypeScript 같은 도구가 부족한 부분을 메워주기도 하고요.

파이썬은 처음부터 "명시적인 것이 암시적인 것보다 낫다(Explicit is better than implicit)"는 철학으로 설계됐어요. 그래서 "5" + 3 같은 코드는 그냥 에러를 내요. 헷갈리게 자동 변환을 하느니 차라리 에러를 보여주는 게 낫다는 거죠. 이런 설계 철학의 차이가 언어의 성격을 만드는 거예요.

PHP는 8버전 이후로 정말 많이 좋아졌어요. JIT 컴파일러도 들어왔고, 타입 시스템도 강화됐고, match 표현식 같은 현대적인 문법도 추가됐어요. 라라벨, 심포니 같은 프레임워크 생태계도 여전히 강력하고요. 그러니까 "PHP는 끝났다"는 말은 사실과 좀 달라요. 워드프레스 하나만 봐도 전 세계 웹사이트의 40% 이상이 PHP로 돌아가고 있거든요.

한국 개발자에게 주는 시사점

한국에서도 PHP는 여전히 현역이에요. 카페24, 그누보드, XE 같은 솔루션들이 PHP 기반이고, 워드프레스 사이트도 엄청 많죠. 만약 PHP 프로젝트를 맡게 된다면 이런 함정들을 미리 알고 가는 게 좋아요. 특히 레거시 코드를 다룰 때는 == 대신 ===(엄격 비교)를 쓰는 습관을 들이고, PHP 8 이상으로 마이그레이션을 적극적으로 고려해보세요. 타입 선언을 명시적으로 붙이고 정적 분석 도구인 PHPStan이나 Psalm 같은 걸 쓰면 이런 함정의 90%는 미리 잡아낼 수 있어요.

그리고 더 큰 교훈은요, 어떤 언어든 "왜 이렇게 설계됐는지"를 이해하는 게 중요하다는 거예요. 단순히 "이 언어는 별로야"라고 말하기보다 그 언어가 어떤 역사적 배경에서 만들어졌고, 어떤 트레이드오프를 선택했는지 알면 훨씬 깊이 있는 개발자가 될 수 있거든요.

마무리

PHP의 이상한 동작들은 한 언어가 25년 넘게 살아남으면서 쌓인 흔적이에요. 농담거리로 삼을 만한 부분도 많지만, 그만큼 실무에서 매일 마주치는 함정이기도 하죠. 여러분은 어떤 언어에서 가장 황당한 동작을 경험해보셨나요? 그리고 그걸 어떻게 해결하셨는지 댓글로 공유해주세요.


🔗 출처: Hacker News

이 뉴스가 유용했나요?

이 기술을 직접 배워보세요

워드프레스로 수익 사이트를 만들어보세요

워드프레스 실전 강의에서 직접 배울 수 있습니다.

워드프레스 강의 보기

"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"

실제 수강생 후기
  • 비전공자도 6개월이면 첫 수익
  • 20년 경력 개발자 직강
  • 자동화 프로그램 + 소스코드 제공

매일 AI·개발 뉴스를 받아보세요

주요 테크 뉴스를 매일 아침 이메일로 전해드립니다.

스팸 없이, 언제든 구독 취소 가능합니다.